金属板の表面の温度点を表す 2D マトリックスが与えられました。マトリックス (プレート) のエッジは 20 ℃ で一定に保たれ、事前に定義された 1 点には 100 ℃ の一定の熱源があります。他のすべてのグリッド ポイントは、最初は 50 ℃ に設定されています。
私の目標は、すべての内部グリッド ポイントを取得し、収束 (の変化反復間で 0.02 ℃ 未満)。
私の知る限り、グリッド ポイントを反復処理する順序は関係ありません。
私には、これは FortranFORALL
構造を呼び出して並列化の楽しさを探求する絶好の機会のように思えます。
コードが実際に並列化されていることを確認するにはどうすればよいですか?
たとえば、シングル コアの PowerBook G4 でこれをコンパイルできますが、並列化による速度の向上は期待できません。しかし、デュアル コア AMD Opteron でコンパイルすると、FORALL コンストラクトを悪用できると思います。
あるいは、プログラムの効果的な並列化を測定する方法はありますか?
アップデート
MSB の質問に答えて、これは gfortran バージョン 4.4.0 を使用しています。gfortran は自動マルチスレッドをサポートしていますか?
FORALL コンストラクトが時代遅れになったことは注目に値します。おそらく、当時の自動ベクトル化です。
おそらくこれは別の質問に最適ですが、自動ベクトル化はどのように機能しますか? コンパイラは、純粋な関数またはサブルーチンのみがループで使用されていることを検出できますか?