所以我在下面有以下代码可以并行化,我想知道是否可以使用 OpenMP 分配单独的线程来运行 if 和 else 语句,从而加快进程。
for(i=1; i<=NI; i++) {
for(j=1; j<=NJ; j++) {
x = rand()/((float)RAND_MAX + 1);
if(x < 0.5) {
old[i][j] = 0;
} else {
old[i][j] = 1;
}
}
}
最佳答案
你为什么要这么做?该代码不会运行两个 if
分支,它会运行第一个分支或 else
分支。使用 omp parallel for
来并行化循环。
#pragma omp parallel for private(i,j,x) shared(old)
for(i=1; i<=NI; i++) {
for(j=1; j<=NJ; j++) {
x = rand()/((float)RAND_MAX + 1);
if(x < 0.5) {
old[i][j] = 0;
} else {
old[i][j] = 1;
}
}
}
您还可以在循环内声明 x
和循环控制变量 i
和 j
并避免 private()
C99 中的子句。 i
默认情况下是私有(private)的,但我喜欢明确。
关于c - 使用 OpenMP 并行化 if else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27252778/