1

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

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

4

3 回答 3

0

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

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

但是,我遇到的问题是:

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

I've a bit of knowledge on this. Unfortunately, the answer is: depends on what the kernel is doing.

My biggest gripe is with NVIDIA and OpenCL, since they don't seem to support: vectors (float2, 4, etc) and global offsets. Kind of obnoxious. Intel and ATI are both solid, but even then vector sizes can differ. The above doesn't really matter if you are doing image convolution.

It matters if you want to run AMD FFT on an NVIDIA card, are doing matrix math, etc. To address the vector issue, you can write multiple kernels that each have a different vector size and call the right one: MatrixMult_float4(...).

于 2013-10-30T21:13:20.560 回答
0

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

于 2013-11-02T23:40:38.353 回答