OpenCL Benchmark

时间:2011-10-24 23:57:52

标签: benchmarking opencl

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

4 个答案:

答案 0 :(得分:4)

不是性能/基准测试专家我只能尝试给你一些关于OpenCL与CUDA的一般想法。虽然公平警告,但我可能会遇到一些问题。

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

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

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

  • 最佳代码将使用所有可用内存带宽
  • 将编译器创建有效的代码
  • 您是否可以使用所有计算单元
  • 依旧......

从我的测试中,这些问题的答案 - 我的代码将最佳地使用硬件 - 对于两个框架都是肯定的。所以他们肯定会在同一个联赛中打球,即使一个人在目前的某个特定问题上比另一个人快5%,我觉得它在一般观点中没有任何区别。

我故意没有写任何关于OpenCL的其他用例,例如:在CPU上。这个领域要宽得多,因为你有不同的操作系统,甚至不同的OpenCL SDK用于相同的处理器(例如Apple和I​​ntel),还有很多方法可以在没有OpenCL的情况下并行编程(比较)。

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

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

我的建议:

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

  • 如果你打算做低级应用,你将从头开始编写所有代码,使用OpenCL,因为它将支持几乎所有未来的硬件(CPU和GPU)。你也可以使用一些图书馆,但不如CUDA那么好。

答案 3 :(得分:2)

采取一粒盐:

http://clbenchmark.com/result.jsp

由于NVidia卡对OpenCL的支持可能低于CUDA,但他们可能在同等的CUDA程序中排名更高。