我正在使用 OpenMP 来提高我的程序循环效率。
但最近我发现在小循环上使用这个库会降低性能,而使用普通方式会更好。
事实上,我只想在满足一个条件的情况下使用 openMP,我的代码是
#pragma omp parallel for
for (unsigned i = 0; i < size; ++i)
do_some_stuff ();
但是如果 size 足够小,我想做的是禁用#pragma,即:
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 ();
}
有什么更好的方法来做到这一点?
最佳答案
我认为您应该能够通过使用可选的schedule
clause 来达到您想要的效果。在您的 parallel for
指令上:
#pragma omp parallel for schedule(static, OMP_MIN_VALUE)
for (unsigned i = 0; i < size; ++i)
do_some_stuff ();
您可能想尝试不同类型的调度和不同的 block 大小,以查看最适合您的库例程的方法。
关于c++ - OpenMP:有条件地使用#pragma,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7413331/