1
私はこの問題を抱えており、m
マトリックスの製品を計算するOpenMPプログラムを書いています。私は処理する各スレッドN
行に与えたい。OpenMPのパフォーマンスが悪い
これは私のコードです:
double val;
omp_set_num_threads(4);
for(i=0;i<m;i++){
#pragma omp parallel for private(f,c,k)
for(f=0;f<N;f++){ //cada thread trabaja con sus 2 filas asignadas
//printf("Thread %d, fila %d matriz %d \n",omp_get_thread_num(),f,i);
for(c=0;c<N;c++){ //cada fila trabaja con todas las columnas de la matriz principal
val=0;
for(k=0;k<N;k++){
/*if(k==0){
AUX[f*N+c]=RES[f*N+k]*A[i][k*N+c];
}*/
//else{
AUX[f*N+c]=val+RES[f*N+k]*A[i][k*N+c];
val=AUX[f*N+c];
//}
}
}
for(c=0;c<N;c++){
RES[f*N+c]=AUX[f*N+c];
}
}
}
結果はOKですが、パフォーマンスにシーケンシャルアルゴリズムが優れている...
私ものPthread液を作り、それは私が私だと思うので、正常に動作します私が解決策を並列化したときに何らかの間違いがありました...
kとcループの順序を逆にする – user3528438
こんにちは@ user3528438どういう意味ですか? –
'for(c = 0; c
user3528438