我正在寻找Python包装器与OpenCL和Pure C OpenCL之间的性能测量。性能测量可能随时间,内存等而变化。 - 有没有可用的基准? - 对时间性能差异的期望应该是什么? - 什么样的任务(当然并行......)应该有所作为?
答案 0 :(得分:3)
PyOpenCL很可能是您的最佳选择。我会选择仅在非常特定的情况下使用C(对主机的速度/低延迟的超级关键需求)。对于大多数偶然的并行程序,主机方面可以有足够的松弛,因为所有实际工作都在设备上完成。
您可以认为PyOpenCL和OpenCL在设备上具有相同的性能。
如果你愿意,可以使用C,比如......设计自动驾驶汽车,每毫秒/安培都很重要。但即使在这种情况下,Python也可能得到有效使用。
确定您的特定程序是否放慢速度的最佳方法是为代码计时。对于PyOpenCL,意思是:
import time
和
cl.command_queue_properties.PROFILING_ENABLE
许多聪明的公司和个人选择首先使用Python编写代码,因为他们可以快速构建灵活的工作原型。如果他们最终需要更多主机性能,将Python移植到C相对容易。
希望有所帮助!
答案 1 :(得分:2)
OpenCL使用预编译的程序,后来发送到设备执行。它们就是所谓的“内核”。部署这些内核以在终端设备上执行。这意味着必须测量的主要成本是OpenCL实现API I / O.因此,您不能依赖内存/ CPU测量,因为真正的OpenCL部件将使用相同的内容。
AFAIK,没有可用的基准,但如果您需要它,并不难做到(矩阵乘法是hello world示例,总体而言)。
OpenCL不是那种在每个CPU周期使用I / O的类型。使用领域 - 真正的大数据处理,使用一个大输入,大量处理操作和一个输出(无论小或大)。没有人说OpenCL不能用于许多I / O和最小的计算变化,但实现API开销不值得。
期望必须是I / O与整体应用程序性能的快速相同。
答案 2 :(得分:2)
这里有一个基准:https://github.com/bennylp/saxpy-benchmark,比较PyOpenCL与OpenCL以及其他框架/方法,如CUDA,普通C ++,Numpy,R,Octave,甚至是TensorFlow(免责声明:我是作者)
根据基准测试结果,OpenCL和PyOpenCL之间的性能差异变化太大。 PyOpenCL GPU目标比OpenCL慢近7倍,但对于CPU目标,PyOpenCL实际上比OpenCL快2倍!