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