c - 使用 OpenMP 并行化 if else 语句

标签 c openmp

所以我在下面有以下代码可以并行化,我想知道是否可以使用 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 和循环控制变量 ij 并避免 private() C99 中的子句。 i 默认情况下是私有(private)的,但我喜欢明确。

关于c - 使用 OpenMP 并行化 if else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27252778/

相关文章:

C:fscanf 作为 while 参数的问题

c++ - 与 Windows 和 OS X 集成相比,GTK 和 Qt 如何与 Linux 集成?

multithreading - Cython:使 prange 并行化线程安全

c - OMP 使用 if 语句优化嵌套循环

混淆缓冲区和 EOF 和 getchar

c - 多文件 C 程序

java - 在java中并行化for循环

c++ - OpenMP - 并行代码有意想不到的结果

c++ - OpenMP 和 C++ : this pointer

c++ - 寻找最近的较小素数的快速算法