使用OpenMP并行if else语句

时间:2014-12-02 15:17:09

标签: c openmp

所以我有以下代码并行化,我想知道是否可以分配单独的线程来运行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;
        }
    }
}

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和循环控制变量ij,并避免使用C99中的private()子句。 <{1}}默认是私有的,但我喜欢明确。