2012-12-11 24 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()函數。