4

根据本文档第 6 页(由 AMD 发布) (以及此主题?),有一些方法可以将模板与 OpenCL 一起使用。但是,第一个文档报告这可以通过使用一些似乎不存在的 clBuildProgramWithSource 选项来完成......无论如何,假设它是clBuildProgram而不是前一个,我尝试使用所谓的“-x”选项使用“clc++”,但仍然无法识别:

warning: ignoring build option: "-x"

事实上,根据来自 Khronos 的文档,此选项不可用!该文档可能会以某种方式被弃用,但是还有其他方法可以在 OpenCL 代码中使用模板吗?

4

2 回答 2

6

-x选项仅适用于支持 OpenCL 1.2 和静态 C++ 语言扩展的最新 AMD OpenCL 运行时。你不会在官方的 Khronos 文档中找到关于它的任何信息,因为这完全是 AMD 的一项举措,并且最终是供应商的扩展。

我假设你有正确的运行时,所以你的内核需要使用这些选项来构建:

-x clc++

如果您能够使用它构建带有类的内核,那么您应该能够使用模板。

如果这不起作用,则意味着您的运行时安装很糟糕,例如您以某种方式使用了错误的编译器,或者意味着您没有正确的运行时。如果是这样,请提供您的平台信息。

前段时间我弄乱了静态 C++ 扩展,我可以证明它-x clc++确实有效。


另请注意,使用此扩展程序会使您的代码无法移植并锁定在兼容 AMD 的设备上,因为其他供应商不太可能自己引入完全相同的扩展程序(如果有的话)。

此外,关于 Khronos 文档的注释 - 谷歌返回的通常是 OpenCL 1.0 版本,这可能会令人恼火。如果您经常使用 OpenCL,我建议您下载 1.1 或 1.2 标准以及获取相关 HTML 文档的本地副本以便快速访问。它有助于。

于 2013-02-21T03:11:24.743 回答
0

新的SYCL Khronos 标准为 OpenCL 平台之上的模板元编程提供原生支持,包括 AMD OpenCL 平台。

于 2017-10-19T08:43:31.963 回答