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