[英]OpenMP: conditional use of #pragma
我正在使用OpenMP來提高循環上的程序效率。
但最近我發現在小循環上使用這個庫降低了性能,並且使用正常方式更好。
事實上,我只想在滿足條件的情況下使用openMP,我的代碼是
#pragma omp parallel for
for (unsigned i = 0; i < size; ++i)
do_some_stuff ();
但我想要做的是在大小足夠小的情況下禁用#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 ();
}
有什么更好的方法呢?
我認為您應該能夠通過在parallel for
指令上使用可選的schedule
子句來實現您正在尋找的效果:
#pragma omp parallel for schedule(static, OMP_MIN_VALUE)
for (unsigned i = 0; i < size; ++i)
do_some_stuff ();
您可能希望使用不同類型的調度和不同的塊大小來查看最適合您的庫例程的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.