• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:並列計算について)

並列計算について

このQ&Aのポイント
  • 並列計算の効果を最大化するための方法として、スレッド数の最適化が重要です。
  • 現在の状況では、使用するスレッド数が最適ではないため、プログラムの実行時間が倍増してしまっています。
  • この問題を解決するためには、スレッド数を適切に設定することが必要です。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

各スレッドで個別に使う変数をPRIVATEに指定してありますか? CRITICALとかBARRIER等の制御を使っていませんか? 並列計算は、各スレッドが独立している(他のスレッドと関係が無い)ほど効率がよくなります。 OpenMPでは、PRIVATEに指定していない変数はSHARED扱いになり、各スレッドで共有しようとするので、独立性が落ちます。 CRITICAL等の制御は必要なケースもありますが、他のスレッドを待ったりするために効率が落ちるので、最低限の利用に留める(できれば使わずに済むアルゴリズムにする)必要があります。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

メモリアクセスが多くなるとメモリアクセスが足を引っ張りますのでマルチCPUの効果が薄れると思います。なので各スレッドは出来るだけ狭いメモリ領域を参照することが望ましいです(256KBを超えるランダムアクセスは低速化の要因)。 一番良いのは計算が複雑で変数や配列アクセスが極力少ないコードです。 あとCorei7 970だと実コア数は6で、倍の12に見えるのはハイパースレッディングの機能ですがプログラムの組み方次第ではハイパースレッディングでは効率的には動きません。場合によってはハイパースレッディングを切ってコア6で動かしたほうが早いかも知れません。

すると、全ての回答が全文表示されます。

関連するQ&A