28 #include <tests/myratest.h> 38 myra::out() << typestring<Number>() << std::endl;
42 Number alpha = random<Number>();
43 Number beta = random<Number>();
45 auto options = Options::create().set_nthreads(4).set_blocksize(128);
49 auto C_parallel = C_serial;
50 syr2k_inplace(C_serial,A,B,
'N',alpha,beta);
51 psyr2k_inplace(C_parallel,A,B,
'N',alpha,beta,options);
52 Precision error = frobenius(C_serial-C_parallel) / frobenius(C_serial);
53 myra::out() <<
" |syr2k('N')-psyr2k('N')| = " << error << std::endl;
54 REQUIRE(error < tolerance);
59 auto C_parallel = C_serial;
60 syr2k_inplace(C_serial,A,B,
'T',alpha,beta);
61 psyr2k_inplace(C_parallel,A,B,
'T',alpha,beta,options);
62 Precision error = frobenius(C_serial-C_parallel) / frobenius(C_serial);
63 myra::out() <<
" |syr2k('T')-psyr2k('T')| = " << error << std::endl;
64 REQUIRE(error < tolerance);
69 auto C_parallel = C_serial;
70 syr2k_inplace(C_serial,A,B,
'H',alpha,beta);
71 psyr2k_inplace(C_parallel,A,B,
'H',alpha,beta,options);
72 Precision error = frobenius(C_serial-C_parallel) / frobenius(C_serial);
73 myra::out() <<
" |syr2k('H')-psyr2k('H')| = " << error << std::endl;
74 REQUIRE(error < tolerance);
79 auto C_parallel = C_serial;
80 syr2k_inplace(C_serial,A,B,
'C',alpha,beta);
81 psyr2k_inplace(C_parallel,A,B,
'C',alpha,beta,options);
82 Precision error = frobenius(C_serial-C_parallel) / frobenius(C_serial);
83 myra::out() <<
" |syr2k('C')-psyr2k('C')| = " << error << std::endl;
84 REQUIRE(error < tolerance);
90 ADD_TEST(
"psyr2k2",
"[pdense][parallel]")
94 test<NumberS>(I,J,1.0e-4f);
95 test<NumberD>(I,J,1.0e-8);
96 test<NumberC>(I,J,1.0e-4f);
97 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
Thread parallel version of dense/syr2k.h, symmetric rank-2k updates.
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.
Routines for symmetric rank-2k updates, a specialized form of Matrix*Matrix multiplication.
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.
static LowerMatrix< Number > random(int N)
Generates a random LowerMatrix of specified size.
Definition: LowerMatrix.cpp:249
float
|syr2k('N')-psyr2k('N')| = 3.14223e-08
|syr2k('T')-psyr2k('T')| = 4.96732e-08
|syr2k('H')-psyr2k('H')| = 4.96986e-08
|syr2k('C')-psyr2k('C')| = 3.10077e-08
double
|syr2k('N')-psyr2k('N')| = 9.72618e-17
|syr2k('T')-psyr2k('T')| = 1.22686e-16
|syr2k('H')-psyr2k('H')| = 1.22986e-16
|syr2k('C')-psyr2k('C')| = 9.79165e-17
std::complex<float>
|syr2k('N')-psyr2k('N')| = 2.66147e-07
|syr2k('T')-psyr2k('T')| = 1.43922e-07
|syr2k('H')-psyr2k('H')| = 1.4367e-07
|syr2k('C')-psyr2k('C')| = 2.68008e-07
std::complex<double>
|syr2k('N')-psyr2k('N')| = 4.68449e-16
|syr2k('T')-psyr2k('T')| = 4.45496e-16
|syr2k('H')-psyr2k('H')| = 4.47783e-16
|syr2k('C')-psyr2k('C')| = 4.60465e-16