コードで多数の行列とベクトルの乗算を行っています。私の単純な実装は、MKL10 の cblas_dgemm より優れていることがわかりました。これが当てはまる理由は、dgemmが alpha*A *B + beta *C を実行するのに対し、私は A*B しか実行していないためだと思います。しかし、単純な実装は大幅に優れています (〜 3 倍のスピードアップ)。なぜこれが当てはまるのでしょうか?
以下は、matrix-vector-mult の実装です。
void mat_vec_mul(double *a, double *b, double *c, int m, int k)
{
for (int ii = 0; ii < m; ii++){
for (int kk = 0; kk < k; kk++){
*c += *(a+ii*k+kk) * *(b+ii);
}
c++;
}
}