最近我在OpenCL上遇到了一个问题。 如果我使用标志CL_MEM_COPY_HOST_PTR创建一个大的cl :: Buffer(让它说它的1920 * 1080 * 3字节大)。每当我执行enqueueWriteBuffer时,它都会与
崩溃select * from mytable
where
ctable.Id IN (CASE
WHEN ISNULL(@ids,'') <> '' THEN (select id from @mylist)
ELSE ctable.Id
END)
很奇怪。使用CL_MEM_ALLOC_HOST_PTR。它在enqueueWriteBuffer上给了我错误-38(CL_INVALID_MEM_OBJECT)。还有CL_MEM_USE_HOST_PTR,一切都很好。
但是,不应该所有三个CL_MEM_COPY / USE / ALLOC_HOST_PTR做同样的工作来创建工作缓冲区吗?为什么一个工作和其他失败?我错过了什么?
编辑: 这里是源代码(example / hugeData.cpp)