是否有可能在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内核中的对象方法不起作用,还有其他想法吗?
提前感谢您的提示!
答案 0 :(得分:9)
我认为OpenCL遵循C99语言规范而不是C ++。 OpenCL is going on的C ++版本的规范。我相信AMD APP已经实现了OpenCL的C ++版本。回到你的问题,我认为最好有一个结构作为C ++和C之间的接口.C ++版本应该是C实现的包装器,如果您迫切需要这样做。
编辑:我无法将其放在评论中,因此将其放在此处。围绕OpenCL的AMD C ++库包括static C++ library和Bolt。
答案 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;