2013-04-18 83 views
0

這個問題是關於cuFFT所需的緩衝區。在用戶指南則記載,cuFFT所需的緩衝區

在最壞的情況下,CUFFT庫 8分配空間*批次* N [0] * .. * N [秩1] cufftComplex或cufftDoubleComplex元件 (其中batch表示將在 平行中執行的變換的數量,rank是輸入數據的維數(參見 多維變換),n []是變換 維的數組),分別用於單精度變換和雙精度變換。

「變換維數組」是什麼意思? cuFFT需要多少緩衝區?我與上面的理解是,它需要至少8倍被FFTed數組的大小,但這樣做沒有意義,我

在此先感謝

丹尼爾

回答

3

變換尺寸的「陣列「是包含每個維度中問題大小的數組,請參閱multidimensional transforms部分以獲取更多信息。

cuFFT正在分配臨時空間來容納中間數據,你引用的文檔部分說這是「最糟糕的情況」,所以它至多不是「至少8倍」。文檔goes on要說:

根據計劃的配置,可以使用更少的內存。 在某些特定情況下,臨時空間分配可以爲1 *批* * [0] * .. * n [rank-1] cufftComplex或cufftDoubleComplex 元素的低 。

所以對於一個N×M的2D單精度變換:

1*N*M*sizeof(cufftComplex) <= space for tmp data <= 8*N*M*sizeof(cufftComplex) 
0

使用cufftGetSize1dcufftEstimate1d給你分配給緩衝區的內存量。該文件說cufftPlan1d給出了最大數量的估計,並提供了一個更精確的估計。

在我的情況下,我使用64和8192點FFT。我得到同樣的問題,緩衝區大小隻分配1 *批量* n [0]個元素。我已經用不同數據量和不同FFT大小進行了測試,並且得到了相同的值。總之,如果您需要確定FFT使用的內存,CuFFT庫提供了一個功能來完成此操作。