並行快速傅里葉變換

串行算法回顧

快速傅里葉變換(FFT)的並行算法中使用了蝶形連接網絡。

並行算法

將n個處理器排成 的二維網孔連接網絡,假設輸入序列 已經存放在了各個處理器中。

下面以16點變換來解釋這個問題,連成的網絡及編號如下圖所示:

根據快速傅里葉變換的算法,我們來研究這16個點計算時四次循環的具體執行情況。

  1. 同一列間隔一行的元素運算。
  2. 同一列間相鄰行的元素運算。
  3. 同一行間隔一列的元素運算。
  4. 同一行間相鄰列的元素運算。

由上面的算法執行過程,我們發現,數據交換只在同一行或同一列之間的節點間進行。如果我們在第一,二步循環之後對網孔中的數據進行矩陣轉置,那麼就可以只在同一列節點之間進行運算。

如果我們按超立方體連接格雷碼將待變換點列填入,那麼我們發現,數據交換將只在相鄰節點間進行。因此數據通信花費恆為O(1)。

算法複雜度分析

可擴放性分析

首先,我們設消息傳遞並行計算機中通信模型使用的是Store-and-forward而不是cut-through模型。下面令 表示通信開銷, 表示通信開始時間, 表示傳送一個的通信時間, 表示數據每一跳的延遲, 表示第l次循環時的開銷,而 表示進行一個單位運算的時間。p為處理器數,d=log(p),n為待變換的序列大小。 那麼我們有公式:

 

有這個公式,我們可以得出:

  1. 在二維網孔上的等效率標準函數為: 
  2. 在超立方體上的等效率標準函數為: 
  • 參考文獻:The Scability of FFT on Parallel Computers, Anshul Gupta and Vipim Kummar。

參閱