1
我有这个问题,我写了一个OpenMP程序,它必须计算m
矩阵的乘积。我想给每个线程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];
}
}
}
结果是确定的,但在性能上顺序算法比较好...
我也能发的Pthread解决方案,它工作得很好,所以我想我当我并行化解决方案时出现了一些错误...
颠倒k和c循环的顺序 – user3528438
嗨@ user3528438你是什么意思? –
重新安排'for(c = 0; c
user3528438