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