Intel の C コンパイラを使って、Multi processor のシステム(Itanium2)で数値計算してます。お馬鹿な私でも簡単に並列処理ができるように、インテルコンパイラでは -parallel オプションで自動的に並列化してくれます。
でも、これでは並列化は充分ではありません。一番肝心なところが、コンパイラには複雑に見えるためか並列化されないのです。というわけで、OpenMPディレクティブを書くことによって直接並列化する部分を指定することにしました。
その結果、期待していた場所はちゃんと並列化され、計算速度も劇的に向上しました。ですが、ディレクティブを書いていない場所の計算速度が劇的に遅くなっているのです!
OpenMPを有効化するために、-openmp オプションを付けてコンパイルしているわけですが、このオプションを付けると自動並列化だけのときより劇的に計算が遅くなる部分があるのです。
解かせる問題によっては、-parallelだけの方が高速になってしまう場合までありそうで、せっかくディレクティブまで書いたのに、ほとんど意味がないよぉという感じになってしまう。
求む、解決策!
でも、これでは並列化は充分ではありません。一番肝心なところが、コンパイラには複雑に見えるためか並列化されないのです。というわけで、OpenMPディレクティブを書くことによって直接並列化する部分を指定することにしました。
その結果、期待していた場所はちゃんと並列化され、計算速度も劇的に向上しました。ですが、ディレクティブを書いていない場所の計算速度が劇的に遅くなっているのです!
OpenMPを有効化するために、-openmp オプションを付けてコンパイルしているわけですが、このオプションを付けると自動並列化だけのときより劇的に計算が遅くなる部分があるのです。
解かせる問題によっては、-parallelだけの方が高速になってしまう場合までありそうで、せっかくディレクティブまで書いたのに、ほとんど意味がないよぉという感じになってしまう。
求む、解決策!
※コメント投稿者のブログIDはブログ作成者のみに通知されます