我有一个在英特尔平台上运行的OpenCL C ++代码。我确实知道在内核端的结构中不接受指针。但是,我有一个使用其中的自引用指针选项的类。现在,我可以使用一个结构并为主机端的结构复制相同的结构,但我无法在设备端执行相同的操作。
例如如下:
Class Classname{
Classname *SameClass_Selfreferencingpointer;
}
On the Host side I have done the same for the structure as well:
struct Structurename{
Structurename *SameStructure_Selfreferencingpointer;
}
有人可以为设备方提供此实施的替代选项吗? 感谢您提前提供任何帮助。
答案 0 :(得分:1)
由于opencl设备中没有malloc,并且结构体在缓冲区中用作结构数组,因此可以添加它的索引,以便它知道它在数组中的位置。您可以在内核之前分配一个大缓冲区,然后使用原子函数来增加伪malloc指针,就好像它是从缓冲区分配一样,但只是返回一个指向最后一个整数的整数"已分配"结构索引。然后,主机端将只使用索引而不是指针。
如果结构对齐成为主机和设备之间的问题,您也可以添加字段索引。例如字段A的起始字节,字段B的起始字节,全部压缩为单个4字节整数,用于具有除索引之外的4个已使用字段的结构。
也许您可以添加预处理阶段:
也许对面更好
这需要您的类及其在主机+设备端的复制结构。
您还应该寻找" sycl api"。