2013-02-20 27 views
4

根据this document page 6 (released by AMD)(and this topics ?),有一些使用OpenCL模板的方法。 但是,第一个文档报告这可以通过使用一些clBuildProgramWithSource似乎并不存在的选项来完成...无论如何,假设它是​​而不是前一个,我试图使用所谓的“-x”选项有“CLC++”,但是,它仍然无法识别:如何在OpenCL中使用模板?

warning: ignoring build option: "-x" 

事实上,据来自Khronos的所产生的文件,此选项不可用! 这个文档可能会被弃用,但是有没有其他的方法可以在OpenCL代码中使用模板?

回答

6

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

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

-x clc++ 

如果你能够使用这个类来构建内核,你应该再能够使用模板。

如果这不起作用,这意味着您的运行时安装已经过时,你以某种方式使用错误的编译器,或者它意味着你没有正确的运行时。如果是这样,请给你的平台信息。

前段时间我和静态的C++扩展混淆了,我可以证明-x clc++确实有效。


另外注意,使用这个扩展会使你的代码无法移植,并锁定在AMD兼容设备,因为它是不可能的其他厂商将推出完全相同的扩展本身(如果有的话)。

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

0

新的SYCL Khronos标准为OpenCL平台(包括AMD OpenCL平台)提供了对模板元编程的本地支持。