OpenCL 内核参数中的字符***?
Char*** in OpenCL kernel argument?
我需要将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 功能,您可以在主机和内核代码之间传递指针值,但您仍然需要确保以适合此方式分配内存。
我能想到的一个选项,请记住我对你的程序的其余部分一无所知,如下:
- 为所有字符串创建一个 OpenCL 缓冲区。将所有字符串所需的字节数相加。(可能包括 NUL 终止,具体取决于您要执行的操作(
- 创建一个缓冲区来查找字符串开始偏移量(以及可能的长度(。看起来你有 2 维查找(嵌套向量(,所以你如何布置它将取决于你的内部向量(第二维(是否都相同。
- 将字符串背靠背写入第一个缓冲区,在第二个缓冲区中记录起始偏移量(如有必要,还可以记录长度(。
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 比较字符数组
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- OpenCL 内核参数中的字符***?
- 库达如何将字符**从内核复制到主机
- 在 CUDA 内核中使用字符变量是否会受到惩罚