ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3: OpenMP API ユーザーガイド Oracle Solaris Studio 12.3 Information Library (日本語) |
並列領域を入れ子にすると、計算で使用できるスレッドの数を簡単に増やすことができます。
たとえば、並列性に 2 つのレベルがあり、各レベルでの並列性の度合いが 2 であるプログラムがあるとしましょう。また、システムには CPU が 4 個搭載され、このプログラムの実行速度を上げるために、これら 4 つの CPU をすべて使用するものとします。どの段階であったとしても単に並列処理にしただけでは、使用する CPU は 2 つに留まります。入れ子によって両方の段階で処理が並列化されます。
並列領域を入れ子にするだけでは、スレッドばかりが増えてシステムへの要求が過剰になります。OMP_THREAD_LIMIT および OMP_MAX_ACTIVE_LEVELS を適切に設定して、使用されるスレッド数を制限し、過剰要求を回避します。
入れ子になった並列領域を作成すると負荷がかかります。外側の入れ子でも十分な並列処理が実行されていて、負荷が平均に分散されていれば、現在の処理より内側に入れ子の並列領域を作成するよりは、外側の入れ子で全スレッドを使用する方が効率的です。
たとえば、2 段階の並列処理となるプログラムがあったとします。外側の処理は 4 つの並列処理となっていて、負荷は平均に分散されています。システムには 4 つの CPU があり、すべての CPU を使用してプログラムの実行を高速化したいとします。通常は、外側の並列処理で 4 つのスレッドのうち 2 つだけを使い、かつ、そのスレーブスレッドとして内側の並列処理で 2 つのスレッドを使うよりは、外側の並列処理で 4 つのスレッドすべてを使用した方が優れたパフォーマンスを得ることができます。