Oracle® Solaris Studio 12.4: OpenMP API ユーザーズガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

3.4 入れ子並列処理を使う際のヒント

  • 並列領域を入れ子にすると、計算で使用できるスレッドの数を簡単に増やすことができます。

    たとえば、2 段階の並列処理があり、OMP_NUM_THREADS に 2 が設定されているプログラムがあるとします。また、システムに 4 個のハードウェアスレッドがあり、4 個のハードウェアスレッドをすべて使用してプログラムの実行を高速化するとします。1 つのレベルを並列化するだけの場合は、2 つのハードウェアスレッドのみが使用されます。4 個のハードウェアスレッドをすべて使用するには、入れ子並列処理を有効にします。

  • 入れ子並列領域では、必要以上のスレッドが作成されやすく、システムへの要求が過剰になることがあります。OMP_THREAD_LIMIT および OMP_MAX_ACTIVE_LEVELS を適切に設定して、使用されるスレッド数を制限し、過剰要求を回避します。

  • 入れ子並列領域は負荷がかかります。外側の入れ子でも十分な並列処理が実行されていて、負荷が平均に分散されていれば、現在の処理より内側に入れ子並列領域を作成するよりは、外側の入れ子で全スレッドを使用する方が効率的です。

    たとえば、2 段階の並列処理があり、負荷が分散されているプログラムがあるとします。システムに 4 個のハードウェアスレッドがあり、4 個のハードウェアスレッドをすべて使用してこのプログラムの実行を高速化するとします。入れ子並列領域では追加のバリアが設定されるため、通常は、外側の並列処理で 4 つのスレッドのうち 2 つだけを使い、かつ、そのヘルパースレッドとして内側の並列処理で 2 つのスレッドを使うよりは、外側の並列領域で 4 つのスレッドすべてを使用した方が優れたパフォーマンスを得ることができます。