【问题标题】:Are there OpenCL 2.2 features, which are available in OpenCL C++, but not available in OpenCL C?是否有 OpenCL C++ 中可用但 OpenCL C 中不可用的 OpenCL 2.2 功能?
【发布时间】:2017-04-21 10:06:41
【问题描述】:

OpenCL 2.1 和 2.2 除了传统的 OpenCL C 内核语言外,还引入了 OpenCL C++ 内核语言。我必须在支持 C 但不支持 C++ 的环境中使用 OpenCL。除了 C++ 语法之外,是否有 OpenCL C++ 中可用但 OpenCL C 中不可用的 OpenCL 2.2 功能?

我是否必须使用 C++ 编译器(编写 C++ 主程序)才能使用 OpenCL C++ 内核语言?我的理解是,一些 OpenCL 实现包括一个有限的 C++ 编译器来处理 OpenCL C++ 内核语言。

【问题讨论】:

  • 我不知道添加的功能 - 您必须查看规格;但它是 C++ 代码,所以除非你要去工作;您将使用 C++ 编译器。

标签: c++ c opencl


【解决方案1】:

我没有尝试过,但我认为您不需要 C++ 编译器来在 OpenCL 2.1/2.2 中使用 C++ 内核语言,因为您只是将源代码提交给驱动程序进行编译(使用它是内置的C++ 编译器)。当然,你的宿主程序必须是 C,而不是 C++。

【讨论】:

  • 它是怎么做的?当 C 编译器遇到 kernel 关键字后跟 C++ 代码时会发生什么?
  • @PaulJurczak 我们不能在 OpenCL 中混合主机代码和内核代码。
  • 在 OpenCL 中,主机代码和内核代码是分开的,因此您可以拥有 C 主机代码和 C++ 内核代码。在 SYCL 中,它们被组合在一起;您有一个用于主机和内核代码的代码模块。但你没有使用它。
  • @Dithermaster 所以第一次编译通过源代码将一些文件发送到 C 编译器,将其他文件发送到 OpenCL 编译器,对吗?是否有文档描述它是如何完成的?
【解决方案2】:

要构建 GPU OpenCL 2.1 代码,OpenCL 编译器必须支持 C++。您必须至少在 GPU 端支持 C++(自动,因为它是包含它的 OpenCL 编译器)。

除此之外,您的主机代码可以是 C 代码。

【讨论】:

    猜你喜欢
    • 2012-05-19
    • 2014-06-15
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    相关资源
    最近更新 更多