下面两个在Slurm上的并行化方案有什么区别?
方案1
运行thrust::system::system_error
sbatch script.sh
这会召唤8个运行#!/bin/bash
#SBATCH --ntasks=8
## more options
srun echo hello
的作业
方案2 我已经使用数组作业完成了类似的工作。
echo hello
两种方案之间有区别吗?他们俩似乎都完成了同一件事。
答案 0 :(得分:3)
方案1是一项单独的作业(具有8个任务),而方案2是8种不同的作业(每个具有一项任务)。在第一种情况下,所有任务将在同一时间安排,而在第二种情况下,将独立安排8个任务。
对于作业阵列(方案2),如果同时有8个CPU可用,则它们将同时启动,但是如果最初只有4个CPU可用,则将运行4个任务,其余4个仍待处理。初始的4个完成后,其他4个开始。通常用于embarrassingly parallel作业的情况下,这些作业不需要进行通信或同步,例如将同一程序应用于文件列表。
相比之下,对于单个作业(方案1),Slurm将同时启动8个任务,因此需要8个CPUS才能同时可用。这通常仅用于并行作业中需要进程相互通信的并行作业,例如使用Message Passing Interface库。