2012-06-18 82 views
2

我必須編寫一個OpenCL行進多維數據集實現。OpenCL動態數據結構

Marching Cubes算法需要體積數據並從中創建等值面。 這個過程需要很長時間,所以我必須在OpenCL中寫入n個線程來提高性能。

我已經有代碼,但我的問題是,存儲頂點。據我所知,我需要知道算法將創建多少頂點來分配足夠的內存,但是這個數字是未知的。 有什麼辦法來創建一個像vector或numpy.array動態數據結構與追加功能或類似的東西。

我正在寫python代碼來加載OpenCL __kernel,並且必須對頂點做一些其他的事情,所以它應該可以用python讀取。這個想法是創建一個攪拌器插件。

+2

我不知道你在哪個平臺上,但是如果我正確記得CUDA SDK已經包含Marching Cubes示例(和OpenCL實現)。也許你可以用這個來獲得你實現的靈感。 – Bart

+0

謝謝 - 它真的幫助我! – glethien

回答

1

據我所知,OpenCL不允許任何種類的動態內存管理。 其中一個原因是GPU的工作方式。 OpenCL代碼只能在CPU上工作,而不能在GPU上工作,這不是OpenCL背後的想法。

您可以通過以下方式解決問題:

  • 創造了巨大的內存緩衝區。更大,因爲你可能需要它。
  • 當您有一個新的頂點時,只需將它追加到緩衝區中的最後一個附加位置即可。
  • 繼續如此。

假設您在某個時間點仍然用完內存。在這種情況下,您只需創建一個更大的緩衝區,將舊內存從舊內存複製到新內存並刪除舊內存。

我希望這有助於。