我在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运行教堂代码了。但是:
( 1)每个节点有32个核。如果将hello6 -nl x设置为x< 33,则所有进程都由第一个区域设置执行。
1.1)我想运行hello6 -nl 4,所以每个节点都会从locale和adress x.address上打个招呼。
( 2)看起来,教堂堂使用$OAR_NODEFILE (可能是另一个)来创建区域设置向量,因为这个OAR_NODEFILE每个节点每个核心都有一个条目。
3)然而,即使我手动更改了$GASNET_NODEFILE和$OAR_NODEFILE,每个节点的区域设置向量仍然包含每个核的一个条目。
4)在集群中,我可以访问,我运行的mpi代码如下:mpirun -machinefile $OAR_NODEFILE ~/program。但是,GASNET需要导出最后一个变量的语法。
有人能帮我配置运行时,以便在多个地区上执行我的代码吗?
诚挚的问候,
蒂亚戈·卡内罗。
发布于 2018-12-03 16:29:51
假设您使用的是Chapel 1.18版本和Open (如果不是这样的话,请告诉我。)在Chapel 1.18和更早版本中有一个bug,当使用Open时,所有教堂实例都首先打包到一个节点上。这已经固定在主版(https://github.com/chapel-lang/chapel/pull/11546)上,修复将包含在1.19版本中。
您可以尝试使用git,也可以将MPIRUN_CMD="mpirun --bind-to none --map-by ppr:1:node -np %N %P %A"设置为解决方案。
https://stackoverflow.com/questions/53597097
复制相似问题