OpenCL 内核参数中的字符***?



我需要将vector<vector<string>>传递给内核 OpenCL。最简单的方法是什么?传递char***会给我一个错误:

__kernel void vadd(
__global char*** sets,
__global int* m,
__global long* result)
{}

错误: clBuildProgram(CL_BUILD_PROGRAM_FAILURE(

在 OpenCL 1.x 中,这种事情基本上是不可能的。您需要转换数据,使其适合单个缓冲区对象,或至少适合固定数量的缓冲区对象。主机上的指针在设备上没有意义。(使用 OpenCL 2 的 SVM 功能,您可以在主机和内核代码之间传递指针值,但您仍然需要确保以适合此方式分配内存。

我能想到的一个选项,请记住我对你的程序的其余部分一无所知,如下:

  1. 为所有字符串创建一个 OpenCL 缓冲区。将所有字符串所需的字节数相加。(可能包括 NUL 终止,具体取决于您要执行的操作(
  2. 创建一个缓冲区来查找字符串开始偏移量(以及可能的长度(。看起来你有 2 维查找(嵌套向量(,所以你如何布置它将取决于你的内部向量(第二维(是否都相同。
  3. 将字符串背靠背写入第一个缓冲区,在第二个缓冲区中记录起始偏移量(如有必要,还可以记录长度(。

最新更新