我有一个二维矩阵,需要通过OpenMP
来提高其性能#pragma omp parallel private(i, j, k) num_threads(4)
{
for(i=0; i<N; i++) {
#pragma omp for schedule(dynamic, 2) // this line cannot be put before the first loop (i) cause of algorithm
for(j=i+1; j<N; j++) {
for(k=i+1; k<N; k++) {
A[j][k] -= A[i][k]*A[j][i];
}
}
}
}
我想知道我能否提高缓存一致性或使用任务加速?
谢谢!
注意:上面的代码是LU分解算法的一部分。我想简化我的问题。以下代码是我使用的真实代码:
#pragma omp parallel private(i, j, k) num_threads(4)
{
for(i=0; i<N; i++) {
#pragma omp for schedule(dynamic, 2) nowait
for(j=i+1; j<N; j++) {
A[j][i] = A[j][i]/A[i][i];
}
#pragma omp barrier
#pragma omp for schedule(dynamic, 2) nowait
for(j=i+1; j<N; j++) {
for(k=i+1; k<N; k++) {
A[j][k] -= A[i][k]*A[j][i];
}
}
#pragma omp barrier
}
}