2012-10-09 63 views
0

我正在編寫一個圖像處理程序,並試圖使用OpenCLTemplate實現gpgpu和opencl。在完成教程之後,我已經想出瞭如何讓我的代碼運行,但我遇到了更大圖像的問題。我通過將圖像分成塊並通過代碼運行來解決了這個問題,但我想這樣做是爲了不用設置一定數量的塊來分割它,而是讓它確定所需的最大內存量並將圖像分割成許多部分來運行代碼。在opencltemplate中執行內核時的內存使用情況

雖然我遇到的問題是,我不知道究竟有多少內存被扔在GPU上,以及如何弄清楚。下面是我正在使用的代碼,是否有可能解釋如何處理這裏的內存或關於在哪裏尋找的建議。

我已經瀏覽了opencltemplate文檔無濟於事,不再知道去哪裏看。

CLCalc.Program.Compile(openCLInvert); 
CLCalc.Program.Kernel kernel = new CLCalc.Program.Kernel("Filter"); 
CLCalc.Program.Variable CLData = new CLCalc.Program.Variable(Data); 

float[] imgProcessed = new float[Data.Length]; 

CLCalc.Program.Variable CLFiltered = new CLCalc.Program.Variable(imgProcessed); 
CLCalc.Program.Variable[] args = 
    new CLCalc.Program.Variable[] { CLData, CLFiltered }; 

int[] test = new int[] { imageData.Width, imageData.Height }; 

float size = 0; 
for (int x = 0; x <= 1; x++) 
{ 
    size += args[x].Size; 
} 

kernel.Execute(args, test); 
CLCalc.Program.Sync(); 

如上所示,我可以找到用作參數的大小數量,但我仍然不知道總內存用量是多少。

回答

0

應用程序正在使用的內存量將是變量Data變量的大小加上變量imgProcessed的大小。

因此數據正在使用的應用程序的數量將因此:

sizeof(float) * imgProcessed.length + sizeof(typeof(Data)) * Data.length 

這是因爲所有的數據被當你撥打電話一樣

CLCalc.Program.Variable CLData = new CLCalc.Program.Variable(Data); 

在設備上分配在這種情況下,整個數據陣列正在寫入您的設備內存。