OpenMP:有条件地使用#pragma
OpenMP: conditional use of #pragma
我正在使用OpenMP来提高我的程序循环效率。
但是最近我发现在小循环中使用这个库会降低性能,而使用正常的方式会更好。
事实上,我想只在满足条件时才使用openMP,我的代码是
#pragma omp parallel for
for (unsigned i = 0; i < size; ++i)
do_some_stuff ();
但是我想做的是禁用#pragma如果size足够小,即:
if (size > OMP_MIN_VALUE)
#pragma omp parallel for
for (unsigned i = 0; i < size; ++i)
do_some_stuff ();
但是不起作用,更好的方法是编写两次循环,但我不想这样做…
if (size > OMP_MIN_VALUE)
{
#pragma omp parallel for
for (unsigned i = 0; i < size; ++i)
do_some_stuff ();
}
else
{
for (unsigned i = 0; i < size; ++i)
do_some_stuff ();
}
有什么更好的方法?
我认为您应该能够通过在parallel for
指令上使用可选的schedule
子句来实现您正在寻找的效果:
#pragma omp parallel for schedule(static, OMP_MIN_VALUE)
for (unsigned i = 0; i < size; ++i)
do_some_stuff ();
你可能想尝试不同类型的调度和不同的块大小,看看什么最适合你的库例程。
相关文章:
- 如何使用 soong 命名空间来有条件地编译模块
- 有条件地将默认参数传递给函数(使用"?"运算符)
- 根据模板类型有条件地删除变量
- 有条件地选择带有 decltype() 和三元运算符的类型
- 如何使用 SFINAE 在方法调用中有条件地定义变量?
- 有条件的打印和计数在 std::map 上有限制
- 如何在 c++ 中有条件地包含标头?
- 如何仅在Qt是用ltcg构建时才有条件地启用ltcg?
- 如何在Visual Studio 2019中有条件地编译c++源文件
- C++可以有条件地向下转换类指针吗
- 使用 SFINAE 有条件地解析分配器成员
- 有条件地删除宏
- 有条件地包含C++标准库
- 如何有条件地将元素添加到 std::array - C++11
- 是否根据编译器版本有条件地包含源文件
- 有条件地启用类C++构造函数
- 我可以有条件地使用多个参数吗?
- 有条件地使用 Boost Python 添加模块
- 有什么东西阻止std::optional::value_or()有条件地不例外吗?
- OpenMP:有条件地使用#pragma