F# を使用して格子ボルツマン (流体力学) コードを開発しています。現在、24 コア、128 GB メモリのサーバーでコードをテストしています。このコードは基本的に、時間発展のための 1 つの主要な再帰関数と、3D 次元空間反復のための System.Threading.Tasks.Parallel.For ループ内で構成されます。3D スペースは 500x500x500 の大きさで、1 つのタイム サイクルが永遠に続きます :)。
let rec timeIterate time =
// Time consuming for loop
System.Threading.Tasks.Parallel.For(...)
サーバーは 24 個のコアすべてを使用する、つまり 100% 使用すると予想します。私が観察したのは、1% から 30% の使用率です。
そして私の質問は次のとおりです。
- F# は、そのようなサーバーでの HPC 計算に適したツールですか?
- 実際の問題に CPU を 100% まで使用することは現実的ですか?
- ハイスピードアップするにはどうすればいいですか?すべてが 1 つの大きな並列 for ループにあるので、それがすべて私がすべきことだと思います...
- F# が適切な言語でない場合、どの言語ですか?
ご提案ありがとうございます。
編集: 誰かが興味を持っている場合は、喜んでコードを共有します。
EDIT2 :コードの削除されたバージョンは次のとおりです: http://dl.dropbox.com/u/4571/LBM.zip
起動ファイルは ShearFlow.fs で、ファイルの一番下には
let rec mainLoop (fA: FArrayO) (mR: MacroResult) time =
let a = LBM.Lbm.lbm lt pA getViscosity force g (fA, mR)