2016-05-06 30 views
0

因此,在OpenCL中編寫內核非常簡單,只需要少量輸入Image3D輸出一些輸出Image3D並對它們執行一些操作即可。只要所有輸入和輸出圖像都適合GPU內存,就很容易。現在通常情況並非如此,因爲隨着您的分辨率的提高,Image3D的規模不斷擴大。 因此,給定一個內核可以讓我們說4個輸入圖像和3個輸出圖像,那麼在適合GPU的區塊中處理它們的最佳選擇是什麼。是否有自動流式傳輸/緩衝的形式?如何使用OpenCL處理GPU內存過大的圖像

最佳這裏是指:1)快速,2)小用戶編寫的代碼(兩個)

+0

嘗試use_host_ptr並計算1/10大小的塊,並在需要時添加僅用於內核的1/10大小的臨時設備端緩衝區。 –

回答

1

一個很好的組合你會解決這個問題的3D圖像則解決了2D圖像相同的方式:使用瓷磚。當你沒有足夠的RAM用於大圖像時,Photoshop做了這個工作;它會從磁盤中引入磁貼,處理它們,然後寫出結果。遍歷圖像。對於3D,您可以使用適合GPU進行處理的3D貼圖(小立方體)。

根據要完成的圖像處理類型,圖塊引擎可能很簡單也可能很複雜。此外,一些算法(如遞歸高斯模糊)需要訪問所有源像素,因此您可能需要存儲中間結果,加載更多的圖塊,並運行更多的內核以在整個圖塊集合中工作。