首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chapel-Python集成问题

Chapel-Python集成问题
EN

Stack Overflow用户
提问于 2019-10-11 18:00:01
回答 1查看 226关注 0票数 7

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

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

  1. 我知道您可以构建重要的.so文件,但是当生成Cython时,编译能停止吗?然后,我可以将它包含到发行版中,并使用标准的setuptools在Travis上编译我的项目。
  2. 我可以将numpy数组传递给用Chapel编写的Python扩展吗?
  3. 如果对2的回答是肯定的,而且我的计算在数组的一个维度上是令人尴尬的平行,那么在教堂里是否有一种优雅的方法来表达这个平行的意思呢?
  4. 如果我编写了在多个节点上工作的Chapel代码并将其编译为Python扩展,那么如何运行它呢?我可以使用mpirun python my_code.py命令吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-11 19:14:39

  1. 不幸的是目前没有。但是,我们确实将生成的.pxd和.py(x)文件留在.so目录中,以便同时使用这些文件(这不是我们考虑过的特性请求,因此如果您感到有动力,请务必在我们的.so页面:https://github.com/chapel-lang/chapel/issues上打开一个问题)。 作为参考,我们这样做是因为Cython编译命令相当棘手。我原以为我们打印了chpl编译标志--print-commands中使用的Cython命令,但情况并非如此(我将对此提出一个问题)。
  2. 您可以从Python将已知原语类型的一维numpy数组传递给Chapel。我们希望尽快增加对其他numpy数组的支持(希望在2020年3月的1.21中)。
  3. 这在教堂的数组上是绝对可行的--我建议在遍历数组的这个维度进行计算时使用forall循环,这将将该维度中的索引划分为由Chapel确定的多个任务。(对于那些不熟悉forall循环的人,此链接给出了一个很好的概念概述)

例如:

代码语言:javascript
复制
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代码。

例如,您可以写:

代码语言:javascript
复制
import MyChplLib

MyChplLib.chpl_setup(4)
...

使用4个区域设置(节点)运行您的程序。

我可能应该提到,在1.20版本中,我们不支持多语言环境库中的数组参数。我们仍然在为1.21版本确定优先级,所以反馈你想要的速度将是非常有用的!

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58346366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档