1
매트릭스/벡터 제품의 속도를 향상시키기 위해 BLAS를 사용하려고합니다. 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/ –