Oracle® Solaris Studio 12.4: C ユーザーガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

3.5 処理速度の向上

コンパイラがプログラムの大量の時間が消費される部分を並列化しない場合、速度の向上は発生しません。たとえば、プログラム実行の 5% 部分に相当するループしか並列化できない場合、全体的に速度を向上できる限界は 5% です。ただし、改善は、負荷のサイズと並列実行オーバーヘッドに依存します。

したがって、一般的な規則として、プログラムの並列化される部分が大きくなればなるほど、大幅な速度の向上を期待できます。

それぞれの並列ループは、起動時と終了時に小さなオーバーヘッドを招きます。起動時のオーバーヘッドには作業を分散するためのものがあり、終了時には、バリアでの同期によるものがあります。ループによって実行される作業量が比較的小さい場合には、速度の向上を期待できません。実際には、ループが遅くなる可能性さえあります。プログラム実行の大部分が大量の小さな並列ループで占められている場合には、プログラム全体の速度が上がる代わりに遅くなることがあります。

コンパイラは、いくつかのループ変換を実行することで、ループの規模を大きくしようとします。この変換には、ループの交換およびループの融合が含まれます。プログラム内の並列化が少ない場合や小さな並列領域に分割されている場合、速度の向上は通常は少なくなります。

問題サイズを大きくすると、多くの場合、プログラム内の並列化の分割が改善されます。たとえば、あるプログラムが順次実行する部分がプログラムサイズの 2 乗に増加し、並列化可能な部分が 3 乗に増加するものとします。この問題の場合、並列化部分の作業負荷は順次部分より速い速度で増加します。リソースの限界に達しないかぎり、ある時点で問題の速度が向上します。

並列 C の利点を最大限に引き出すには、指令、問題のサイズ、およびプログラムの再構成に関して何らかのチューニングや実験を試みてください。