首页 文章

将MPI进程分配给节点

提问于
浏览
1

我有一个MPI程序,它使用主进程和多个工作进程 . 我希望主进程单独在单个计算节点上运行,而工作进程在另一个节点上运行 . 应该通过套接字分配工作进程(例如,使用 --map-by-socket 选项完成) . 是否有任何选项可以将主进程和工作进程分配给不同的节点或手动分配,通过咨询排名可能?

谢谢

2 回答

  • 2

    通过使用等级文件,可以通过绑定同时为主机分配等级 . 在您的情况下,假设每个节点有两个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-3slots=1:0-3 (假设核心是线性编号,可能不是这种情况) . 然后通过 --rankfile 选项将rankfile提供给 mpiexec . 它取代了主机文件 .

    另一个选择是进行MIMD发布 . 在这种情况下,可以将MPI作业分成几个部分,并为每个部分提供不同的分布和绑定参数:

    mpiexec -H host1 -n 1 --bind-to none ./program : \
            -H host2 -n 2 --bind-to socket --map-by socket ./program
    
  • 2

    我知道这样做的最简单方法是使用OpenMPI的--hostfile选项 .

    如果您使用任何体面的批处理系统,您应该在一些简单文件或环境变量中有一个主机和插槽列表,您可以将其解析为主机文件 .

    如果您“手动”运行应用程序,您可以自己生成这样的列表 .

相关问题