簡體   English   中英

OpenMP:有條件地使用#pragma

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM