我在 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 需要导出的最后一个变量的语法。
谁能帮我配置运行时以在多个语言环境中执行我的代码?
此致,
蒂亚戈·卡内罗。