提供可靠的OpenCL应用程序-工具/技术/提示?
我想发布的OpenCL代码应该可以在所有兼容OpenCL1.1的GPU上运行。有没有什么工具可以帮助确保可靠性,而不是购买一堆GPU并对其进行测试提供可靠的OpenCL应用程序-工具/技术/提示?,opencl,gpgpu,Opencl,Gpgpu,我想发布的OpenCL代码应该可以在所有兼容OpenCL1.1的GPU上运行。有没有什么工具可以帮助确保可靠性,而不是购买一堆GPU并对其进行测试 如果有人有将OpenCL应用程序运送到广泛硬件基地的经验,我会有兴趣了解任何其他测试可靠性的方法。我对此有一点了解。不幸的是,答案是:取决于内核在做什么 我最大的不满是NVIDIA和OpenCL,因为它们似乎不支持向量(float2、4等)和全局偏移。有点讨厌。Intel和ATI都是固态的,但即使如此,矢量大小也可能不同。如果您正在进行图像卷积,上述
如果有人有将OpenCL应用程序运送到广泛硬件基地的经验,我会有兴趣了解任何其他测试可靠性的方法。我对此有一点了解。不幸的是,答案是:取决于内核在做什么 我最大的不满是NVIDIA和OpenCL,因为它们似乎不支持向量(float2、4等)和全局偏移。有点讨厌。Intel和ATI都是固态的,但即使如此,矢量大小也可能不同。如果您正在进行图像卷积,上述内容实际上并不重要
如果你想在NVIDIA卡上运行AMD FFT,做矩阵运算,等等,这很重要。为了解决向量问题,你可以编写多个内核,每个内核都有不同的向量大小,并调用正确的一个:MatrixMult_float4(…)。你可以使用AMD KernelAnalyzer2检查代码是否编译,虽然这确实需要一些组件的催化剂驱动程序,所以它只适用于我的个人电脑与AMD的GPU。还有“英特尔内核编译器”,它适用于支持英特尔OpenCL SDK的设备。Nvidia的实现有缺陷,特别是在我的经验中,在较新的GPU上,因此最好是测试每一代的一个GPU。为了避免扩展和验证CL语言版本,可以尝试使用LLVM测试编译代码,或者只是获取语法进行验证,例如作为BNF 有一个很有前途的开源项目,它可能包含有用的东西: 然而,我遇到的问题是:
- 换行符在OpenCL源文件中的某些实现(CR、LF、CRLF)上导致构建中断。将其中一个指定为唯一有效的行尾是愚蠢的。如果在不同平台上结合SCM编辑源文件,可能会带来不便。因此,我在编译之前删除注释并清理换行符
- 性能:使用多线程高效地为GPU馈电;不同的硬件星座有不同的瓶颈。这里我需要一个具有多个调度程序线程的客户端管道。当然,CPU剩余的工作量取决于任务或能力、计算设备的数量和资源。需要序列化执行或动态循环计数的对象就是这样的候选对象
clGetProgramInfo()
执行编译过程,以检索每个涉及的特定计算设备生成的二进制文件。这些blob可以存储在文件中,并与clCreateProgramWithBinary()一起重用
。所有这些与OpenGL二进制着色器格式非常相似。