我使用 F# 开发了 Lattice Boltzmann(流体动力学)代码。我现在正在 24 核、128 GB 内存服务器上测试代码。该代码基本上由一个用于时间演化的主要递归函数和一个用于 3D 维空间迭代的 System.Threading.Tasks.Parallel.For 循环组成。3D 空间是 500x500x500 大,一个时间周期需要永远:)。
let rec timeIterate time =
// Time consuming for loop
System.Threading.Tasks.Parallel.For(...)
我希望服务器使用所有 24 个内核,即有 100% 的使用率。我观察到的使用率在 1% - 30% 之间。
我的问题是:
- F# 是否适合在此类服务器上进行 HPC 计算?
- 将 100% 的 CPU 用于实际问题是否现实?
- 我应该怎么做才能获得高速?一切都在一个大的并行循环中,所以我希望这就是我应该做的一切......
- 如果 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)