【发布时间】:2015-03-18 06:50:30
【问题描述】:
我有一个形成为 std::vector 的 C++ 输入,我想将它传递给我的 OpenCL 内核(Nvidia 平台)。
但执行以下操作时,我不断收到分段错误:
queue.enqueueReadBuffer(dev_input, CL_TRUE, 0, sizeof(bool) * input.size(), &input);
因此,我尝试将我的 std::vector<bool> 复制到 bool[] 并且一切正常。但是,将向量转换为 C 数组的常用方法(&input[0], input.data()) 根本不起作用。
您对 ReadBuffer 或快速分配给 C 数组有什么建议吗?
谢谢!
【问题讨论】:
-
vector<bool>是“特殊的”。参见例如stackoverflow.com/questions/670308/… -
您的 OpenCL 内核如何知道您输入的内存布局?您正确使用了
sizeof(bool),因此您的 OpenCL 内核知道有多少字节的输入,但它不知道您传递了多少元素。 -
sizeof(bool)是 1,所以它实际上是不需要的,但另外我乘以sizeof(bool) * input.size()。感谢您的帮助!
标签: c++ c++11 vector boolean opencl