【问题标题】:OpenCL BenchmarkOpenCL 基准测试
【发布时间】:2012-07-18 02:05:18
【问题描述】:

我可以阅读很多关于 OpenCL 的信息,它似乎是最有前途的(唯一一个?)多架构库。 OpenCL 应该是第一个并行架构编程标准,最终会被大部分程序员采用。这很好,可以,但是从本机编程库迁移到 OpenCL 会降低性能吗?在 nVidia GeForces 的情况下,我已经发现一篇文章比较了同一程序的两个实现 - CUDA 与 OpenCL 代码 - 第一个似乎性能更高。对于 Pthread 或 Windows 线程,我真的不知道,但我认为“通用性”和多架构方法总会有一些“付出”。 只是为了停止猜测这个或那个,我想自己检查一切,但我需要你帮助我!是否有一个普遍接受的 OpenCL 基准测试集,我可以用来与本机代码进行比较?是否有类似用 OpenCL 代码编写的 CUDA SDK? 谢谢大家。

【问题讨论】:

  • 如果以下任何一个答案回答了您的问题,请给它一个绿色复选标记

标签: benchmarking opencl


【解决方案1】:

不是性能/基准测试专家,我只能尝试给您一些关于 OpenCL 与 CUDA 的一般性想法。不过,公平的警告,我可能会弄错一些东西。

基准测试的问题显然在于您只能客观地评估非常具体的事物 - 例如,在 CUDA 和 OpenCL 中完成的相同程序,在相同的硬件上(如您命名的来源)。但是您将无法从该实验中推断出您将在另一个程序或不同硬件上获得类似的结果。结果会有所不同,因此您必须拥有一个大型测试套件。这就是你所要求的,但我不知道存在这样的东西——人们会为他们更大的项目选择任何一种技术,并且不会把所有东西都写两次。

有 NVIDIA 代码示例,在 CUDAOpenCL 中完成。您可以选择一些并比较您的结果。

不过,我认为这不值得花时间。也许你应该从另一个角度来解决这个问题:你可以用其中一个框架做什么而你不能用另一个框架做什么?它们都使用相同的驱动程序,因此两者都将支持新硬件出现的奇特技术。线程调度是在硬件中完成的,因此它们在那里具有相同的性能。有待测试的是:

  • 优化代码会使用所有可用的内存带宽
  • 编译器会创建高效的代码
  • 你能使用所有的计算单元吗
  • 等等……

根据我的测试,这些问题的答案——我的代码是否能以最佳方式使用硬件——对于两个框架来说都是肯定的。所以他们肯定在同一个联赛中打球,即使在某个特定问题上一个比另一个快 5%,我认为从总体上看也不会产生影响。

我故意没有写任何关于 OpenCL 的其他用例的内容,例如在 CPU 上。这个领域要广泛得多,因为您有不同的操作系统,甚至对于相同的处理器(例如 Apple 和 Intel)有不同的 OpenCL SDK 以及许多在没有 OpenCL 的情况下并行编程的方法(比较)。

【讨论】:

  • 非常感谢。我同意你写的一切,但我有一些具体的问题要解决。我知道,一般来说,快 5% 并不是一个显着的加速,但现在我问自己“好的,我必须进行这个计算。我要使用什么硬件和什么库?”显然,我会选择更快的解决方案。我的问题的维度没有设置,也许这​​ 5% 的性能差异会变得“重要”。所以,非常感谢您的回答,我将研究 OpenCL 版本的 nVidia 示例。
  • @biagiop1986:要考虑的不仅仅是性能。请记住,CUDA 代码只能在 NVIDIA 设备上运行,而 OpenCL 代码可以在包括这些 NVIDIA 设备在内的多种设备上运行。这不是“所有其他条件都相同”的情况。除非您要运行一次代码并且不再需要它,否则考虑硬件兼容性可能非常重要。当 AMD 发布速度非常快的新卡时会发生什么?还是英伟达倒闭了?与硬件无关的代码有很多话要说。
【解决方案2】:

目前没有设置性能基准来测试不同框架的速度。已经创建了几个基准。值得注意的例子包括SHOC 基准套件和Rodinia。即将发布的OpenCL and the 13 Dwarves 可能很快就会发布,这可能对基准测试有用。

为了在框架之间进行测试,已经完成了测试 OpenCL 和 CUDA 在性能方面的差异的工作。其中一些工作涉及理解对于 OpenCL,虽然存在正确性可移植性,但不能保证性能可移植性。 Daga 在他的论文中强调了架构感知优化的重要性。

【讨论】:

【解决方案3】:

一般来说,OpenCL 和 CUDA 获得相同的性能。 没有合适的基准,因为根本无法比较不同的硬件和架构。

如果您打算编写基于 GPU 的应用程序,并且只想知道应该选择哪一个。不要仅仅因为速度就决定一个或另一个。与 CPU 实现相比,OCL 和 CUDA 都将提供 x100-x300 的加速。

我的建议:

  • 如果您要制作高级应用,并且需要大量库,则可能应该使用 CUDA,因为它具有更好的 SDK 和支持。

  • 如果您要编写低级应用程序并且您将从头开始编写所有代码,请使用 OpenCL,因为它将支持几乎所有未来的硬件(CPU 和 GPU)。也有一些库可以使用,但不如 CUDA 的。

【讨论】:

    【解决方案4】:

    持保留态度:

    http://clbenchmark.com/result.jsp

    由于 NVidia 卡对 OpenCL 的支持可能不如 CUDA,但它们可能在同等 CUDA 程序中排名更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      • 2010-12-30
      • 2017-05-29
      • 2014-07-30
      • 2014-05-14
      • 2023-04-03
      相关资源
      最近更新 更多