首页 > 解决方案 > Chapel - GASNET MPI 基板的多语言环境配置问题

问题描述

我在 Chapel 中有一个带有分布式迭代器的 forall 代码,我正在尝试在集群上运行它。

使用 UDP 管道时,代码运行完美。

现在,我正在尝试将便携式 MPI 用作内部层——但没有成功。

这是我的配置:

export CHPL_TASKS=qthreads

export CHPL_COMM=gasnet

export CHPL_COMM_SUBSTRATE=mpi

export CHPL_LAUNCHER=gasnetrun_mpi

只有这种配置只使用了一个节点。查看 Gasnet 文档,我补充说:

export GASNET_NODEFILE="$(pwd)"/nodes

export MPIRUN_CMD='mpirun -np %N -machinefile %H %C'

(官方文档中缺少这些细节)。

好的,现在我可以使用 MPI 运行 Chapel 代码了。但:

1) 每个节点有 32 个核心。如果我输入hello6 -nl xx < 33,则所有进程都由第一个语言环境执行。

1.1) 我想运行hello6 -nl 4,所以每个节点都会从语言环境 x,地址 x.address 打招呼。

2)看起来 Chapel 使用$OAR_NODEFILE(可能是另一个)来创建 Locales 向量,因为OAR_NODEFILE每个节点的每个核心都有一个条目。

3) 但是,即使我手动更改两者$GASNET_NODEFILE,并且$OAR_NODEFILELocale 向量仍然包含每个 CPU 节点的每个核心的条目。

4) 在我可以访问的集群中,我运行 mpi 代码,如下所示mpirun -machinefile $OAR_NODEFILE ~/program:但是,GASNET 需要导出的最后一个变量的语法。

谁能帮我配置运行时以在多个语言环境中执行我的代码?

此致,

蒂亚戈·卡内罗。

标签: mpichapelgasnet

解决方案


假设您使用的是 Chapel 1.18 版本和 Open MPI(如果这不是真的,请告诉我。)在 Chapel 1.18 及更早版本中存在一个错误,当使用 Open MPI 时,所有 Chapel 实例首先被打包到单个节点上。这已在 master ( https://github.com/chapel-lang/chapel/pull/11546 ) 上修复,修复将包含在 1.19 版本中。

您可以尝试使用 git master,或者您可以设置MPIRUN_CMD="mpirun --bind-to none --map-by ppr:1:node -np %N %P %A"为解决方法。


推荐阅读