2012-12-11 95 views
0

我希望有人能帮助我解决这个问题。更改OpenCL内核中数组的大小

我需要通过使用这样的事情表示矩阵在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); 

有没有办法让程序的主机部分知道数组(矩阵)的确切大小,不执行另一个内核,将计算的规模和阅读从缓冲区返回到主机T'

+0

即使你找到了一个工作解决方案,你最好不要在内核中执行它。对于线性CPU而言,这比并行GPU更好。 – Daniel

回答

1

也许有专门针对您的问题的解决方法,但总的来说 - 不。您要么隐式找出新的大小,要么回读显式值。

0

我认为你不能改变存储设备内存的大小,但你可以写上只是其中的一部分和阅读部分回主机:

  • 在第一部分,你应该根据你想要的,在你的内核上做一点不同的映射。
  • 尝试使用第 部分的clEnqueueReadBufferRect()函数。