Chapel-Python集成问题

Joy*_*iro 6 python parallel-processing parallelism-amdahl chapel

我正在尝试查看是否可以使用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某种命令吗?

Lyd*_*can 7

  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循环的人,此链接很好地概述了该概念)

例如:

forall x in arr.domain.dim(1) {
  // traverses the first dimension of arr's domain in parallel
  ...
}
Run Code Online (Sandbox Code Playgroud)
  1. 如果将Chapel库编译为具有多语言环境设置的Python扩展,则可以使用扩展chpl_setup功能的numlocales参数指定所需的语言环境(节点)数。这样做将有助于在您运行Python程序时为您分发Chapel代码。

例如,您可以编写:

import MyChplLib

MyChplLib.chpl_setup(4)
...
Run Code Online (Sandbox Code Playgroud)

使用4个语言环境(节点)运行程序。

我可能应该提到,从1.20版本开始,我们在多语言环境库中不支持数组参数。我们仍在确定1.21发行版的优先级,因此,反馈您想要的速度有多大的帮助!