2014-04-29 57 views
0

我正在寻找Python包装与OpenCL和Pure C OpenCL之间的性能度量。性能测量可以随时间,内存等而变化。 - 是否有任何基准测试可用? - 对时间性能差异的期望是什么? - 什么样的任务(当然平行)应该有所作为?Pure C OpenCL与Python OpenCL性能

回答

3

PyOpenCL很可能是您的最佳选择。我会选择仅在非常特定的情况下使用C(对主机的速度/低延迟的超级关键需求)。对于大多数休闲并行程序来说,主机方有很大的余量,因为所有的实际工作都是在设备上完成的。

您可以考虑PyOpenCL和OpenCL在设备上具有相同的性能。

也许使用C,如果你是,比如......设计一辆自动驾驶汽车,并且每毫秒/放大器都很重要。但即使在这种情况下,Python有可能被有效利用。

找出您的特定程序是否放慢速度的最佳方法是计时您的代码。对于PyOpenCL这意味着:

import time 

cl.command_queue_properties.PROFILING_ENABLE 

很多聪明的企业和个人选择Python中第一个代码,因为他们可以很快构建一个灵活,工作原型。如果他们最终需要更多主机性能,则将Python移植到C是相对容易的。

希望有所帮助!

+0

确实有帮助,而且合理。但是,真正的测量是必须支持这一假设的。如果是这样,结论是,在价值成本方面python是GPGPU编程的平台 – chook

2

OpenCL使用预编译的程序,稍后发送到设备执行。他们是所谓的“内核”。这些内核被部署为在终端设备上执行。这意味着必须测量的主要成本是OpenCL实施API I/O。因此,您不能依赖内存/ CPU测量,因为真正的OpenCL部件将使用它们。 AFAIK,没有可用的基准测试,但如果你需要的话,并不难,但总体来说,矩阵乘法就是你好世界的例子。

OpenCL并不是那种类型,它在每个CPU周期都使用I/O。使用领域 - 真正的大数据处理,它使用一个大的输入,大量的处理操作和一个输出(不管小或大)。没有人说OpenCL不能用于许多I/O和最小的计算变化,但实现API开销不值得。

期望值必须是I/O与整体应用程序性能近似相同。

+0

当我有多个输出和大量计算时,以及另一个处理轻量级的情况(例如中值滤波器)是什么情况? – chook

+1

@ hellfire769 PyOpenCL实现并不缺少性能,AFAIK,因为它简单的封装了OpenCL API。非常好的一个。对于你的情况,它会做好工作。它只是必须的。 – Anthony

1

这里有一个基准:https://github.com/bennylp/saxpy-benchmark,比较PyOpenCL对OpenCL的以及其他框架/方法,如CUDA,纯C++,numpy的,R,八度,甚至TensorFlow(声明:我的作者)

根据基准测试结果,OpenCL和PyOpenCL之间的性能差异变化太大。 PyOpenCL GPU目标比OpenCL慢7倍,但对于CPU目标,PyOpenCL实际上比OpenCL快2倍以上!