我可以在OpenCL内核中嵌入C ++类吗?

时间:2011-02-17 13:04:37

标签: c++ object opencl

是否有可能在OpenCL内核中使用自定义的C ++类? 它应该像这样工作:

#include "element.cpp"
__kernel void do_something(__global element* input, __global element* output);
{
    int index = get_global_id(0);
    output[index] = input[index].update(index);
}

这很有趣,因为您可以指定之后必须在element :: update(int no)中完成的工作。

我没有让它发挥作用。这就是OpenCL-Compiler告诉我的:

  

未知类型名称'class'

在CUDA中这是有效的。如果OpenCL内核中的对象方法不起作用,还有其他想法吗?

提前感谢您的提示!

3 个答案:

答案 0 :(得分:9)

我认为OpenCL遵循C99语言规范而不是C ++。 OpenCL is going on的C ++版本的规范。我相信AMD APP已经实现了OpenCL的C ++版本。回到你的问题,我认为最好有一个结构作为C ++和C之间的接口.C ++版本应该是C实现的包装器,如果您迫切需要这样做。

编辑:我无法将其放在评论中,因此将其放在此处。围绕OpenCL的AMD C ++库包括static C++ libraryBolt

答案 1 :(得分:2)

没有。 OpenCL语言扩展了C99,因此不支持C ++关键字和功能,例如: “类”。

如果您要应用的代码是C ++和OpenCL,即在两者的公共子集中,您可能会有类似的内容

element update(element in) { ... ; return result; }

并根据需要在OpenCL或C ++中调用它,例如

output[index] = update(input[index]);

前提是该元素是结构,而不是非C类型的字段。

通常,OpenCL的输入和输出必须是简单的结构或数组,而不是类。

答案 2 :(得分:2)

不,其他人告诉你OpenCL基于C99,因此你可以使用像

这样的结构
typedef struct{
   float mini;
   int pos;
}A;