如果我需要“并行”运行许多串行程序(因为问题简单但耗时 - 我需要为同一个程序读取许多不同的数据集),如果我只使用一个节点,解决方案很简单。我所做的就是在每个命令之后继续提交带有&符号的串行作业,例如在作业脚本中:
./program1 &
./program2 &
./program3 &
./program4
它自然会在不同的处理器上运行每个串行程序。这适用于登录服务器或独立工作站,当然也适用于只要求一个节点的批处理作业。
但是,如果我需要运行同一程序的 110 个不同实例来读取 110 个不同的数据集怎么办?如果我使用提交 110 ./program# 命令的脚本提交到多个节点(比如 14 个),批处理系统是否会在不同节点上的不同处理器上运行每个作业,或者它会尝试在相同的情况下运行它们, 8核节点?
我尝试使用简单的 MPI 代码来读取不同的数据,但会导致各种错误,110 个进程中约有 100 个成功,其他进程崩溃。我也考虑过作业数组,但我不确定我的系统是否支持它。
我已经在单个数据集上广泛测试了串行程序 - 没有运行时错误,并且我没有超出每个节点上的可用内存。