我有一个使用该Parallel::ForkManager
模块分叉的 Perl 脚本。
据我所知,如果我 fork 32 个子进程并要求 SLURM 调度程序在 4 个节点上运行作业,每个节点 8 个处理器,代码将在每个内核上执行每个子进程。
我实验室里有人说,如果我在多个节点上运行一个作业,而其他节点都没有使用,那我就是在浪费时间和金钱。这是准确的吗?
如果我使用分叉的脚本,我是否仅限于使用 SLURM 的一个节点?
我有一个使用该Parallel::ForkManager
模块分叉的 Perl 脚本。
据我所知,如果我 fork 32 个子进程并要求 SLURM 调度程序在 4 个节点上运行作业,每个节点 8 个处理器,代码将在每个内核上执行每个子进程。
我实验室里有人说,如果我在多个节点上运行一个作业,而其他节点都没有使用,那我就是在浪费时间和金钱。这是准确的吗?
如果我使用分叉的脚本,我是否仅限于使用 SLURM 的一个节点?
据我所知Parallel::ForkManager
,没有使用 MPI,所以如果你正在使用,mpirun
我看不出它如何跨节点通信。一个简单的测试是让每个子输出主机名。
与启动的非 MPI 软件一起经常发生的一件事mpirun
是,您在所有节点上重复所有工作,因此它们都在做完全相同的事情,而不是共享工作。如果您使用Parallel::MPI
它应该可以正常工作。