如果我需要"并行"运行许多串行程序(因为问题很简单但很耗时 - 我需要为同一个程序读取许多不同的数据集),如果我只使用一个节点,解决方案很简单.我所做的就是在每个命令之后继续使用&符号提交串行作业,例如在作业脚本中:
./program1 &
./program2 &
./program3 &
./program4
Run Code Online (Sandbox Code Playgroud)
这将自然地在不同的处理器上运行每个串行程序.这在登录服务器或独立工作站上运行良好,当然也适用于只需要一个节点的批处理作业.
但是,如果我需要运行同一程序的110个不同实例来读取110个不同的数据集呢?如果我使用提交110 ./program#命令的脚本提交到多个节点(比如14),批处理系统是否会在不同节点上的不同处理器上运行每个作业,或者它是否会尝试在同一个节点上运行它们, 8个核心节点?
我曾尝试使用简单的MPI代码来读取不同的数据,但会产生各种错误,110个流程中有大约100个成功,其他流程崩溃.我也考虑了作业数组,但我不确定我的系统是否支持它.
我已经在各个数据集上广泛测试了串行程序 - 没有运行时错误,并且我没有超过每个节点上的可用内存.
我编写的代码只需1-4 cpus.但是当我在集群上提交作业时,我必须至少有一个节点,每个作业有16个核心.所以我想在每个节点上运行几个模拟我提交的每个作业.我想知道是否有办法在一个工作中并行提交模拟.
这是一个例子:我的代码需要4个cpus.我为一个节点提交作业,我希望节点运行我的代码的4个实例(每个实例都有不同的参数)来占用所有16个核心.