1
私はBLASをC言語のプログラムで使用して、行列/ベクトル積の速度を向上させようとしています。blas dgemvが手動実装より遅い
は手動で私はこのコードを持っていた:
for (j = 0; j < ann->hidden; ++j) {
double delta = 0;
//h is known before
for (k = 0; k < (h == ann->hidden_layers-1 ? ann->outputs : ann->hidden); ++k) {
const double forward_delta = dd[k];
const int windex = k * (ann->hidden + 1) + (j + 1);
const double forward_weight = ww[windex];
delta += forward_delta * forward_weight;
}
*d = *o * (1.0-*o) * delta;
++d; ++o;
}
}
だから私は、BLAS関数cblas_dgemvによって、この二重を交換しようとしましたが、それはそれのように見える:
int n = h == ann->hidden_layers-1 ? ann->outputs : ann->hidden ;
int m = ann->hidden ;
double *delta = calloc(m,sizeof(double));
cblas_dgemv(CblasColMajor,CblasNoTrans,m,n,1,&ww[1],m,dd,1,0.0,delta,1);
for(j=0 ; j < ann->hidden; ++j) {
*d = *o * (1.0-*o)*delta[j];
++d; ++o;
}
free(delta);
}
出力値をいいます。
問題は、私は、この計算のために最も最適化された機能を使用するか、やっていないので、それはだ場合、私は知らない
... BLASと私の実装では、「手動」よりも道も遅いということです私は何か間違っている?
作業用コードに関する質問は、おそらくコードレビューに適しています。 –
コードレビューとは? –
https://codereview.stackexchange.com/ –