代码之家  ›  专栏  ›  技术社区  ›  Daniel Quintos López

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

  •  4
  • Daniel Quintos López  · 技术社区  · 6 年前

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

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

    好吧,我在a中有以下简单的类“ 打印机h类 “文件:

    class Printer{
    
        public:
            void print();
    }
    

    文件I有以下几行:

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

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

    谢谢你的帮助

    1 回复  |  直到 6 年前
        1
  •  7
  •   Dithermaster    6 年前

    这里有三件截然不同的事情:

    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编译器进行预传递。