28 #include <tests/myratest.h> 38 myra::out() << typestring<Number>() << std::endl;
41 Number alpha = random<Number>();
42 Number beta = random<Number>();
44 auto options = Options::create().set_nthreads(4).set_blocksize(128);
48 auto C_parallel = C_serial;
49 syrk_inplace(C_serial,A,
'N',alpha,beta);
50 psyrk_inplace(C_parallel,A,
'N',alpha,beta,options);
51 Precision error = frobenius(C_serial-C_parallel) / frobenius(C_serial);
52 myra::out() <<
" |syrk('N')-psyrk('N')| = " << error << std::endl;
53 REQUIRE(error < tolerance);
58 auto C_parallel = C_serial;
59 syrk_inplace(C_serial,A,
'T',alpha,beta);
60 psyrk_inplace(C_parallel,A,
'T',alpha,beta,options);
61 Precision error = frobenius(C_serial-C_parallel) / frobenius(C_serial);
62 myra::out() <<
" |syrk('T')-psyrk('T')| = " << error << std::endl;
63 REQUIRE(error < tolerance);
68 auto C_parallel = C_serial;
69 syrk_inplace(C_serial,A,
'H',alpha,beta);
70 psyrk_inplace(C_parallel,A,
'H',alpha,beta,options);
71 Precision error = frobenius(C_serial-C_parallel) / frobenius(C_serial);
72 myra::out() <<
" |syrk('H')-psyrk('H')| = " << error << std::endl;
73 REQUIRE(error < tolerance);
78 auto C_parallel = C_serial;
79 syrk_inplace(C_serial,A,
'C',alpha,beta);
80 psyrk_inplace(C_parallel,A,
'C',alpha,beta,options);
81 Precision error = frobenius(C_serial-C_parallel) / frobenius(C_serial);
82 myra::out() <<
" |syrk('C')-psyrk('C')| = " << error << std::endl;
83 REQUIRE(error < tolerance);
89 ADD_TEST(
"psyrk2",
"[pdense][parallel]")
93 test<NumberS>(I,J,1.0e-4f);
94 test<NumberD>(I,J,1.0e-8);
95 test<NumberC>(I,J,1.0e-4f);
96 test<NumberZ>(I,J,1.0e-8);
Interface class for representing subranges of dense Matrix's.
Routines for computing Frobenius norms of various algebraic containers.
static Matrix< Number > random(int I, int J)
Generates a random Matrix of specified size.
Definition: Matrix.cpp:353
Options pack for routines in /pdense.
Definition: Options.h:24
Range construct for a lower triangular matrix stored in rectangular packed format.
Specialized container for a lower triangular matrix, O(N^2/2) storage. Used by symmetry exploiting ma...
Various utility functions/classes related to scalar Number types.
General purpose dense matrix container, O(i*j) storage.
Options pack for routines in /pdense.
Reflects Precision trait for a Number, scalar Number types should specialize it.
Definition: Number.h:33
Simplistic random number functions.
Routines for symmetric rank-k updates, a specialized form of Matrix*Matrix multiplication.
Thread parallel version of dense/syrk.h, symmetric rank-k updates.
static LowerMatrix< Number > random(int N)
Generates a random LowerMatrix of specified size.
Definition: LowerMatrix.cpp:249
float
|syrk('N')-psyrk('N')| = 0
|syrk('T')-psyrk('T')| = 0
|syrk('H')-psyrk('H')| = 0
|syrk('C')-psyrk('C')| = 0
double
|syrk('N')-psyrk('N')| = 0
|syrk('T')-psyrk('T')| = 0
|syrk('H')-psyrk('H')| = 0
|syrk('C')-psyrk('C')| = 0
std::complex<float>
|syrk('N')-psyrk('N')| = 0
|syrk('T')-psyrk('T')| = 0
|syrk('H')-psyrk('H')| = 0
|syrk('C')-psyrk('C')| = 0
std::complex<double>
|syrk('N')-psyrk('N')| = 0
|syrk('T')-psyrk('T')| = 0
|syrk('H')-psyrk('H')| = 0
|syrk('C')-psyrk('C')| = 0