【问题标题】:Pure C OpenCL vs Python OpenCL performance纯 C OpenCL 与 Python OpenCL 性能
【发布时间】:2014-06-15 20:49:11
【问题描述】:

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

【问题讨论】:

    标签: c performance opencl performance-testing pyopencl


    【解决方案1】:

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

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

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

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

    import time
    

    cl.command_queue_properties.PROFILING_ENABLE
    

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

    希望有帮助!

    【讨论】:

    • 确实有帮助,而且是合理的。然而,实际测量是支持这一假设的必要条件。如果是这样,那么结论是,就价值成本而言,python 是 GPGPU 编程的平台
    【解决方案2】:

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

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

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

    期望 I/O 的速度与整体应用程序性能相当。

    【讨论】:

    • 当我有多个输出和大量计算时是什么情况,以及处理轻量级的另一种情况,例如中值滤波器?
    • @hellfire769 PyOpenCL 实现并不缺乏性能,AFAIK,因为它是 OpenCL API 的简单包装。而且非常好。对于您的情况,它会做正确的工作。它只是必须。
    【解决方案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 倍以上!

    【讨论】:

    • 优秀的基准测试!语言和操作系统之间的信息非常丰富。感谢您的辛勤工作。
    猜你喜欢
    • 1970-01-01
    • 2011-11-07
    • 2012-02-16
    • 2012-10-06
    • 2011-12-20
    • 2014-07-17
    • 2012-06-14
    • 2014-06-22
    • 2018-07-08
    相关资源
    最近更新 更多