Chapel-Python集成问题

问题描述 投票:7回答:1

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

我对Chapel没有任何经验,但是对于我的用例来说,这似乎很有希望。我对如何将Chapel代码集成到当前工作流程中有一些疑问:

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

  2. 我可以将

    numpy

  3. 数组传递给用Chapel编写的Python扩展吗?
  4. 如果对2的答案为是,并且我的计算在数组的一维上尴尬地平行,是否有一种优雅的方式在教堂中表达这种并列现象?
  5. 如果我编写可在多个节点上使用的Chapel代码并将其编译为Python扩展,该如何运行它?我可以使用mpirun python my_code.py类命令吗?
python parallel-processing chapel parallelism-amdahl
1个回答
5
投票
  1. 不幸的是目前不是。但是,我们会将生成的.pxd和.py(x)文件保留在.so目录中,因此您可以同时使用它们(这不是我们考虑的功能要求,因此,如果您有动力,绝对可以在我们的Github页面上打开一个问题:https://github.com/chapel-lang/chapel/issues)。

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

  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 ... }

    如果将Chapel库编译为具有多语言环境设置的Python扩展,则可以使用扩展chpl_setup函数的numlocales参数来指定所需的语言环境(节点)数。这样做将有助于在您运行Python程序时为您分发Chapel代码。
  • 例如,您可以写:

    import MyChplLib MyChplLib.chpl_setup(4) ...

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

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

  • © www.soinside.com 2019 - 2024. All rights reserved.