2能不用cuda_cuda学习-1-cufft的使用
一、函數的定義與執行
一般的函數定義 void function();
cuda的函數定義 __global__ void function();
global前綴表明這個函數在哪里執行,由誰呼叫
global:主機呼叫,設備執行
host:主機呼叫,主機執行
device:設備呼叫,設備執行
執行一般c函數 funtion();
執行cuda函數 function<<>> ();
在GPU上面執行函數可以自定分配grid和線程,grid包含線程,因為是并列執行,因此如果內容一樣數據的生成很多是不分前后的。
二、參數的傳入
三、FFT的CPU實現
2007年6月,NVIDIA公司推出了CUDA (Compute Unified Device Architecture),CUDA 不需要借助圖形學API,而是采用了類C語言進行開發。同時,CUDA采用了統一處理架構,降低了編程的難度,同時,NVIDIA GPU引入了片內共享存儲器,提高了效率。這兩項改進使CUDA架構更加適合進行GPU通用計算。
3.1 一維FFT基2算法的實現
(1) 聲明雙精度復數的結構體(2) 通過冪數獲得快速傅里葉變換的長度,并初始化(3) 計算旋轉因子(4) 采用頻率分解法進行蝶形運算:(5) 蝶形運算全部完成后,對結果進行整序,從而得到正確的輸出順序3.2 二維FFT基2算法的實現
通過兩次調用一維快速傅里葉變換即可實現二維快速傅里葉變換
(1) 計算進行傅里葉變換的寬度、高度,以及垂直方向上、水平方向上的迭代次數(2) 兩次調用一維快速傅里葉變換四、FFT的GPU實現
對一維或多維信號進行離散傅里葉變換的FFT變換自身具有可“分治”實現的特點,因此能高效地在GPU平臺上實現。CUDA提供了封裝好的CUFFT庫,它提供了與CPU上的FFTW庫相似的接口,能夠讓使用者輕易地挖掘GPU的強大浮點處理能力,又不用自己去實現專門的FFT內核函數。使用者通過調用CUFFT庫的API函數,即可完成FFT變換。
常見的FFT庫在功能上有很多不同。有些庫采用了基2變換,只能處理長度為2的指數的FFT,而其他的一些可以處理任意長度的FFT。CUFFT4.0提供了以下功能:
(1) 對實數或復數進行一維、二維或三維離散傅里葉變換;
(2) 可以同時并行處理一批一維離散傅里葉變換;
(3) 對任意維的離散傅里葉變換,單精度最大長度可達到6400萬,雙精度最大長度可達到12800萬(實際長度受限于GPU存儲器的可用大小);
(4) 對實數或復數進行的FFT,結果輸出位置可以和輸入位置相同(原地變換),也可以不同;
(5) 可在兼容硬件(GT200以及之后的GPU)上運行雙精度的變換;
(6)支持流執行:數據傳輸過程中可以同時執行計算過程。
4.1一維FFT算法的CUDA實現
4.2二維FFT算法的CUDA實現
二維FFT算法實現中,同一維FFT不同的是:
(1) 輸入參數:沒有BATCH,增加了NY。NX為行數,NY為列數;
(2) FFT的正變換的輸入位置和輸出位置不同。
流程:
1.使用cufftHandle創建句柄
2.使用cufftPlan1d(),cufftPlan3d(),cufftPlan3d(),cufftPlanMany()對句柄進行配置,主要是配置句柄對應的信號長度,信號類型,在內存中的存儲形式等信息。
cufftPlan1d():針對單個 1 維信號cufftPlan2d():針對單個 2 維信號cufftPlan3d():針對單個 3 維信號cufftPlanMany():針對多個信號同時進行 fft3.使用cufftExec()函數執行 fft
4.使用cufftDestroy()函數釋放 GPU 資源
cufftPlan1d():
- 第一個參數就是要配置的 cuFFT 句柄;
- 第二個參數為要進行 fft 的信號的長度;
- 第三個CUFFT_C2C為要執行 fft 的信號輸入類型及輸出類型都為復數;CUFFT_C2R表示輸入復數,輸出實數;CUFFT_R2C表示輸入實數,輸出復數;CUFFT_R2R表示輸入實數,輸出實數;
- 第四個參數BATCH表示要執行 fft 的信號的個數,新版的已經使用cufftPlanMany()來同時完成多個信號的 fft。
cufftExecC2C():
- 第一個參數就是配置好的 cuFFT 句柄;
- 第二個參數為輸入信號的首地址;
- 第三個參數為輸出信號的首地址;
- 第四個參數CUFFT_FORWARD表示執行的是 fft 正變換;CUFFT_INVERSE表示執行 fft 逆變換。
詳細可見:CUDA學習筆記1:第一個CUDA實例 - 愛國吶 - 博客園
總結
以上是生活随笔為你收集整理的2能不用cuda_cuda学习-1-cufft的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简述osi参考模型各层主要功能_计软考研
- 下一篇: androidstudio sqlite