@@ -298,7 +298,6 @@ reorderMatrix(
298
298
}
299
299
}
300
300
301
-
302
301
template <typename T>
303
302
static void
304
303
compareMatrices (
@@ -316,41 +315,207 @@ compareMatrices(
316
315
317
316
if ( lda > 0 ) // General case
318
317
{
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);
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];
324
325
}
326
+ if ( module (a-b) > delta ) printf (" m : %d\t n: %d\n " , (int )m, (int )n);
327
+ ASSERT_NEAR (a, b, delta);
325
328
}
326
329
}
330
+ }
327
331
else // Packed case
328
332
{
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
- }
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];
339
394
}
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);
340
399
}
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
- }
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];
351
469
}
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);
352
474
}
353
475
}
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
+
354
519
}
355
520
356
521
template <typename T>
0 commit comments