我使用pmap()Julia中的函数编写并行代码.
然后我在群集上保护了四个核心并运行了一个脚本:
julia -p 12 my_parallel_program.jl
我现在应该取消工作吗?现在究竟发生了什么,我告诉朱莉娅有12个核心,真的有4个?它会像我一样快跑julia -p 4 my_parallel_program.jl吗?
该选项-p 12启动总共13个并行进程(一个主进程加上12个从属/工作进程).根据您的问题设置,这可能是您想要的.
经验法则是启动一些与您机器上的核心数相匹配的从属进程(可以通过nprocbash命令检查).
但是,在强烈依赖于某些外部处理(例如,等待网络IO)的情况下,创建大量核心可能完全有意义的进程.另一方面,在计算密集型情况(例如数值模拟)中,从属进程的数量应该等于可用核心的数量.最后,但并非最不重要的是,请注意,如果您在笔记本电脑上运行计算密集型过程,很容易导致它过热(理论上它不会发生,但我设法以这种方式熔化3台笔记本电脑CPU).因此,如果是笔记本电脑上的数值模拟 - 使用不超过75%的可用内核.
请注意,在Julia中有多种多处理替代方案:
@async- 这些非常适合网络密集型场景,例如网络抓取Threads.@threads- 这需要设置JULIA_NUM_THREADS系统变量.此选项允许跨线程共享公共数据.优点是在进程之间没有通信问题(与之相比-p),缺点是需要利用锁定机制来防止线程同时更改同一条数据.-p您使用的选项).在这里,Julia产生了给定数量的从属进程.如果您需要跨进程进行通信,则应使用该ParallelDataTransfer.jl包--machinefileJulia启动选项).这非常强大,因为它允许-p在运行Julia的大型机器集群中运行样式代码.配置此功能所需的只是无密码SSH,并在群集中的计算机之间打开TCP/IP网络连接.最佳选择取决于您的计算方案,但上面给出了一些提示.