如果我可以用Python-Chapel编写一个基于Python-Chapel的并行代码,我可以使用: https://github.com/CliMT/climt
我没有使用Chapel的任何经验,但它对于我的用例来说似乎非常有前途。关于如何将Chapel代码集成到我当前的工作流程中,我有几个问题:
我知道您可以构建可导入的.so
文件,但是当Cython文件生成时,编译会停止吗?然后我可以将它包含到发行版中,并使用标准setuptools
在Travis上编译我的项目。
我可以把数组传递给用Chapel编写的Python扩展吗?
如果回答2。是的,而且我的计算在数组的一维中是并行的,有没有一种优雅的方式来表达礼拜堂中的这种平行性?
如果我编写在多个节点上工作的Chapel代码,并将其编译为Python扩展,如何运行它?我可以使用mpirun python my_code.py
之类的命令吗?
不幸的是目前还没有。但是,我们确实将生成的.pxd和.py(x)文件保留在.so目录中,这样您就可以同时使用这些文件(这不是我们考虑过的功能请求,因此如果您感到有动力,可以在我们的Github页面上打开一个问题:https://github.com/chapel-lang/chapel/issues)。在
作为参考,我们这样做是因为Cython编译命令相当棘手。我原以为我们打印了chpl编译标志
print-commands
使用的Cython命令,但事实并非如此(我将对此提出一个问题)。您可以将已知原始类型的一维numpy数组从Python传递到Chapel。我们希望尽快增加对其他numpy阵列的支持(希望在1.21版本中,预计在2020年3月推出)
这在Chapel中的数组上是绝对可行的-我建议在遍历数组的这个维度进行计算时使用
forall
循环,这将把该维度中的索引划分为Chapel确定的许多任务。(对于那些不熟悉forall
循环的人,this link提供了一个很好的概念概述)例如:
chpl_setup
函数的numlocales参数指定所需的区域设置(节点)数量。这样做可以在运行Python程序时为您分发Chapel代码。在例如,您可以写下:
^{pr2}$使用4个语言环境(节点)运行程序。在
我应该提到,从1.20版本开始,我们还不支持多语言环境库中的数组参数。我们仍在确定1.21版本的优先级,因此反馈您想要的速度将是非常有用的!在
相关问题 更多 >
编程相关推荐