如何转换(转换)一个字符串
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 char
和 cl_uchar
具有相同的位表示,但对于字符串文字,您应该使用 const char*
而不是 char*
排在第一位。
顺便说一句,因为数据在内核中是 const
并且字符串可能没有那么大,您可能需要考虑使用 __contant
而不是 __global
内存,这可能具有性能优势(至少在较旧的硬件上,其中 __constant
内存被缓存而 __global
没有)。
关于c++ - 如何将字符串转换为 cl_uchar *?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17501224/