6

OpenMP を使用してさまざまな種類の並列化を試みています。その結果、コードにいくつかの行があり#pragma omp parallel for、それらを交互に (アン) コメントしています。これらの行を次のようなコードで条件付きにする方法はありますか?

   define OMPflag 1 
   #if OMPFlag pragma omp parallel for
   for ...
4

2 に答える 2

7

C99には、マクロ内_Pragmaに配置できるキーワードがあります。#pragma何かのようなもの

#define OMP_PARA_INTERNAL _Pragma("omp parallel for")
#if [your favorite condition]
#define OMP_FOR OMP_PARA_INTERNAL for
#else
#define OMP_FOR for
#endif

そしてあなたのコードで

OMP_FOR (unsigned i; i < n; ++i) {
  ...
}
于 2010-11-03T12:51:03.720 に答える
5

OpenMP 並列構造には、if句を指定できます。Fortran では、次のように記述します。

!$omp parallel if(n>25) ... 

問題が小さすぎて並列化に手間がかからない場合に、これを使用することがあります。同じアプローチを使用して、実行時にデバッグ フラグをチェックできると思います。C++ の構文を理解するのはあなたに任せますが、おそらくまったく同じです。

于 2010-11-03T10:40:13.150 に答える