我开始倾向于OpenCL,我想从主机缓冲区复制到设备缓冲区并返回另一个主机缓冲区.我正在使用OpenCL的c ++包装器.
我有的是这个:
std::string origBuf("Hello OpenCL");
cl::Buffer::Buffer deviceBuf(context, CL_MEM_READ_WRITE, origBuf.size());
queue.enqueueWriteBuffer(deviceBuf, CL_TRUE, 0, origBuf.size(), &origBuf);
std::string hostBuf("???????????????");
queue.enqueueReadBuffer(deviceBuf, CL_TRUE, 0, origBuf.size(), &hostBuf);
Run Code Online (Sandbox Code Playgroud)
但是,这给了我一个"双重免费或损坏"错误的段错误.我究竟做错了什么?
要获取a中数据的地址string,你需要使用&origBuf[0],而不是&origBuf- 后者给出了std::string对象本身的地址,如果你想访问实际的字符串,这不是你想要的.
对于缓冲区地址的只读版本,您也可以使用origBuf.data(),但这并不是要写入的.
当然,你绝对不能写过目前的信息size().
| 归档时间: |
|
| 查看次数: |
395 次 |
| 最近记录: |