我在Chapel中拥有一个带有分布式迭代器的永久代码,我正在尝试在集群上运行它。
使用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
,区域设置矢量对于每个CPU节点每个内核仍然包含一个条目。
4)在我可以访问的群集中,我运行如下的mpi代码:mpirun -machinefile $OAR_NODEFILE ~/program
。但是,GASNET需要导出的最后一个变量的语法。
有人可以帮助我配置运行时以在多个语言环境中执行我的代码吗?
最诚挚的问候,
Tiago Carneiro。
答案 0 :(得分:3)
假设您使用的是Chapel 1.18版本和Open MPI(请问是否不正确。)Chapel 1.18和更早版本中存在一个错误,其中在使用Open MPI时,所有Chapel实例都首先打包到单个节点上。此问题已在主服务器(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"
设置为解决方法。