23 #include <tests/myratest.h>    31   myra::out() << typestring<Number>() << std::endl;
    36   std::vector<char> ops;
    42   for (
int a = 0; a < ops.size(); ++a)
    43     for (
int b = 0; b < ops.size(); ++b)
    48             std::pair<int,int> A_size(I,J);
    49             if (op_A == 
'T' || op_A == 
'H')
    50                 std::swap(A_size.first, A_size.second);
    51             std::pair<int,int> B_size(A_size.second,K);
    52             if (op_B == 
'T' || op_B == 
'H')
    53                 std::swap(B_size.first, B_size.second);    
    60       Precision error = frobenius(C1-C2);
    61       myra::out() << 
"  |A^" << op_A << 
"*B^" << op_B << 
" [sparse*dense]| = " << error << std::endl;
    62       REQUIRE(error < tolerance);
    65   for (
int a = 0; a < ops.size(); ++a)
    66     for (
int b = 0; b < ops.size(); ++b)
    71             std::pair<int,int> A_size(I,J);
    72             if (op_A == 
'T' || op_A == 
'H')
    73                 std::swap(A_size.first, A_size.second);
    74             std::pair<int,int> B_size(K,A_size.first);
    75             if (op_B == 
'T' || op_B == 
'H')
    76                 std::swap(B_size.first, B_size.second);    
    82       Precision error = frobenius(C1-C2);
    83       myra::out() << 
"  |B^" << op_B << 
"*A^" << op_A << 
" [dense*sparse]| = " << error << std::endl;
    84       REQUIRE(error < tolerance);
    90 ADD_TEST(
"sparse_gemm",
"[sparse]")
    92   test<NumberS>(15,10,40,8,1.0e-4f);
    93   test<NumberD>(15,10,40,8,1.0e-9);
    94   test<NumberC>(15,10,40,8,1.0e-4f);
    95   test<NumberZ>(15,10,40,8,1.0e-9);
 Interface class for representing subranges of dense Matrix's. 
Tabulates an IxJ matrix. Allows random access, has column major layout to be compatible with BLAS/LAP...
Definition: bdsqr.h:20
Variety of routines for mixed dense*sparse or dense*sparse matrix multiplies. The dense*dense case is...
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
static SparseMatrix< Number > random(int I, int J, int N)
Generates a random SparseMatrix with size IxJ and (approximately) N nonzeros. 
Definition: SparseMatrix.cpp:493
General purpose compressed-sparse-column (CSC) container. 
General purpose dense matrix container, O(i*j) storage. 
Reflects Precision trait for a Number, scalar Number types should specialize it. 
Definition: Number.h:33
Variety of routines all for dense Matrix*Matrix multiplies. Delegates to the BLAS. 
Range/Iterator types associated with SparseMatrix. 
float
  |A^N*B^N [sparse*dense]| = 1.94031e-07
  |A^N*B^T [sparse*dense]| = 1.76519e-07
  |A^N*B^H [sparse*dense]| = 2.05409e-07
  |A^N*B^C [sparse*dense]| = 2.078e-07
  |A^T*B^N [sparse*dense]| = 2.5154e-07
  |A^T*B^T [sparse*dense]| = 2.85827e-07
  |A^T*B^H [sparse*dense]| = 3.13821e-07
  |A^T*B^C [sparse*dense]| = 2.78602e-07
  |A^H*B^N [sparse*dense]| = 2.03185e-07
  |A^H*B^T [sparse*dense]| = 2.00622e-07
  |A^H*B^H [sparse*dense]| = 1.87717e-07
  |A^H*B^C [sparse*dense]| = 1.4769e-07
  |A^C*B^N [sparse*dense]| = 2.16122e-07
  |A^C*B^T [sparse*dense]| = 2.56853e-07
  |A^C*B^H [sparse*dense]| = 2.20496e-07
  |A^C*B^C [sparse*dense]| = 2.30649e-07
  |B^N*A^N [dense*sparse]| = 1.92069e-07
  |B^T*A^N [dense*sparse]| = 2.87789e-07
  |B^H*A^N [dense*sparse]| = 2.30528e-07
  |B^C*A^N [dense*sparse]| = 2.24809e-07
  |B^N*A^T [dense*sparse]| = 2.40501e-07
  |B^T*A^T [dense*sparse]| = 1.68636e-07
  |B^H*A^T [dense*sparse]| = 2.17397e-07
  |B^C*A^T [dense*sparse]| = 1.73469e-07
  |B^N*A^H [dense*sparse]| = 1.16892e-07
  |B^T*A^H [dense*sparse]| = 1.54104e-07
  |B^H*A^H [dense*sparse]| = 2.17707e-07
  |B^C*A^H [dense*sparse]| = 2.2582e-07
  |B^N*A^C [dense*sparse]| = 2.25941e-07
  |B^T*A^C [dense*sparse]| = 2.24849e-07
  |B^H*A^C [dense*sparse]| = 2.61129e-07
  |B^C*A^C [dense*sparse]| = 1.58164e-07
double
  |A^N*B^N [sparse*dense]| = 5.1608e-16
  |A^N*B^T [sparse*dense]| = 5.87731e-16
  |A^N*B^H [sparse*dense]| = 4.57628e-16
  |A^N*B^C [sparse*dense]| = 4.42586e-16
  |A^T*B^N [sparse*dense]| = 6.06509e-16
  |A^T*B^T [sparse*dense]| = 5.47404e-16
  |A^T*B^H [sparse*dense]| = 3.94016e-16
  |A^T*B^C [sparse*dense]| = 7.79754e-16
  |A^H*B^N [sparse*dense]| = 4.92296e-16
  |A^H*B^T [sparse*dense]| = 5.27354e-16
  |A^H*B^H [sparse*dense]| = 5.05635e-16
  |A^H*B^C [sparse*dense]| = 4.38635e-16
  |A^C*B^N [sparse*dense]| = 6.92146e-16
  |A^C*B^T [sparse*dense]| = 4.87183e-16
  |A^C*B^H [sparse*dense]| = 3.82395e-16
  |A^C*B^C [sparse*dense]| = 4.13042e-16
  |B^N*A^N [dense*sparse]| = 7.07147e-16
  |B^T*A^N [dense*sparse]| = 6.25456e-16
  |B^H*A^N [dense*sparse]| = 5.16818e-16
  |B^C*A^N [dense*sparse]| = 5.51151e-16
  |B^N*A^T [dense*sparse]| = 4.23514e-16
  |B^T*A^T [dense*sparse]| = 5.86953e-16
  |B^H*A^T [dense*sparse]| = 4.77263e-16
  |B^C*A^T [dense*sparse]| = 5.21753e-16
  |B^N*A^H [dense*sparse]| = 5.2208e-16
  |B^T*A^H [dense*sparse]| = 4.0231e-16
  |B^H*A^H [dense*sparse]| = 6.14986e-16
  |B^C*A^H [dense*sparse]| = 3.18103e-16
  |B^N*A^C [dense*sparse]| = 4.87597e-16
  |B^T*A^C [dense*sparse]| = 2.59653e-16
  |B^H*A^C [dense*sparse]| = 5.05234e-16
  |B^C*A^C [dense*sparse]| = 7.89419e-16
std::complex<float>
  |A^N*B^N [sparse*dense]| = 5.51267e-07
  |A^N*B^T [sparse*dense]| = 6.13317e-07
  |A^N*B^H [sparse*dense]| = 5.57662e-07
  |A^N*B^C [sparse*dense]| = 0
  |A^T*B^N [sparse*dense]| = 6.85747e-07
  |A^T*B^T [sparse*dense]| = 6.28747e-07
  |A^T*B^H [sparse*dense]| = 7.4517e-07
  |A^T*B^C [sparse*dense]| = 6.51574e-07
  |A^H*B^N [sparse*dense]| = 6.52851e-07
  |A^H*B^T [sparse*dense]| = 5.81575e-07
  |A^H*B^H [sparse*dense]| = 5.63049e-07
  |A^H*B^C [sparse*dense]| = 7.19415e-07
  |A^C*B^N [sparse*dense]| = 0
  |A^C*B^T [sparse*dense]| = 5.22738e-07
  |A^C*B^H [sparse*dense]| = 5.46933e-07
  |A^C*B^C [sparse*dense]| = 5.96861e-07
  |B^N*A^N [dense*sparse]| = 6.3997e-07
  |B^T*A^N [dense*sparse]| = 6.33915e-07
  |B^H*A^N [dense*sparse]| = 6.50381e-07
  |B^C*A^N [dense*sparse]| = 0
  |B^N*A^T [dense*sparse]| = 5.54095e-07
  |B^T*A^T [dense*sparse]| = 4.53339e-07
  |B^H*A^T [dense*sparse]| = 5.13361e-07
  |B^C*A^T [dense*sparse]| = 6.15344e-07
  |B^N*A^H [dense*sparse]| = 4.86578e-07
  |B^T*A^H [dense*sparse]| = 5.87265e-07
  |B^H*A^H [dense*sparse]| = 5.96212e-07
  |B^C*A^H [dense*sparse]| = 5.36546e-07
  |B^N*A^C [dense*sparse]| = 0
  |B^T*A^C [dense*sparse]| = 5.52512e-07
  |B^H*A^C [dense*sparse]| = 6.91511e-07
  |B^C*A^C [dense*sparse]| = 6.3388e-07
std::complex<double>
  |A^N*B^N [sparse*dense]| = 1.36183e-15
  |A^N*B^T [sparse*dense]| = 1.38855e-15
  |A^N*B^H [sparse*dense]| = 1.24241e-15
  |A^N*B^C [sparse*dense]| = 0
  |A^T*B^N [sparse*dense]| = 1.40783e-15
  |A^T*B^T [sparse*dense]| = 1.7345e-15
  |A^T*B^H [sparse*dense]| = 1.90833e-15
  |A^T*B^C [sparse*dense]| = 1.4234e-15
  |A^H*B^N [sparse*dense]| = 1.61862e-15
  |A^H*B^T [sparse*dense]| = 1.69424e-15
  |A^H*B^H [sparse*dense]| = 1.3333e-15
  |A^H*B^C [sparse*dense]| = 1.40197e-15
  |A^C*B^N [sparse*dense]| = 0
  |A^C*B^T [sparse*dense]| = 1.28503e-15
  |A^C*B^H [sparse*dense]| = 1.50084e-15
  |A^C*B^C [sparse*dense]| = 1.47281e-15
  |B^N*A^N [dense*sparse]| = 1.82692e-15
  |B^T*A^N [dense*sparse]| = 1.41146e-15
  |B^H*A^N [dense*sparse]| = 1.66941e-15
  |B^C*A^N [dense*sparse]| = 0
  |B^N*A^T [dense*sparse]| = 1.30283e-15
  |B^T*A^T [dense*sparse]| = 1.42823e-15
  |B^H*A^T [dense*sparse]| = 1.47206e-15
  |B^C*A^T [dense*sparse]| = 1.22227e-15
  |B^N*A^H [dense*sparse]| = 1.22042e-15
  |B^T*A^H [dense*sparse]| = 1.31776e-15
  |B^H*A^H [dense*sparse]| = 1.31069e-15
  |B^C*A^H [dense*sparse]| = 1.33438e-15
  |B^N*A^C [dense*sparse]| = 0
  |B^T*A^C [dense*sparse]| = 1.47503e-15
  |B^H*A^C [dense*sparse]| = 1.49687e-15
  |B^C*A^C [dense*sparse]| = 1.48648e-15