Joy*_*iro 6 python parallel-processing parallelism-amdahl chapel
我正在尝试查看是否可以使用Chapel编写用于基于Python的气候模型的并行代码:https : //github.com/CliMT/climt
我没有使用Chapel的经验,但是对于我的用例而言,这似乎很有希望。我对如何将Chapel代码集成到当前工作流程中有一些疑问:
我知道您可以构建可导入.so
文件,但是在生成Cython文件时可以停止编译吗?然后,我可以将其包含在发行版中,并使用标准setuptools
在Travis上编译我的项目。
我可以将numpy
数组传递给用Chapel编写的Python扩展吗?
如果对2的答案为是,并且我的计算在数组的一个维度上尴尬地平行,那么是否有一种优雅的方式在Chapel中表达这种并列现象?
如果我编写可在多个节点上使用的Chapel代码并将其编译为Python扩展,如何运行它?我可以使用mpirun python my_code.py
某种命令吗?
不幸的是目前还没有。但是,我们会将生成的.pxd和.py(x)文件保留在.so目录中,因此您可以同时使用它们(这不是我们考虑的功能要求,因此,如果您感到有动力,绝对可以在我们的Github页面上打开一个问题:https : //github.com/chapel-lang/chapel/issues)。
作为参考,我们这样做是因为Cython编译命令相当棘手。我以为我们可以打印出与chpl编译标志一起使用的Cython命令--print-commands
,但事实并非如此(我会为此提出问题)。
您可以将已知原始类型的一维numpy数组从Python传递给Chapel。我们希望很快增加对其他numpy数组的支持(希望在1.21中,计划于2020年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)
chpl_setup
功能的numlocales参数指定所需的语言环境(节点)数。这样做将有助于在您运行Python程序时为您分发Chapel代码。例如,您可以编写:
import MyChplLib
MyChplLib.chpl_setup(4)
...
Run Code Online (Sandbox Code Playgroud)
使用4个语言环境(节点)运行程序。
我可能应该提到,从1.20版本开始,我们在多语言环境库中不支持数组参数。我们仍在确定1.21发行版的优先级,因此,反馈您想要的速度有多大的帮助!