如何在OpenCL内核中包含一个C++类

Dan*_*pez 4 c++ opencl

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

它没有说明在kerenel(cl)文件中包含类"class MyClass"的任何限制,我认为它是可能的,因为Platform,Device和Context是"Classes"(如果没有,那么它的目标是什么呢? ?X_X)

好吧,我在" printer.h "文件中有以下简单类:

class Printer{

    public:
        void print();
}
Run Code Online (Sandbox Code Playgroud)

cl文件中,我有以下几行:

#include "printer.h"
__kernel void hello()
{
    Printer myPrinter;
    //myPrinter.print();
}
Run Code Online (Sandbox Code Playgroud)

但是当我在我的cpp程序中构建这个内核文件时,它会带来错误:未知类型名称'class'.我已经阅读了将文章传递给英特尔Opencl的内核,建议使用SYCL,但是,根据标准和包装器,没有其他方法"更容易"吗?

谢谢你的帮助

Dit*_*ter 7

这里有三个不同的东西:

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