gpt4 book ai didi

我可以有条件地定义 openMP 并行区域吗?

转载 作者:行者123 更新时间:2023-12-05 01:51:51 25 4
gpt4 key购买 nike

我可以写一些像这样的代码:

if (make_parallel)
{
#pragma omp parallel for
for (int i=0; i<n; i++)
{
//For loop stuff
}
}
else
{
//Identical for loop, minus the parallelisation
for (int i=0; i<n; i++)
{
//For loop stuff
}
}

是否有更简洁的方法来避免重复 for 循环?

[编辑] - 所以这个解决方案适用于预处理级别

#define USE_OPENMP

//...

#ifdef USE_OPENMP
#pragma omp parallel for
#endif
for(int i=0;i<n;i++)

但这并不理想。但是我越想越觉得,既然定义并行区域也是预处理,它可能不能以一种整洁的方式成为条件?

最佳答案

您可以像这样简单地使用 if 子句:

int enabled = 1;

#pragma omp parallel if(enabled)
#pragma omp for nowait
for(int i=0;i<n;i++)

请注意,此条件可能由运行时评估 而不是编译器(例如 GCC 会这样做)。因此,对于非常小的循环或每次迭代都非常便宜的循环,开销 可能明显高于您的 if-else 解决方案。原因是编译器通常不会将常量传播到 OpenMP 回调计​​算函数,因此代码可能会进行不必要的操作。这个解决方案的好处是更干净,帮助编译器生成更小的二进制文件,还有助于减少编译时间(因为循环编译一次)。

关于我可以有条件地定义 openMP 并行区域吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71947547/

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