gpt4 book ai didi

c - OpenMP 多个 for 循环

转载 作者:太空宇宙 更新时间:2023-11-04 02:59:36 26 4
gpt4 key购买 nike

我的代码看起来像这样:

for(i=0; i<max;i++){
for(j=0; j<max2;j++)
//stuff
}

for(i=0; i<max;i++){
for(j=0; j<max2;j++)
//other stuff
}

for(i=0; i<max;i++){
for(j=0; j<max2;j++)
//final stuff
}

我想使用 OpenMP 将其并行化。最好的方法是什么?我尝试在开头执行 #pragma omp parallel private(i) 并在每个 j 循环之前执行 #pragma omp for。这就是我的意思:

 #pragma omp parallel private(i)
{
for(i=0; i<max;i++){
#pragma omp for
for (j=0; j<max2;j++){
//and so on and so forth

问题是,这对我的性能没有任何提升。我怀疑这是因为 3 个 for 循环不是并行运行的……如果我能让这 3 个循环同时运行,我想我可以获得性能提升。有任何想法吗?谢谢!

最佳答案

一个快速的解决方法是制作一个迭代部分并平行于此:

#pragma omp for
for (k=0;k<3;k++){
if (k==0) do_stuff();
if (k==1) do_other_stuff();
if (k==2) do_other_other_stuff();
}

更好的解决方法是使用 omp sections 指令。 (解决方案取自 here )

#pragma omp parallel sections
{
#pragma omp section
{
/* Executes in thread 1 */
do_stuff();
}
#pragma omp section
{
/* Executes in thread 2 */
do_other_stuff();
}
#pragma omp section
{
/* Executes in thread 3 */
do_other_other_stuff();
}
}

关于c - OpenMP 多个 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13580637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com