次の方法で共有


3.1.9 omp_set_nested 関数

omp_set_nested 関数は、入れ子になった並列化を有効または無効にします。形式は次のとおりです。

#include <omp.h>
void omp_set_nested(int nested);

nested が 0 に評価される場合、入れ子になった並列化は無効になります。これが既定値です。このとき、入れ子になった並行領域はシリアル化され、現在のスレッドで実行されます。nested が 0 以外の値に評価される場合、入れ子になった並列化は有効になり、入れ子になった並行領域は、追加スレッドを配置して、入れ子になったチームを形成できます。

この関数は、omp_in_parallel 関数が 0 を返すプログラム内から呼び出される場合に、上記の動作が発生します。omp_in_parallel 関数が 0 以外の値を返すプログラムから呼び出される場合のこの関数の動作は未定義です。

この関数の呼び出しは OMP_NESTED 環境変数より優先されます。

入れ子になった並列化が有効な場合、入れ子になった並行領域を実行するスレッド数は実装で定義されています。結果として、OpenMP 準拠の実装では、入れ子になった並列化が有効な場合でも、入れ子になった並行領域をシリアル化できるようになっています。

クロス リファレンス

  • OMP_NESTED 環境変数については、49 ページのセクション 4.4 を参照してください。

  • omp_in_parallel 関数については、38 ページのセクション 3.1.6 を参照してください。