@@ -298,6 +298,7 @@ reorderMatrix(
298298 }
299299}
300300
301+
301302template <typename T>
302303static void
303304compareMatrices (
@@ -315,207 +316,41 @@ compareMatrices(
315316
316317 if ( lda > 0 ) // General case
317318 {
318- for (m = 0 ; m < M; m++) {
319- for (n = 0 ; n < N; n++) {
320- a = getElement<T>(order, clblasNoTrans, m, n, A, lda);
321- b = getElement<T>(order, clblasNoTrans, m, n, B, lda);
322- delta = 0.0 ;
323- if (absDelta != NULL ) {
324- delta = absDelta[m * N + n];
319+ for (m = 0 ; m < M; m++) {
320+ for (n = 0 ; n < N; n++) {
321+ a = getElement<T>(order, clblasNoTrans, m, n, A, lda);
322+ b = getElement<T>(order, clblasNoTrans, m, n, B, lda);
323+ gtestAssertElementsEqual (a, b);
325324 }
326- if ( module (a-b) > delta ) printf (" m : %d\t n: %d\n " , (int )m, (int )n);
327- ASSERT_NEAR (a, b, delta);
328325 }
329326 }
330- }
331327 else // Packed case
332328 {
333- if ( order == clblasColumnMajor)
334- {
335- for ( n = 0 ; n < N; n++)
336- {
337- for ( m=n; m < M; m++)
338- {
339- a = getElement<T>(order, clblasNoTrans, m, n, A, lda);
340- b = getElement<T>(order, clblasNoTrans, m, n, B, lda);
341- delta = 0.0 ;
342- if (absDelta != NULL ) {
343- // delta = absDelta[m * N + n];
344- }
345- if ( module (a-b) > delta ) printf (" m : %d\t n: %d\n " , (int )m, (int )n);
346- ASSERT_NEAR (a, b, delta);
347- }
348- }
349- }
350- else
351- {
352- for ( m = 0 ; m < M; m++)
353- {
354- for ( n = 0 ; n <= m; n++)
355- {
356- a = getElement<T>(order, clblasNoTrans, m, n, A, lda);
357- b = getElement<T>(order, clblasNoTrans, m, n, B, lda);
358- delta = 0.0 ;
359- if (absDelta != NULL ) {
360- // delta = absDelta[m * N + n];
361- }
362- if ( module (a-b) > delta ) printf (" m : %d\t n: %d\n " , (int )m, (int )n);
363- ASSERT_NEAR (a, b, delta);
364- }
365- }
366- }
367- }
368- }
369-
370- template <>
371- __template_static void
372- compareMatrices<FloatComplex>(
373- clblasOrder order,
374- size_t M,
375- size_t N,
376- const FloatComplex *A,
377- const FloatComplex *B,
378- size_t lda,
379- const cl_double *absDelta)
380- {
381- size_t m = 0 , n = 0 ;
382- FloatComplex a, b;
383- cl_double delta;
384-
385- if ( lda > 0 )
386- {
387- for (m = 0 ; m < M; m++) {
388- for (n = 0 ; n < N; n++) {
389- a = getElement<FloatComplex>(order, clblasNoTrans, m, n, A, lda);
390- b = getElement<FloatComplex>(order, clblasNoTrans, m, n, B, lda);
391- delta = 0.0 ;
392- if (absDelta != NULL ) {
393- delta = absDelta[m * N + n];
329+ if ( order == clblasColumnMajor)
330+ {
331+ for ( n = 0 ; n < N; n++)
332+ {
333+ for ( m=n; m < M; m++)
334+ {
335+ a = getElement<T>(order, clblasNoTrans, m, n, A, lda);
336+ b = getElement<T>(order, clblasNoTrans, m, n, B, lda);
337+ gtestAssertElementsEqual (a, b);
338+ }
394339 }
395- if ( (module (CREAL (a) - CREAL (b)) > delta) || (module (CIMAG (a) - CIMAG (b)) > delta) )
396- printf (" m : %d\t n: %d\n " , (int )m, (int )n);
397- ASSERT_NEAR (CREAL (a), CREAL (b), delta);
398- ASSERT_NEAR (CIMAG (a), CIMAG (b), delta);
399340 }
400- }
401- }
402- else // Packed case
403- {
404- if ( order == clblasColumnMajor)
405- {
406- for ( n = 0 ; n < N; n++)
407- {
408- for ( m=n; m < M; m++)
409- {
410- a = getElement<FloatComplex>(order, clblasNoTrans, m, n, A, lda);
411- b = getElement<FloatComplex>(order, clblasNoTrans, m, n, B, lda);
412- delta = 0.0 ;
413- if (absDelta != NULL ) {
414- // delta = absDelta[m * N + n];
415- }
416- if ( (module (CREAL (a) - CREAL (b)) > delta) || (module (CIMAG (a) - CIMAG (b)) > delta) )
417- printf (" m : %d\t n: %d\n " , (int )m, (int )n);
418- ASSERT_NEAR (CREAL (a), CREAL (b), delta);
419- ASSERT_NEAR (CIMAG (a), CIMAG (b), delta);
420- }
421- }
422- }
423- else
424- {
425- for ( m = 0 ; m < M; m++)
426- {
427- for ( n = 0 ; n <= m; n++)
428- {
429- a = getElement<FloatComplex>(order, clblasNoTrans, m, n, A, lda);
430- b = getElement<FloatComplex>(order, clblasNoTrans, m, n, B, lda);
431- delta = 0.0 ;
432- if (absDelta != NULL ) {
433- // delta = absDelta[m * N + n];
434- }
435- if ( (module (CREAL (a) - CREAL (b)) > delta) || (module (CIMAG (a) - CIMAG (b)) > delta) )
436- printf (" m : %d\t n: %d\n " , (int )m, (int )n);
437- ASSERT_NEAR (CREAL (a), CREAL (b), delta);
438- ASSERT_NEAR (CIMAG (a), CIMAG (b), delta);
439- }
440- }
441- }
442- }
443-
444- }
445-
446- template <>
447- __template_static void
448- compareMatrices<DoubleComplex>(
449- clblasOrder order,
450- size_t M,
451- size_t N,
452- const DoubleComplex *A,
453- const DoubleComplex *B,
454- size_t lda,
455- const cl_double *absDelta)
456- {
457- size_t m = 0 , n = 0 ;
458- DoubleComplex a, b;
459- cl_double delta;
460- if ( lda > 0 )
461- {
462- for (m = 0 ; m < M; m++) {
463- for (n = 0 ; n < N; n++) {
464- a = getElement<DoubleComplex>(order, clblasNoTrans, m, n, A, lda);
465- b = getElement<DoubleComplex>(order, clblasNoTrans, m, n, B, lda);
466- delta = 0.0 ;
467- if (absDelta != NULL ) {
468- delta = absDelta[m * N + n];
341+ else
342+ {
343+ for ( m = 0 ; m < M; m++)
344+ {
345+ for ( n = 0 ; n <= m; n++)
346+ {
347+ a = getElement<T>(order, clblasNoTrans, m, n, A, lda);
348+ b = getElement<T>(order, clblasNoTrans, m, n, B, lda);
349+ gtestAssertElementsEqual (a, b);
350+ }
469351 }
470- if ( (module (CREAL (a) - CREAL (b)) > delta) || (module (CIMAG (a) - CIMAG (b)) > delta) )
471- printf (" m : %d\t n: %d\n " , (int )m, (int )n);
472- ASSERT_NEAR (CREAL (a), CREAL (b), delta);
473- ASSERT_NEAR (CIMAG (a), CIMAG (b), delta);
474352 }
475353 }
476- }
477- else // Packed case
478- {
479- if ( order == clblasColumnMajor)
480- {
481- for ( n = 0 ; n < N; n++)
482- {
483- for ( m=n; m < M; m++)
484- {
485- a = getElement<DoubleComplex>(order, clblasNoTrans, m, n, A, lda);
486- b = getElement<DoubleComplex>(order, clblasNoTrans, m, n, B, lda);
487- delta = 0.0 ;
488- if (absDelta != NULL ) {
489- // delta = absDelta[m * N + n];
490- }
491- if ( (module (CREAL (a) - CREAL (b)) > delta) || (module (CIMAG (a) - CIMAG (b)) > delta) )
492- printf (" m : %d\t n: %d\n " , (int )m, (int )n);
493- ASSERT_NEAR (CREAL (a), CREAL (b), delta);
494- ASSERT_NEAR (CIMAG (a), CIMAG (b), delta);
495- }
496- }
497- }
498- else
499- {
500- for ( m = 0 ; m < M; m++)
501- {
502- for ( n = 0 ; n <= m; n++)
503- {
504- a = getElement<DoubleComplex>(order, clblasNoTrans, m, n, A, lda);
505- b = getElement<DoubleComplex>(order, clblasNoTrans, m, n, B, lda);
506- delta = 0.0 ;
507- if (absDelta != NULL ) {
508- // delta = absDelta[m * N + n];
509- }
510- if ( (module (CREAL (a) - CREAL (b)) > delta) || (module (CIMAG (a) - CIMAG (b)) > delta) )
511- printf (" m : %d\t n: %d\n " , (int )m, (int )n);
512- ASSERT_NEAR (CREAL (a), CREAL (b), delta);
513- ASSERT_NEAR (CIMAG (a), CIMAG (b), delta);
514- }
515- }
516- }
517- }
518-
519354}
520355
521356template <typename T>
0 commit comments