【发布时间】:2013-05-18 17:38:24
【问题描述】:
我的 openMP 代码有什么问题?它总是只需要 1 个线程,并且与非并行版本的工作时间相同
template <typename T>
Matrix<T>* Matrix<T>::OMPMultiplication(Matrix<T>* A, Matrix<T>* B){
if(A->ySize != B->xSize)
throw;
Matrix<T>* C = new Matrix<T>(A->xSize, B->ySize);
sizeType i, j, k;
T element;
#pragma omp parallel for private(i, j)
{
#pragma omp for private(i, j)
for( i = 0; i < A->xSize; i++ )
cout<<"There are "<<omp_get_num_threads()<<" threads"<<endl;
for(j = 0; j < B->ySize; j++){
C->matrix[i][j] = 0;
for(k = 0; k < A->ySize; k++){
C->matrix[i][j] += A->matrix[i][k] * B->matrix[k][j];
}
}
}
return C;
}
【问题讨论】:
-
第一个 pragma 包含“for”,但不是
forpragma(这是第二个)。 -
@VictorSand
#pragma omp parallel与#pragma omp for的组合不是嵌套并行。