次の方法で共有


A.11 固定数のスレッドの指定

プログラムによっては、事前指定された固定数のスレッドによって実行されることが必要なものがあります。スレッド数の動的な調整の既定の設定は実装で定義されるので、移植性を確保するため、このようなプログラムでは動的なスレッド機能をオフにして、スレッド数を明示的に設定するように選択できます。omp_set_dynamic (39 ページの「3.1.7 omp_set_dynamic 関数」) と omp_set_num_threads (36 ページの「3.1.1 omp_set_num_threads 関数」) を使用してこの処理を行う方法を次の例に示します。

omp_set_dynamic(0);
omp_set_num_threads(16);
#pragma omp parallel shared(x, npoints) private(iam, ipoints)
{
    if (omp_get_num_threads() != 16) 
      abort();
    iam = omp_get_thread_num();
    ipoints = npoints/16;
    do_by_16(x, iam, ipoints);
}

この例では、プログラムは 16 のスレッドによって実行される場合にのみ正しく実行されます。実装で 16 スレッドをサポートできない場合については、この例の動作は実装で定義されます。

並列領域を実行するスレッド数は、動的スレッド設定には関係なく、並列領域中は維持されます。動的スレッド機構は、並列領域の開始時に使用するスレッド数を決定し、これを領域の存続期間中維持します。