首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头,openmpi和/proc/挂载行的意外结束

码头,openmpi和/proc/挂载行的意外结束
EN

Stack Overflow用户
提问于 2017-09-10 08:01:11
回答 2查看 4.3K关注 0票数 8

我有构建环境可以在Docker容器中运行代码。其中一个组件是OpenMPI,我认为它是问题的根源或表现出来的原因。

当我使用MPI运行代码时,我收到消息,

代码语言:javascript
复制
Unexpected end of /proc/mounts line `overlay / overlay rw,relatime,lowerdir=/var/lib/docker/overlay2/l/NHW6L2TB73FPMK4A52XDP6SO2V:/var/lib/docker/overlay2/l/MKAGUDHZZTJF4KNSUM73QGVRUD:/var/lib/docker/overlay2/l/4PFRG6M47TX5TYVHKQQO2KCG7Q:/var/lib/docker/overlay2/l/4UR3OEP3IW5ZTADZ6OKT77ZBEU:/var/lib/docker/overlay2/l/LGBMK7HFUCHRTM2MMITMD6ILMG:/var/lib/docker/overlay2/l/ODJ2DJIGYGWRXEJZ6ECSLG7VDJ:/var/lib/docker/overlay2/l/JYQIR5JVEUVQPHEF452BRDVC23:/var/lib/docker/overlay2/l/AUDTRIBKXDZX62ANXO75LD3DW5:/var/lib/docker/overlay2/l/RFFN2MQPDHS2Z'
Unexpected end of /proc/mounts line `KNEJCAQH6YG5S:/var/lib/docker/overlay2/l/7LZSAIYKPQ56QB6GEIB2KZTDQA:/var/lib/docker/overlay2/l/CP2WSFS5347GXQZMXFTPWU4F3J:/var/lib/docker/overlay2/l/SJHIWRVQO5IENQFYDG6R5VF7EB:/var/lib/docker/overlay2/l/ICNNZZ4KB64VEFSKEQZUF7XI63:/var/lib/docker/overlay2/l/SOHRMEBEIIP4MRKRRUWMFTXMU2:/var/lib/docker/overlay2/l/DL4GM7DYQUV4RQE4Z6H5XWU2AB:/var/lib/docker/overlay2/l/JNEAR5ISUKIBKQKKZ6GEH6T6NP:/var/lib/docker/overlay2/l/LIAK7F7Q4SSOJBKBFY4R66J2C3:/var/lib/docker/overlay2/l/MYL6XNGBKKZO5CR3PG3HIB475X:/var/lib/do'

该消息打印为代码行。

代码语言:javascript
复制
MPI_Init(&argc,&argv);

为了更复杂地理解这个问题,只有当主机是mac x时,才会打印警告消息,对于linux主机,就可以了。

除了警告信息外,一切正常。我不知道如何OpenMPI和码头足够好,如何才能解决这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-11 19:43:20

这可能是因为您的/proc/mount文件中有一行大于512个字符,导致OpenMPI的hwloc模块无法正确解析它。Docker倾向于在/proc/mounts中排很长的队。您可以在openmpi-1.10.7/opal/mca/hwloc/hwloc191/hwloc/src/topology-linux.c:1677中看到错误

代码语言:javascript
复制
static void
hwloc_find_linux_cpuset_mntpnt(char **cgroup_mntpnt, char **cpuset_mntpnt, int fsroot_fd)
{
#define PROC_MOUNT_LINE_LEN 512
  char line[PROC_MOUNT_LINE_LEN];
  FILE *fd;

  *cgroup_mntpnt = NULL;
  *cpuset_mntpnt = NULL;

  /* ideally we should use setmntent, getmntent, hasmntopt and endmntent,
   * but they do not support fsroot_fd.
   */

  fd = hwloc_fopen("/proc/mounts", "r", fsroot_fd);
  if (!fd)
    return;

可以通过增加PROC_MOUNT_LINE_LEN的值来解决这个问题,尽管这应该被认为是一个临时的解决办法。

票数 12
EN

Stack Overflow用户

发布于 2018-02-07 13:44:26

此问题应自1.11.3 (2年前发布)起在hwloc中固定。您可以升级到OpenMPI 3.0,其中包含一个hwloc 1.11.7 >= 1.11.3。或者重新编译OpenMPI以使用外部hwloc而不是旧的嵌入式hwloc。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46138549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档