24 #include <tests/myratest.h>    33 template<
class Precision> 
void test(
int I, 
int J, 
int K, Precision tolerance)
    35   typedef std::complex<Precision> Number;
    36   myra::out() << typestring<Number>() << std::endl;
    38   Number alpha = random<Number>();
    39   Number beta  = random<Number>();
    47     gemm_inplace(D,A,
'C',B,
'N',alpha,beta);
    48     Precision error = frobenius(beta*C+alpha*conjugate(A)*B-D);
    49     myra::out() << 
"  |gemm('C','N')| = " << error << std::endl;
    50     REQUIRE(error < tolerance);
    59     gemm_inplace(D,A,
'C',B,
'T',alpha,beta);
    60     Precision error = frobenius(beta*C+alpha*conjugate(A)*transpose(B)-D);
    61     myra::out() << 
"  |gemm('C','T')| = " << error << std::endl;
    62     REQUIRE(error < tolerance);
    71     gemm_inplace(D,A,
'C',B,
'H',alpha,beta);
    72     Precision error = frobenius(beta*C+alpha*conjugate(A)*hermitian(B)-D);
    73     myra::out() << 
"  |gemm('C','H')| = " << error << std::endl;
    74     REQUIRE(error < tolerance);
    83     gemm_inplace(D,A,
'N',B,
'C',alpha,beta);
    84     Precision error = frobenius(beta*C+alpha*A*conjugate(B)-D);
    85     myra::out() << 
"  |gemm('N','C')| = " << error << std::endl;
    86     REQUIRE(error < tolerance);
    95     gemm_inplace(D,A,
'T',B,
'C',alpha,beta);
    96     Precision error = frobenius(beta*C+alpha*transpose(A)*conjugate(B)-D);
    97     myra::out() << 
"  |gemm('T','C')| = " << error << std::endl;
    98     REQUIRE(error < tolerance);
   107     gemm_inplace(D,A,
'H',B,
'C',alpha,beta);
   108     Precision error = frobenius(beta*C+alpha*hermitian(A)*conjugate(B)-D);
   109     myra::out() << 
"  |gemm('H','C')| = " << error << std::endl;
   110     REQUIRE(error < tolerance);
   119     gemm_inplace(D,A,
'C',B,
'C',alpha,beta);
   120     Precision error = frobenius(beta*C+alpha*conjugate(A)*conjugate(B)-D);
   121     myra::out() << 
"  |gemm('C','C')| = " << error << std::endl;
   122     REQUIRE(error < tolerance);
   129 ADD_TEST(
"cgemmC",
"[dense][blas]")
   130   { test<NumberS> (20,12,17,1.0e-4f); }
   132 ADD_TEST(
"zgemmC",
"[dense][blas]")
   133   { test<NumberD> (20,12,17,1.0e-10); }
 Returns a conjugated copy of a Matrix or Vector. Or, conjugate one inplace. 
Tabulates an IxJ matrix. Allows random access, has column major layout to be compatible with BLAS/LAP...
Definition: bdsqr.h:20
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
Returns a transposed copy of a Matrix. The inplace version only works on a square operand...
Various utility functions/classes related to scalar Number types. 
General purpose dense matrix container, O(i*j) storage. 
Returns a hermitian copy of a Matrix. The inplace version only works on a square operand. 
Simplistic random number functions. 
Variety of routines all for dense Matrix*Matrix multiplies. Delegates to the BLAS. 
std::complex<float>
  |gemm('C','N')| = 5.28042e-06
  |gemm('C','T')| = 2.97628e-06
  |gemm('C','H')| = 3.02914e-06
  |gemm('N','C')| = 5.20144e-06
  |gemm('T','C')| = 2.79814e-06
  |gemm('H','C')| = 2.62966e-06
  |gemm('C','C')| = 2.94807e-06