gpt4 book ai didi

.net - F# 作为 HPC 语言

转载 作者:行者123 更新时间:2023-12-03 21:28:05 24 4
gpt4 key购买 nike

我使用 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)

    最佳答案

    1 . Is F# an appropriate tool for HPC computations on such servers?



    作为一种语言,它 (F#) 可以鼓励并行运行良好的代码——至少其中一部分是减少状态可变性和高阶函数——这是可以的,而不是意志。然而,对于 HPC,有许多特殊的编程语言/编译器和/或负载分配方式(例如共享统一内存或分布式微内核)。 F# 只是一种通用编程语言:它可能有权访问也可能无法访问(例如,绑定(bind)可能存在也可能不存在)各种技术。 (这甚至适用于非分布式并行计算。)

    2 . Is it realistic to use up to 100% of CPU for a real world problem?



    这取决于限制因素是什么。和我做 5k+ 100k+ 核心 HPC 研发的 friend 交谈,数据交换和空闲时间通常是限制因素(当然,这是一个更高的 n :-) 甚至在 IO 减少方面的小改进(效率或不同的算法)可以带来显着的 yield 。不要忘记在同一台机器上的 CPU/缓存之间简单地移动数据的成本!当然,还有越来越慢的磁盘 IO……

    3 . What should I do to obtain a high speed up? Everything is in one big parallel for loop so I would expect that it is all what I should do...



    找出慢的部分在哪里并修复它(它们):-)运行配置文件分析。请记住,它可能需要使用完全不同的算法或方法。

    4 . If F# is NOT an appropriate language, what language is?



    虽然我不反对,但我的博士 friend 使用/在 Charm++ 上工作:它是一种非常专注于分布式并行计算的语言(不是所讨论的环境,但我试图说明一点 :-) -- F# 试图成为一种体面的通用语言。

    关于.net - F# 作为 HPC 语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4096861/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com