gpt4 book ai didi

OpenCL 与 OpenMP 性能对比

转载 作者:行者123 更新时间:2023-12-03 07:41:47 31 4
gpt4 key购买 nike

是否有研究比较 OpenCL 与 OpenMP 的性能?具体来说,我对使用 OpenCL 启动线程的开销成本感兴趣,例如,如果将域分解为大量单独的工作项(每个工作项由一个线程执行一项小工作),而 OpenMP 中的重量级线程则为域被分解为子域,子域的数量等于核心数。

OpenCL 编程模型似乎更针对大规模并行芯片(例如 GPU),而不是具有更少但更强大核心的 CPU。

OpenCL 能否有效替代 OpenMP?

最佳答案

我看到的基准测试表明,在相同硬件上运行的 OpenCL 和 OpenMP 通常在性能上相当,或者 OpenMP 的性能稍好一些。然而,我还没有看到任何我认为具有决定性的基准,因为它们大多缺乏对其方法的详细解释。但是,有一些有用的事情需要考虑:

  • OpenCL 在运行时编译内核时总会有一些额外的开销。任何基准测试要么需要单独列出此时间,要么使用预编译的 native 内核,要么运行足够长的时间以使内核编译无关紧要。

  • OpenCL 实现会有所不同。像 NVidia 这样的 GPU 供应商没有动力确保他们基于 CPU 的 OpenCL 实现尽可能快。没有一个 OpenCL 实现能够像良好的 OpenMP 实现一样成熟。

  • OpenCL 规范基本上没有提及基于 CPU 的实现如何在幕后使用线程,因此任何关于线程是相对轻量级还是重量级的讨论都必然是特定于实现的。

  • 当您在 CPU 上运行 OpenCL 代码时,您的工作项不必很小且数量众多。您可以按照与 OpenMP 相同的方式来分解问题。

即使 OpenCL 的开销更大,也可能有其他原因更喜欢它。

  • 显然,如果您的代码可以充分利用 GPU,您将需要 OpenCL 实现。 CPU 上的 OpenCL 性能可能足够好,因此不值得为没有强大 GPU 的用户维护 OpenMP 后备代码路径。

  • 良好的基于​​ CPU 的 OpenCL 实现意味着您将自动受益于 CPU 和 OpenCL 实现支持的任何指令集扩展。使用 OpenMP,您必须做额外的工作以确保您的可执行文件包含 SSEx 和 AVX 代码路径。

  • OpenCL 向量基元可以帮助您表达一些显式并行性,而不会因使用 SSE 内在函数而牺牲可移植性和可读性。

关于OpenCL 与 OpenMP 性能对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7263193/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com