运送可靠的OpenCL应用程序 - 工具/技术/提示?

时间:2013-10-30 20:25:36

标签: opencl gpgpu

我想发布适用于所有OpenCL 1.1兼容GPU的OpenCL代码。而不是购买一堆GPU并对其进行测试,是否有任何工具可以帮助确保可靠性?

如果有人有经验将OpenCL应用程序运送到广泛的硬件基础,我有兴趣了解任何其他测试可靠性的方法。

3 个答案:

答案 0 :(得分:0)

我对此有一点了解。不幸的是,答案是:取决于内核正在做什么。

我最大的抱怨是NVIDIA和OpenCL,因为它们似乎不支持:向量(float2,4等)和全局偏移。有点讨厌。英特尔和ATI都很稳固,但即使这样,矢量大小也会有所不同。如果你正在进行图像卷积,上面的内容并不重要。

如果您想在NVIDIA卡上运行AMD FFT,进行矩阵数学运算等,这很重要。要解决向量问题,您可以编写多个内核,每个内核具有不同的向量大小并调用正确的内核:MatrixMult_float4( ...)。

答案 1 :(得分:0)

您可以使用AMD KernelAnalyzer2检查您的代码是否编译,尽管这确实需要Catalyst驱动程序的某些组件,因此它仅适用于具有AMD GPU的PC。还有英特尔内核生成器,适用于支持英特尔OpenCL SDK的设备。 Nvidia的实现存在缺陷,特别是在我的经验中更新的GPU上,所以最好是测试每一代GPU。

答案 2 :(得分:0)

为了避免扩展和验证CL语言版本,可以尝试使用LLVM测试编译代码,或者只是获取用于验证的语法,例如作为BNF。

有一个很有前途的开源项目,可能包含有用的东西:http://bazaar.launchpad.net/~pocl/pocl/master/files/head:/lib/CL/

然而,我遇到的问题是:

  • 换行符导致OpenCL源文件中某些实现(CR,LF,CRLF)的构建断开。将其中一个指定为唯一有效的行结尾将是愚蠢的。如果一个人正在与SCM一起编辑不同平台上的源文件,则可能会变得不方便。所以我在编译之前删除了注释并清理了换行符。
  • 性能:使用多线程有效地提供GPU;不同的硬件星座有不同的瓶颈。在这里,我需要一个具有多个调度程序线程的客户端管道。当然,CPU剩余的工作量取决于计算设备的任务或功能,数量和资源。需要序列化执行或动态循环计数的事情就是这样的候选者。