OpenMP を使用してさまざまな種類の並列化を試みています。その結果、コードにいくつかの行があり#pragma omp parallel for、それらを交互に (アン) コメントしています。これらの行を次のようなコードで条件付きにする方法はありますか?
define OMPflag 1
#if OMPFlag pragma omp parallel for
for ...
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) {
...
}
OpenMP 並列構造には、if句を指定できます。Fortran では、次のように記述します。
!$omp parallel if(n>25) ...
問題が小さすぎて並列化に手間がかからない場合に、これを使用することがあります。同じアプローチを使用して、実行時にデバッグ フラグをチェックできると思います。C++ の構文を理解するのはあなたに任せますが、おそらくまったく同じです。