如何在OpenCL内核

时间:2018-01-15 22:28:32

标签: 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();
}

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

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

但是当我在我的cpp程序中构建这个内核文件时,会出现错误:未知类型名称'class'。我已经阅读了建议使用SYCL的帖子Passing Class to a Kernel in Intel Opencl,但是,根据标准和包装器,没有其他方法“更容易”吗?

感谢您的帮助

1 个答案:

答案 0 :(得分:7)

这里有三个不同的东西:

  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编译器预先通过。