2014-03-24 54 views
0

我一直在嘗試在OpenCL中進行FFT。它爲我這樣的內核工作,這是OpenCL內核的合適內存?

 __kernel void butterfly(__global float2* twid, __global float2* X, 
        const int n,} 
    { 

     /* Butterfly structure*/ 
    } 

我稱這個內核成千上萬次。因此,讀取/寫入全局存儲器需要花費太多時間。 twid(float2)數組只讀取,從不操作,數組X是WRITE類型的數組。

1.這是最合適的內存類型嗎? 2.如果我使用本地內存,是否可以將它作爲參數傳遞給另一個內核,而無需將其複製到全局內存?

我是OpenCL的初學者。

回答

0

本地內存只能在工作組內使用;它不能被其他工作組看到,也不能被其他內核使用。只有全球內存和圖像,並做這些事情。

將本地內存視爲用戶管理的高速緩存,用於加速對工作組內相同全局內存的多次訪問。

0

如果你正在做小塊的FFT,你可能會進入私人內存。否則,正如Dithermaster所說,使用本地內存。另外,我已經實現了一些FFT內核並強烈建議您避免使用蝶形方案,除非您完全確信它。簡單的方案(甚至矩陣乘法)可以顯示更好的結果,因爲矢量化良好的存儲器訪問模式。蝴蝶方案針對順序處理進行了優化。在GPU上它可能表現不佳。

+0

使用優化的蝴蝶,性能甚至超過CUDAFFT!它的運行速度比標準OpenCL-PyFFT快! –

+0

不是專用內存與常量內存相同嗎? –

+1

請顯示優化蝴蝶的OpenCL代碼。 –