次の方法で共有


omp_set_nested

入れ子になった並列化を有効にします。

void omp_set_nested(
   int val
);

解説

指定項目

  • val
    0 以外の値の場合、入れ子になった並列化を有効にします。 0 の場合、入れ子になった並列化を無効にします。

解説

OMP の入れ子になった並列化は、omp_set_nested、または OMP_NESTED 環境変数を設定することによって有効にできます。

omp_set_nested の設定は、OMP_NESTED 環境変数の設定をオーバーライドします。

入れ子になった並列化が有効な場合にこの環境変数が存在することにより、そうでなければ操作可能であったプログラムを壊す可能性があります。これは、並列領域が入れ子になる際、スレッド数が指数演算的に増えることが原因です。 たとえば、OMP スレッドの数を 4 に設定して 6 回再起する関数は、4,096 (4 の 6 乗) スレッドを必要とします。一般に、スレッドの数がプロセッサの数を超える場合、アプリケーションのパフォーマンスは低下します。 ただし、I/O バインド アプリケーションなどは例外です。

omp_set_nested の現在の設定を表示するには、omp_get_nested を使用します。

詳細については、「3.1.9 omp_set_nested 関数」を参照してください。

使用例

// omp_set_nested.cpp
// compile with: /openmp
#include <stdio.h>
#include <omp.h>

int main( ) 
{
    omp_set_nested(1);
    omp_set_num_threads(4);
    printf_s("%d\n", omp_get_nested( ));
    #pragma omp parallel
        #pragma omp master
        {
            printf_s("%d\n", omp_get_nested( ));
        }
}
  

参照

概念

OpenMP の関数