我希望有人能帮助我。
我需要使用类似这样的东西将表示矩阵的长数组传递给opencl内核:
memObjects[2] = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
sizeof(double) * dets_numel, dets, NULL);
在内核中我想根据某些条件删除矩阵的某些行,然后使用类似的东西将其读回主机:
errNum = clEnqueueReadBuffer(commandQueue, memObjects[2], CL_TRUE, 0,
dims1[0] * dims1[1] * sizeof(double), dets,
0, NULL, NULL);
有没有办法让程序的主机部分知道数组(矩阵)的确切大小,而不执行另一个计算大小的内核并将结果从缓冲区读回主机?
答案 0 :(得分:1)
也许有针对您的问题的解决方法,但总的来说 - 不会。您要么隐式找到新的大小,要么回读显式值。
答案 1 :(得分:0)
我认为您无法更改存储设备内存的大小,但您可以只写入其中的一部分并将该部分读回主机:
clEnqueueReadBufferRect()
功能进行第二次
一部分。