26 #include <tests/myratest.h> 36 myra::out() << typestring<Number>() << std::endl;
39 Number alpha = random<Number>();
40 Number beta = random<Number>();
42 auto options = Options::create().set_nthreads(4);
46 auto C_parallel = C_serial;
47 syrk_inplace(C_serial,
'U',A,
'N',alpha,beta);
48 psyrk_inplace(C_parallel,
'U',A,
'N',alpha,beta,options);
49 Precision error = frobenius(C_serial-C_parallel) / frobenius(C_serial);
50 myra::out() <<
" |syrk('U','N')-psyrk('U','N')| = " << error << std::endl;
51 REQUIRE(error < tolerance);
56 auto C_parallel = C_serial;
57 syrk_inplace(C_serial,
'U',A,
'T',alpha,beta);
58 psyrk_inplace(C_parallel,
'U',A,
'T',alpha,beta,options);
59 Precision error = frobenius(C_serial-C_parallel) / frobenius(C_serial);
60 myra::out() <<
" |syrk('U','T')-psyrk('U','T')| = " << error << std::endl;
61 REQUIRE(error < tolerance);
66 auto C_parallel = C_serial;
67 syrk_inplace(C_serial,
'U',A,
'H',alpha,beta);
68 psyrk_inplace(C_parallel,
'U',A,
'H',alpha,beta,options);
69 Precision error = frobenius(C_serial-C_parallel) / frobenius(C_serial);
70 myra::out() <<
" |syrk('U','H')-psyrk('U','H')| = " << error << std::endl;
71 REQUIRE(error < tolerance);
76 auto C_parallel = C_serial;
77 syrk_inplace(C_serial,
'U',A,
'C',alpha,beta);
78 psyrk_inplace(C_parallel,
'U',A,
'C',alpha,beta,options);
79 Precision error = frobenius(C_serial-C_parallel) / frobenius(C_serial);
80 myra::out() <<
" |syrk('U','C')-psyrk('U','C')| = " << error << std::endl;
81 REQUIRE(error < tolerance);
86 auto C_parallel = C_serial;
87 syrk_inplace(C_serial,
'L',A,
'N',alpha,beta);
88 psyrk_inplace(C_parallel,
'L',A,
'N',alpha,beta,options);
89 Precision error = frobenius(C_serial-C_parallel) / frobenius(C_serial);
90 myra::out() <<
" |syrk('L','N')-psyrk('L','N')| = " << error << std::endl;
91 REQUIRE(error < tolerance);
96 auto C_parallel = C_serial;
97 syrk_inplace(C_serial,
'L',A,
'T',alpha,beta);
98 psyrk_inplace(C_parallel,
'L',A,
'T',alpha,beta,options);
99 Precision error = frobenius(C_serial-C_parallel) / frobenius(C_serial);
100 myra::out() <<
" |syrk('L','T')-psyrk('L','T')| = " << error << std::endl;
101 REQUIRE(error < tolerance);
106 auto C_parallel = C_serial;
107 syrk_inplace(C_serial,
'L',A,
'H',alpha,beta);
108 psyrk_inplace(C_parallel,
'L',A,
'H',alpha,beta,options);
109 Precision error = frobenius(C_serial-C_parallel) / frobenius(C_serial);
110 myra::out() <<
" |syrk('L','H')-psyrk('L','H')| = " << error << std::endl;
111 REQUIRE(error < tolerance);
116 auto C_parallel = C_serial;
117 syrk_inplace(C_serial,
'L',A,
'C',alpha,beta);
118 psyrk_inplace(C_parallel,
'L',A,
'C',alpha,beta,options);
119 Precision error = frobenius(C_serial-C_parallel) / frobenius(C_serial);
120 myra::out() <<
" |syrk('L','C')-psyrk('L','C')| = " << error << std::endl;
121 REQUIRE(error < tolerance);
127 ADD_TEST(
"psyrk1",
"[pdense][parallel]")
131 test<NumberS>(I,J,1.0e-4f);
132 test<NumberD>(I,J,1.0e-8);
133 test<NumberC>(I,J,1.0e-4f);
134 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
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.
float
|syrk('U','N')-psyrk('U','N')| = 0
|syrk('U','T')-psyrk('U','T')| = 0
|syrk('U','H')-psyrk('U','H')| = 0
|syrk('U','C')-psyrk('U','C')| = 0
|syrk('L','N')-psyrk('L','N')| = 0
|syrk('L','T')-psyrk('L','T')| = 0
|syrk('L','H')-psyrk('L','H')| = 0
|syrk('L','C')-psyrk('L','C')| = 0
double
|syrk('U','N')-psyrk('U','N')| = 0
|syrk('U','T')-psyrk('U','T')| = 0
|syrk('U','H')-psyrk('U','H')| = 0
|syrk('U','C')-psyrk('U','C')| = 0
|syrk('L','N')-psyrk('L','N')| = 0
|syrk('L','T')-psyrk('L','T')| = 0
|syrk('L','H')-psyrk('L','H')| = 0
|syrk('L','C')-psyrk('L','C')| = 0
std::complex<float>
|syrk('U','N')-psyrk('U','N')| = 0
|syrk('U','T')-psyrk('U','T')| = 0
|syrk('U','H')-psyrk('U','H')| = 0
|syrk('U','C')-psyrk('U','C')| = 0
|syrk('L','N')-psyrk('L','N')| = 0
|syrk('L','T')-psyrk('L','T')| = 0
|syrk('L','H')-psyrk('L','H')| = 0
|syrk('L','C')-psyrk('L','C')| = 0
std::complex<double>
|syrk('U','N')-psyrk('U','N')| = 0
|syrk('U','T')-psyrk('U','T')| = 0
|syrk('U','H')-psyrk('U','H')| = 0
|syrk('U','C')-psyrk('U','C')| = 0
|syrk('L','N')-psyrk('L','N')| = 0
|syrk('L','T')-psyrk('L','T')| = 0
|syrk('L','H')-psyrk('L','H')| = 0
|syrk('L','C')-psyrk('L','C')| = 0