2013-11-22 36 views
2

FFTW的文檔說fftw_alloc()確保正確的內存對齊。對於給定的FFTW計劃的輸入/輸出使用堆棧變量是否存在風險? FFTW會運行得慢嗎,還是根本不運行?FFTW - fftw_alloc()是否必要?

例如下面的C代碼不推薦?

int main() 
{ 
    fftw_complex in[1024]; 
    fftw_complex out[1024]; 

    fftw_plan my_plan; 

    my_plan = fftw_plan_dft_1d(1024, in, out, FFTW_FORWARD, FFTW_ESTIMATE); 

    fftw_execute(plan); 
} 

回答

4

從文檔:

http://www.fftw.org/doc/SIMD-alignment-and-fftw_005fmalloc.html

鏈接到與SIMD支持編譯的FFTW庫程序可以 獲得最複雜和R 2c/C2R 變換一個不可忽視的加速。然而,爲了獲得這種加速,傳遞給FFTW的複數(或實數)數據的數組必須在 存儲器(通常爲16字節對齊)中特別對齊,並且通常這種對齊比由所提供的 嚴格得多。通常malloc(等)分配 例程。

爲了保證正確對準了SIMD,因此,如果您 程序是有史以來針對SIMD-使用FFTW,我們建議 分配好自己與fftw_malloc與fftw_free解除分配它 轉換數據鏈接。這些接口和行爲與malloc/free的接口和行爲完全相同,只是對於SIMD FFTW,它們確保返回的 指針具有必需的對齊方式(通過在您的OS上調用memalign或其等效操作)。

「必要」?沒有

「好了嗎?」是的 - 絕對是:)

+0

謝謝。我們在帶有ARM NEON SIMD指令集的Beagleboard xM上使用它。 – bornruffians