【问题标题】:How to use templates with OpenCL?如何在 OpenCL 中使用模板?
【发布时间】:2013-02-20 23:02:59
【问题描述】:

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

warning: ignoring build option: "-x"

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

【问题讨论】:

    标签: c++ templates opencl


    【解决方案1】:

    -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 文档的本地副本以便快速访问。有帮助。

    【讨论】:

      【解决方案2】:

      新的SYCL Khronos 标准在 OpenCL 平台(包括 AMD OpenCL 平台)上提供了对模板元编程的原生支持。

      【讨论】:

        猜你喜欢
        • 2011-05-26
        • 2015-09-07
        • 2013-03-10
        • 2012-09-08
        • 2018-08-29
        • 1970-01-01
        • 1970-01-01
        • 2017-09-11
        • 2011-09-17
        相关资源
        最近更新 更多