Chapel-Python 整合问题

Chapel-Python integration questions

我正在尝试查看是否可以使用 Chapel 编写并行代码以用于基于 Python 的气候模型: https://github.com/CliMT/climt

我对 Chapel 没有任何经验,但它对我的用例来说似乎很有前途。关于如何将 Chapel 代码集成到我当前的工作流程中,我有几个问题:

  1. 我知道你可以构建可导入的.so文件,但是生成Cython文件时编译会停止吗?然后我可以将它包含到发行版中并使用标准 setuptools 在 Travis 上编译我的项目。

  2. 我可以将 numpy 数组传递给用 Chapel 编写的 Python 扩展吗?

  3. 如果对 2. 的回答是肯定的,并且我的计算在数组的一维上是令人尴尬的并行,那么在 Chapel 中是否有一种优雅的方式来表达这种并行性?

  4. 如果我编写可在多个节点上运行的 Chapel 代码并将其编译为 Python 扩展,我该如何 运行 它?我可以使用 mpirun python my_code.py 之类的命令吗?

  1. 很遗憾,目前没有。但是,我们确实将生成的 .pxd 和 .py(x) 文件保留在带有 .so 的目录中,因此您可以同时使用它们(这不是我们考虑过的功能请求,所以如果您感到有动力,绝对可以在我们的 Github 页面上随意打开一个问题:https://github.com/chapel-lang/chapel/issues)。

    作为参考,我们这样做是因为 Cython 编译命令相当棘手。我以为我们打印了与 chpl 编译标志一起使用的 Cython 命令 --print-commands,但事实并非如此(我会为此提出问题)。

  2. 您可以将已知原始类型的一维 numpy 数组从 Python 传递给 Chapel。我们希望尽快添加对其他 numpy 数组的支持(希望在 1.21 中,计划于 2020 年 3 月发布)

  3. 这在 Chapel 中的数组上绝对可行 - 我建议在遍历数组的这个维度进行计算时使用 forall 循环,它将那个维度中的索引划分为Chapel 确定的一些任务。 (对于那些不熟悉 forall 循环的人,this link 很好地概述了这个概念)

例如:

forall x in arr.domain.dim(1) {
  // traverses the first dimension of arr's domain in parallel
  ...
}
  1. 如果您将 Chapel 库编译成具有多语言环境设置的 Python 扩展,您可以使用扩展的 chpl_setup 函数的 numlocales 参数指定所需的语言环境(节点)数量。当您 运行 您的 Python 程序时,这样做会负责为您分发 Chapel 代码。

例如,您可以这样写:

import MyChplLib

MyChplLib.chpl_setup(4)
...

到 运行 具有 4 个语言环境(节点)的程序。

我应该提一下,从 1.20 版开始,我们不支持多语言环境库中的数组参数。我们仍在确定 1.21 版本的优先级,所以关于您想要多快的反馈将非常有帮助!