我有一个MPI程序,它使用主进程和多个工作进程。我希望主进程单独在单个计算节点上运行,而工作进程在另一个节点上运行。应该通过套接字分配工作进程(例如,使用--map-by-socket
选项完成)。是否有任何选项可以将主进程和工作进程分配给不同的节点或通过查询排名手动分配它?
由于
答案 0 :(得分:3)
通过使用rankfiles,可以同时为主机分配排名。在您的情况下,假设每个节点有两个4核CPU,这样的事情应该这样做(对于Open MPI 1.7和更新版本):
rank 0=host1 slots=0-7
rank 1=host2 slots=0:0-3
rank 2=host2 slots=1:0-3
对于旧版本,您应该分别使用slots=0:0-3
和slots=1:0-3
而不是slots=0-3
和slots=4-7
(假设核心是线性编号,可能不是这种情况)。然后通过mpiexec
选项将rankfile提供给--rankfile
。它取代了主机文件。
另一种选择是进行MIMD发布。在这种情况下,可以将MPI作业分成几个部分,并为每个部分提供不同的分布和绑定参数:
mpiexec -H host1 -n 1 --bind-to none ./program : \
-H host2 -n 2 --bind-to socket --map-by socket ./program
答案 1 :(得分:2)
我知道这样做的最简单方法是使用OpenMPI的--hostfile选项。
如果你使用任何体面的批处理系统,你应该在一些简单的文件或环境变量中有一个主机和插槽的列表,你可以将它解析为一个主机文件。
如果您“手动”运行应用程序,则可以自行生成此类列表。