Chapel - GASNET MPI 基板的多区域配置问题

Chapel - Problems With Multilocale Configuration of GASNET MPI substrate

我在 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 x, x < 33,则所有进程都由第一个语言环境执行。

1.1) 我想 运行 hello6 -nl 4,所以每个节点都会从区域设置 x,地址 x.address.

打招呼

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

3) 但是,即使我手动更改 $GASNET_NODEFILE$OAR_NODEFILE,Locale 向量仍然包含每个 CPU 节点的每个核心的一个条目。

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

任何人都可以帮助我配置运行在多个区域设置上执行我的代码的时间吗?

此致,

蒂亚戈·卡内罗。

假设您使用的是 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" 作为解决方法。