所以我有以下代码并行化,我想知道是否可以分配单独的线程来运行if和else语句使用OpenMP从而加快进程。
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;
}
}
}
答案 0 :(得分:3)
你为什么这样做?代码不运行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
,并避免使用C99中的private()
子句。 <{1}}默认是私有的,但我喜欢明确。