我有两个循环需要并行化。
#pragma omp parallel for
for (i = 0; i < ni; i++)
for (j = 0; j < nj; j++) {
C[i][j] = 0;
for (k = 0; k < nk; ++k)
C[i][j] += A[i][k] * B[k][j];
}
#pragma omp parallel for
for (i = 0; i < ni; i++)
for (j = 0; j < nl; j++) {
E[i][j] = 0;
for (k = 0; k < nj; ++k)
E[i][j] += C[i][k] * D[k][j];
}
奇怪的是,即使使用大量线程,顺序执行的速度也比上面的并行版本要快得多。我做错了什么吗?请注意,所有数组都是全局的。这会产生差异吗?
for
循环局部变量。只需帮助编译器并使用它们即可。 - Jens Gustedt#pragma omp parallel for private(j,k)
- Z boson