c++ - 如何将字符串转换为 cl_uchar *?

标签 c++ opencl

如何转换(转换)一个字符串

char* password = "C & OpenCL is cool";

cl_uchar *

将其传递给 cl 内核函数

__kernel void foobar(__global const uchar * input_data) {...}

?

最佳答案

您不能直接将 char 指针传递给 OpenCL 内核,因为内核不知道如何处理该指针。您在内核中拥有的是指向 __global 内存的指针。因此,您需要做的是创建一个 OpenCL 缓冲区对象,将字符串写入其中,并将该缓冲区的句柄作为参数传递给内核。如果您不知道这是如何完成的,请查阅适当的 OpenCL 学习资源。在 C++ 中,它类似于这样:

cl::Buffer input_buffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, 
                        sizeof(cl_uchar) * (strlen(password)+1), password);
...
kernel.setArg(0, input_buffer);

同样,您不必实际将 char* 转换为 const cl_uchar*,因为您只是将其复制到缓冲区中,并且在支持的平台上可以假定 OpenCL charcl_uchar 具有相同的位表示,但对于字符串文字,您应该使用 const char* 而不是 char* 排在第一位。

顺便说一句,因为数据在内核中是 const 并且字符串可能没有那么大,您可能需要考虑使用 __contant 而不是 __global 内存,这可能具有性能优势(至少在较旧的硬件上,其中 __constant 内存被缓存而 __global 没有)。

关于c++ - 如何将字符串转换为 cl_uchar *?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17501224/

相关文章:

c++ - 允许碰撞的极快哈希函数

c++ - 防止构造函数参数隐式转换为外部库类型

c++ - LoadLibraryA 和相对路径

printf - cl_ulong 的 printf 格式说明符是什么

c++ - 以编程方式获取 GPU 内存使用情况

c++在使用串口发送之前将十六进制转换为ASCII

c++ - 有关 Windows 7 编程的书籍

c - OpenCL 缓冲区和数据计算

c++ - 在 OpenCL 内核中声明数组不起作用。 (clBuildProgram(-11))

c++ - 是否有 OpenCL std::queue 等价物