出于好奇,我决定将我自己的矩阵乘法功能与 BLAS 的实现进行比较... ... 我对结果表示最不惊讶的是:
定制实施,10个试验 1000x1000矩阵乘法:
Took: 15.76542 seconds.
推行《基本法》、10项试验计划 1000x1000矩阵乘法:
Took: 1.32432 seconds.
这是使用单精度浮点数。
我的实施方法:
template<class ValT>
void mmult(const ValT* A, int ADim1, int ADim2, const ValT* B, int BDim1, int BDim2, ValT* C)
{
if ( ADim2!=BDim1 )
throw std::runtime_error("Error sizes off");
memset((void*)C,0,sizeof(ValT)*ADim1*BDim2);
int cc2,cc1,cr1;
for ( cc2=0 ; cc2<BDim2 ; ++cc2 )
for ( cc1=0 ; cc1<ADim2 ; ++cc1 )
for ( cr1=0 ; cr1<ADim1 ; ++cr1 )
C[cc2*ADim2+cr1] += A[cc1*ADim1+cr1]*B[cc2*BDim1+cc1];
}
我有两个问题: