Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用OpenMP并行化if-else语句_C_Openmp - Fatal编程技术网

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

C 使用OpenMP并行化if-else语句,c,openmp,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;

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

for(i=1;i为什么要这样做?代码不会同时运行
如果
分支,它会运行第一个分支或
其他分支
一个分支。使用
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;
        }
    }
}
#专用(i,j,x)共享(旧)的pragma omp并行

对于(i=1;i为什么要这样做?代码不会同时运行
,如果
分支,它会运行第一个分支或
其他分支。使用
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;
        }
    }
}
#专用(i,j,x)共享(旧)的pragma omp并行

对于(i=1;i为什么要这样做?代码不会同时运行
,如果
分支,它会运行第一个分支或
其他分支。使用
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;
        }
    }
}
#专用(i,j,x)共享(旧)的pragma omp并行

对于(i=1;i为什么要这样做?代码不会同时运行
,如果
分支,它会运行第一个分支或
其他分支。使用
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;
        }
    }
}
#专用(i,j,x)共享(旧)的pragma omp并行

对于(i=1;i删除if-else子句并使用
old[i][j]=1-x=0.5
;删除if-else子句并使用
old[i][j]=1-x=0.5
;删除if-else子句并使用
old[i][j]=1-x=0.5
;删除if-else子句并使用
old[i][j]=1-x=0.5
;。也可以使用
old[i][j]=1在没有条件分支的情况下执行此操作-x@Zboson只是风格问题。没有理由我会在我的答案中纠正OP的编程风格。生成的程序集是相同的。程序集是相同的?这很有趣(+1)。我没有弄错编译器。@Zboson我使用godbolt.org进行简化测试,您的结果可能会有所不同。也可以使用
old[I][j]在没有条件分支的情况下执行此操作=1-x@Zboson只是风格问题。没有理由我会在我的答案中纠正OP的编程风格。生成的程序集是相同的。程序集是相同的?这很有趣(+1)。我没有弄错编译器。@Zboson我使用godbolt.org进行简化测试,您的结果可能会有所不同。也可以使用
old[I][j]在没有条件分支的情况下执行此操作=1-x@Zboson只是风格问题。没有理由我会在我的答案中纠正OP的编程风格。生成的程序集是相同的。程序集是相同的?这很有趣(+1)。我没有弄错编译器。@Zboson我使用godbolt.org进行简化测试,您的结果可能会有所不同。也可以使用
old[I][j]在没有条件分支的情况下执行此操作=1-x@Zboson只是风格问题。我没有理由在回答中纠正OP的编程风格。生成的程序集是相同的。程序集是相同的?这很有趣(+1)。我没有弄错编译器。@Zboson我使用godbolt.org进行简化测试,结果可能会有所不同。