如何在openmpi 1.6.4+;垃圾堆?

如何在openmpi 1.6.4+;垃圾堆?,mpi,openmpi,affinity,hyperthreading,Mpi,Openmpi,Affinity,Hyperthreading,最新(v1.8.3)OpenMPI文档规定rankfiles现在必须使用hwloc报告的逻辑cpu ID,而不是物理ID,请参阅mpirun文档的rankfiles部分的最后一句: 从Open MPI v1.7开始,所有插槽/核心插槽位置均为 指定为逻辑索引(Open MPI v1.6系列使用物理索引 索引)。您可以使用HWLOC的“lstopo”等工具来查找 套接字和内核的逻辑索引 我注意到这个站点上有几个问题(特别是和的答案)表明,可以在openMPI rankfile中指定物理cpu id

最新(
v1.8.3
)OpenMPI文档规定rankfiles现在必须使用
hwloc
报告的逻辑cpu ID,而不是物理ID,请参阅
mpirun
文档的
rankfiles
部分的最后一句:

从Open MPI v1.7开始,所有插槽/核心插槽位置均为 指定为逻辑索引(Open MPI v1.6系列使用物理索引 索引)。您可以使用HWLOC的“lstopo”等工具来查找 套接字和内核的逻辑索引

我注意到这个站点上有几个问题(特别是和的答案)表明,可以在openMPI rankfile中指定物理cpu id,方法是在id前面加上
p
。例如:

rank 0=localhost slot=p0
rank 1=localhost slot=p8
rank 2=localhost slot=p1
rank 3=localhost slot=p9
要为秩
0
请求物理cpu id
0
,为秩
1
请求物理cpu id
8

我尝试在OpenMPI文档中搜索此语法,但没有结果。我还尝试让某人在OpenMPI
1.6.4
中以这种方式构建一个rankfile,他报告说这也不起作用

此语法适用于哪个版本的OpenMPI?它在任何地方都有记录吗?什么是正式语法?

感谢您为我指明了正确代码的方向。该函数似乎出现在版本
1.8
的open mpi代码中

通过追溯代码,我找到了一个函数,它似乎可以追溯到版本
1.3
。查看此函数的历史记录,我们发现以下代码片段出现在解析插槽列表部分的版本
1.5
分支中:

/* we no longer support physical mappings */
if ('P' == value[0] || 'p' == value[0]) {
    orte_show_help("help-rmaps_rank_file.txt", "not-supported", true, rankfile);
    rc = ORTE_ERR_SILENT;
    ORTE_ERROR_LOG(rc);
    goto unlock;
}
因此,我得出结论,我的问题的答案是
p
符号在下面的OpenMPI版本
1.5


编辑:我还在
Open-MPI-Users
邮件列表中找到了支持我的发现的邮件。

使用
lstopo-l
获取逻辑ID。然后放入rankfile
slot=logicalID
。谢谢。我意识到,您可以通过这种方式获得逻辑ID,如果您手动创建rankfile,这可能没问题。但是,如果要在作业执行设置中自动生成rankfile,则需要对rankfile中引用的每个主机进行远程调用
lstopo
。这对于我们的用例来说是不可接受的。这就是为什么我对支持指定物理ID的
p
表示法的openmpi版本以及该表示法的特定语法感到好奇。可能与您有关,或者在这种情况下与您相反。哈,好的,谢谢:)我来看看。