SLURM 上的多线程

Multithreading on SLURM

我有一个使用 Parallel::ForkManager 模块的 Perl 脚本。

据我所知,如果我分叉 32 个子进程并要求 SLURM 调度程序 运行 4 个节点上的作业,每个节点 8 个处理器,代码将在每个核心上执行每个子进程。

我实验室的某个人说,如果我 运行 在多个节点上进行作业,而其他节点未被使用,那我就是在浪费时间和金钱。这是准确的吗?

如果我使用分叉的脚本,我是否只能使用 SLURM 的一个节点?

据我所知,Parallel::ForkManager 不使用 MPI,因此如果您使用 mpirun,我看不出它如何跨节点通信。一个简单的测试是让每个 child 输出主机名。

mpirun 一起发布的 non-MPI 软件经常发生的一件事是,您在所有节点上重复您的所有工作,因此他们都在做完全相同的事情,而不是共享工作.如果你使用 Parallel::MPI 它应该可以正常工作。