gpt4 book ai didi

julia - Julia 中的并行计算和错误分配的核心数

转载 作者:行者123 更新时间:2023-12-05 08:54:12 33 4
gpt4 key购买 nike

我用Julia中的pmap()函数写了一段并行代码。

然后我在集群上保护了四个核心并运行了一个脚本:

julia -p 12 my_parallel_program.jl

我现在应该取消我的工作吗?现在我告诉 Julia 有 12 个内核,而实际上只有 4 个内核,现在到底发生了什么?它会像我有 julia -p 4 my_parallel_program.jl 一样快吗?

最佳答案

选项 -p 12 启动总共 13 个并行进程(一个主进程加上 12 个从属/工作进程)。根据您的问题设置,这可能是需要的,也可能不需要。

经验法则是启动一些与您机器上的核心数量相匹配的从属进程(这可以通过 nproc bash 命令检查)。

但是,在强烈依赖于某些外部处理的场景中(例如等待网络 IO),创建更多的进程可能完全有意义。另一方面,在计算密集型情况下(例如数值模拟),从属进程的数量应等于可用内核的数量。最后但同样重要的是,请注意,如果您在笔记本电脑上运行计算密集型进程,您很容易导致它过热(理论上它不应该发生,但我设法以这种方式熔化了 3 个笔记本电脑 CPU)。因此,如果是笔记本电脑上的数值模拟 - 使用不超过 75% 的可用内核。

话虽如此,请注意在 Julia 中有许多多处理的替代方案:

  • 带有 @async 的绿色线程——它们非常适合网络密集型场景,例如网络抓取
  • 使用 Threads.@threads 的多线程 - 这需要设置 JULIA_NUM_THREADS 系统变量。此选项允许跨线程共享公共(public)数据。优点是进程之间没有通信问题(与-p相比),缺点是需要利用锁机制来防止线程同时更改同一 block 数据。
  • 多处理(您使用的带有 -p 选项的那个)。在这里,Julia 生成了给定数量的从属进程。如果您需要跨进程通信,您应该使用 ParallelDataTransfer.jl
  • 分布式多处理(使用 --machinefile Julia 启动选项)。这是非常强大的,因为它允许在运行 Julia 的大型机器集群上运行 -p 风格的代码。配置它所需的全部是无密码 SSH 和在集群中的机器之间打开 TCP/IP 网络连接。

最佳选择取决于您的计算场景,但上面已经给出了一些提示。

关于julia - Julia 中的并行计算和错误分配的核心数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50975707/

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