首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的GPGPU编程

Python中的GPGPU编程
EN

Stack Overflow用户
提问于 2010-08-11 13:55:31
回答 4查看 2.5K关注 0票数 4

我想用Python语言开始GPGPU编程。我应该从pyopencl开始还是从clyther开始?有什么关系呢?

EN

回答 4

Stack Overflow用户

发布于 2011-02-02 09:32:17

OpenCL由两部分组成。主机端通常用C语言编写,设备端用OpenCL定义的C的派生语言编写。这些代码在运行时编译到设备(通常是GPU)。

CLyther试图将所有内容抽象出来。您可以用Python编写主机端代码。您可以在Python的子集中编写设备端代码(以类似于Cython的方式)。这是非常高级别的,并且易于使用。

PyOpenCL是一个从OpenCL到Python的相对低级的绑定。设备端代码是用OpenCL的C99子集编写的。它为您提供对OpenCL的完全访问和完全控制。只有很少的东西被抽象出来。

我在这两个方面的经验都有限,但我的印象是,一旦两者都成熟了,我更喜欢在大多数项目中使用Clyther。它对用户更友好,这意味着你更有可能使用它,并且更多地使用它。与PyOpenCL和Python相比,在Clyther和Python之间来回移动代码也更容易,因此代码维护和重构应该更容易。对于性能要求非常高的项目,我更喜欢PyOpenCL。它提供了更好的底层控制,并且在你和硬件之间有更少的层。使用PyOpenCL时,最终可能的性能应该比使用克莱特时更好。

我不知道这种情况是否会永远持续下去。很可能,PyOpenCL最终将添加更高级别的构造,而克莱特最终将添加更低级别的控制。在理想的情况下,Clyther开发人员会移动核心,使其构建在PyOpenCL之上,这样我们就不必选择,并避免重复劳动。不过,我怀疑这种情况是否会发生。

目前,PyOpenCL似乎比克莱特更成熟。它是最先启动的,在范围上没有那么雄心勃勃。它有比Clyther更好的文档,而且似乎有更大的用户社区。两者在代码大小上非常相似-- Clyther大约是4KLOC的Python和4KLOC的C。PyOpenCL大约是7KLOC的Python代码,以及9KLOC的C++代码。这是近似值(包括构建系统、示例等),因此不应将其视为超出近似值相等的含义。

票数 11
EN

Stack Overflow用户

发布于 2010-08-11 14:32:10

在我看来,PyOpenCLCLyther更接近于OpenCL的C绑定。

这意味着,如果您已经了解OpenCL,或者计划将其他语言的实现移植到Python语言,那么PyOpenCL可能适合您。另一方面,CLyther似乎比PyOpenCL更“Python”,所以如果您更熟悉Python语言,那么所使用的习惯用法可能更容易理解。

这两个工具都是Beta版本,所以你可能不会拥有你想要的所有特性,而且其中任何一个都可能有bug。

祝好运!

票数 2
EN

Stack Overflow用户

发布于 2010-08-11 23:54:52

与OpenCL和PyOpenCL类似,CLyther包含C级别的绑定。

clyther是“python式的”,因为它还允许您将python函数作为openCL设备/内核函数进行传递和/或使用。

在python代码中内联,您可以编写

代码语言:javascript
复制
@kernel
@bind('global_work_size' ,'a.size')
@bind('local_work_size' , 1)
def sum(a,b,ret):
    i = clrt.get_global_id(0)
    ret[i] = a[i] + b[i]

sum(clarray1,clarray2,clarray3)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3455608

复制
相关文章

相似问题

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