0

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

4

3 回答 3

4

PyOpenCL 很可能是您的最佳选择。我会选择仅在非常特定的情况下使用 C(对主机速度/低延迟的超级关键需求)。对于大多数随意的并行程序,主机端有足够的松弛是可以的,因为所有真正的工作都在设备上完成。

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

如果你愿意,也许可以使用 C,比如……设计一辆自动驾驶汽车,每毫秒/安培都很重要。但即使在那种情况下,Python 也很可能被有效地使用。

确定您的特定程序是否变慢的最佳方法是为您的代码计时。对于 PyOpenCL,这意味着:

import time

cl.command_queue_properties.PROFILING_ENABLE

许多聪明的公司和个人选择首先使用 Python 进行编码,因为他们可以快速构建灵活、可工作的原型。如果他们最终需要更多的主机性能,那么将 Python 移植到 C 相对容易。

希望有帮助!

于 2014-04-29T21:49:45.847 回答
3

OpenCL 使用预编译的程序,然后将其发送到设备执行。它们是所谓的“内核”。这些内核被部署为在终端设备上执行。这意味着必须衡量的主要成本是 OpenCL 实现 API I/O。因此,您不能依赖内存/CPU 测量,因为真正的 OpenCL 部分将使用它们中的相同。

AFAIK,没有可用的基准,但如果你需要它并不难做一个(矩阵乘法是你好世界的例子,总体而言)。

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

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

于 2014-04-29T19:01:22.667 回答
3

这里有一个基准:https ://github.com/bennylp/saxpy-benchmark ,将 PyOpenCL 与 OpenCL 以及其他框架/方法进行比较,例如 CUDA、纯 C++、Numpy、R、Octave,甚至 TensorFlow(免责声明:我是作者)

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

于 2017-11-14T08:03:28.583 回答