我正在使用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 ();
}
有什么更好的方法呢?
答案 0 :(得分:7)
我认为您应该能够通过parallel for
指令上的可选schedule
clause来实现您所寻求的效果:
#pragma omp parallel for schedule(static, OMP_MIN_VALUE)
for (unsigned i = 0; i < size; ++i)
do_some_stuff ();
您可能希望使用不同类型的计划和不同的块大小来查看最适合您的库例程的内容。