如何在 OpenCL 内核中包含 C++ class

HowTo Include a C++ class in OpenCL kernel

我一直在使用 OpenCL 1.2,但我在使用 OpenCL C++ Wrapper API (https://www.khronos.org/registry/OpenCL/specs/opencl-cplusplus-1.2.pdf) 时遇到了问题。

它没有说明在 kerenel (cl) 文件中包含 class "class MyClass" 的任何限制,我认为这是可能的,因为平台、设备和上下文是 "Classes"(如果不是,那么它的目标是什么?X_X)

好吧,我在“printer.h”文件中有以下简单的 class:

class Printer{

    public:
        void print();
}

并且在 cl 文件中我有以下几行:

#include "printer.h"
__kernel void hello()
{
    Printer myPrinter;
    //myPrinter.print();
}

但是当我在我的 cpp 程序中构建这个内核文件时,它带来了错误:未知类型名称 'class'。我已经阅读了建议使用 SYCL 的 post ,但是,根据标准和包装器,没有其他方法 "easier" 吗?

感谢您的帮助

这里确实存在三个不同的东西:

  1. OpenCL C++ Wrapper API 用于在主机端使用 C++ 调用 OpenCL API。它与设备端的 C++ 内核无关。它可以与您正在使用的 OpenCL 1.2 一起使用。
  2. OpenCL 2.2 将 OpenCL C++ 内核语言 引入核心规范(在 OpenCL 2.1 中可选)。
  3. SYCL 是一个 单源代码 C++ 主机和内核系统,它允许您编写一个代码块来执行主机 API 在后台调用并在设备上调用 C++ 内核。它需要 SYCL 编译器预先通过。