SLURM上的多线程

Dol*_*ids 5 linux parallel-processing perl fork slurm

我有一个使用该Parallel::ForkManager模块分叉的Perl脚本.

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

我实验室的某个人说,如果我在多个节点上运行一个工作,那么其他节点就不会被使用,而且我在浪费时间和金钱.这准确吗?

如果我使用的是一个脚本,我只能使用SLURM限制一个节点?

Mar*_*ark 8

据我所知Parallel::ForkManager,没有使用MPI,所以如果你使用mpirun我不知道它是如何跨节点进行通信的.一个简单的测试是让每个子输出主机名.

启动非MPI软件时经常发生的一件事mpirun是,您在所有节点上复制了所有工作,因此他们都在做同样的事情,而不是共享工作.如果你使用Parallel::MPI它应该工作得很好.

  • 有两个测试:1.我的作业是否在所有四个节点上运行?只需让每个进程输出其主机名即可.这可以像print`hostname`一样简单; (抱歉,我不知道如何逃避反叛)2.我的工作是否重复了所有四个节点上的所有工作?查看调试输出.假设您正在为每个时间步输出系统的能量.如果您的进程不在所有四个节点上共享工作,您将看到每个时间步的四个缩进输出. (2认同)