【发布时间】:2016-01-23 23:12:05
【问题描述】:
我希望有人可以帮助我。
我需要使用这样的方法将表示矩阵的长数组传递给 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);
有没有办法让程序的主机部分知道数组(矩阵)的确切大小,而无需执行另一个内核来计算大小并将结果从缓冲区读取回主机?
【问题讨论】:
-
即使你找到了一个可行的解决方案,你最好不要在内核中这样做。这对于线性 CPU 来说是比并行 GPU 更好的任务。
标签: opencl