ChapelPython集成问题

2024-09-26 18:01:22 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我可以用Python-Chapel编写一个基于Python-Chapel的并行代码,我可以使用: https://github.com/CliMT/climt

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

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

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

  3. 如果回答2。是的,而且我的计算在数组的一维中是并行的,有没有一种优雅的方式来表达礼拜堂中的这种平行性?

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


Tags: 文件代码httpsgithubcomso数组经验
1条回答
网友
1楼 · 发布于 2024-09-26 18:01:22
  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
  ...
}
  1. 如果将Chapel库编译成具有多语言环境设置的Python扩展,则可以使用扩展的chpl_setup函数的numlocales参数指定所需的区域设置(节点)数量。这样做可以在运行Python程序时为您分发Chapel代码。在

例如,您可以写下:

^{pr2}$

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

我应该提到,从1.20版本开始,我们还不支持多语言环境库中的数组参数。我们仍在确定1.21版本的优先级,因此反馈您想要的速度将是非常有用的!在

相关问题 更多 >

    热门问题