mpi - 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 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"
为解决方法。
推荐阅读
- python-3.x - 如何在 Stack Overflow 上抓取每个问题的“内容”和“链接”?
- haskell - 带有`par`和`pseq`的Haskell并行映射
- angular - 从 Angular 表单中收集大量数据
- android - 从移动应用程序中的经度和纬度获取多边形
- ruby-on-rails - Rails 5 应用程序不会从 assets/javascripts 文件夹加载 JS
- c# - 修复 web api 方法不正确的行为
- javascript - 如何用不同的随机数填充矩阵数组
- php - 从 PHP 执行长 Python 脚本
- ionic-framework - Ionic4 模型动作控制器
- java - 当计数器指定为字符时,游戏返回一个数字