我正在尝试将字符串传递给OpenCL内核。这是我的C++代码的缩写:

std::string a = "abcd";
char *aChar = new char[a.size()+1];
aChar[a.size()] = 0;
memcpy(aChar, a.c_str(), a.size());

cl::Buffer serverKeyBuffer(context, CL_MEM_READ_ONLY | CL_MEM_HOST_READ_ONLY, sizeof(char) * a.size(), aChar);

内核的签名是:
__kernel void MyKernel(__global float* rollNumber, __global char* a)

我不断收到-51(CL_INVALID_ARG_SIZE)。不太确定为什么大小无效

最佳答案

您正在将serverKeyBuffer传递给setArg对吗?传递缓冲区参数(arg_sizeclSetKernelArg参数)的正确长度是sizeof(cl_mem)(通常== sizeof(void *))-而不是缓冲区基础存储的大小。不幸的是,我对C++ API及其如何处理参数的了解不多。

关于c++ - 将std::string传递给OpenCL内核,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47896646/

10-11 22:53
查看更多