Python中的GPGPU编程

r00*_*kie 4 python opencl

我想在Python中启动GPGPU编程.我应该从pyopencl还是clyther开始?有什么不同?

use*_*045 11

OpenCL由两部分组成.存在通常用C编写的主机侧,以及用OpenCL定义的C的导数编写的设备侧.此代码在运行时编译到设备(通常是GPU).

CLyther试图将所有内容抽象出来.您在Python中编写主机端代码.您在Python的子集中编写设备端代码(与Cython类似).这是非常高水平和易于使用.

PyOpenCL是一种与Python的OpenCL API相对较低级别的绑定.设备端代码是用OpenCL的C99子集编写的.它使您可以完全访问并完全控制OpenCL.很少被抽象出来.

我对两者的经验都很有限,但我的印象是,一旦两者都成熟,我宁愿在大多数项目中使用Clyther.它更加用户友好,这意味着您更有可能使用它,并且更多地使用它.与PyOpenCL和Python相比,在Clyther和Python之间来回切换代码也更容易,因此代码维护和重构应该更容易.对于性能非常关键的项目,我更喜欢PyOpenCL.它提供了更好的低级控制,并且您和硬件之间的层数更少.使用PyOpenCL时,最终可能的性能应该优于Clyther.

我不知道这是否会永远存在.PyOpenCL最终可能会添加更高级别的构造,而Clyther最终会添加更低级别的控制.在一个理想的世界中,Clyther开发人员会移动核心,使其建立在PyOpenCL之上,因此我们不必选择,并避免重复劳动.但我怀疑这种情况会不会发生.

目前,PyOpenCL似乎比Clyther更成熟.它首先启动,并且范围不那么雄心勃勃.它拥有比Clyther更好的文档,并且似乎拥有更大的用户社区.两者在代码大小上非常相似--Clyther是关于Python的4KLOC和C的4KLOC.PyOpenCL是大约7KLOC的Python代码和9KLOC的C++代码.这是近似的(包括构建系统,示例等),因此不应将其视为暗示超出近似相等的任何内容.