• 沒有找到結果。

平行處理架構

前一章簡述了 dynamic programming 及 bit-parallelism 的運作方式與 優缺點。本研究計畫透過實現於多核心 CPU 與 GPU 加速是此兩種演算 法,而在進行加速之前,本章將探討平行加速的方式有哪些。

以平行架構而言,dynamic programming 的可行性較 bit-parallelism 低,原因在於填表的順序與運算不獨立。反觀 bit-parallelism 在比對長度 為 m 之字串樣式時,只需計算(𝑚 + 𝑘)個位置即可得知結果。因此在 平行的架構下,本研究選取後者為主要加速的對象。

平行處理架構分為兩種,一種為任務並行(task parallel),另一種為 數據並行(data parallel)。本章分為五小節,分別為任務並行、邊界偵測 的問題、數據並行 I、數據並行 II 與本章小結。說明如下:

第一節 任務並行

任務並行就是將一個龐大的工作,分為許多互相獨立的任務單元,

各別運算後,在統整結果之運算;如圖 3-1,原輸入字串不需分段,而 每個執行緒分配不同字串樣式,各別進行比對,此種並行方式乃適用於 多個字串樣式須比對的情況。而 GPU 提供使用者同一時間宣告大量的 執行緒做簡短的工作,在執行緒越多的時候,效能越顯著,故 GPU 並 不適用此並行模式。

18

圖 3-1 任務並行架構

第二節 邊界偵測的問題

有別於前一節的任務並行架構,另一種並行架構即為數據並行,其 中,數據並行又可以分為兩種方式,本研究稱之為數據並行 I 與數據並 行 II。

數據並行的平行架構,不論是數據並行 I 還是數據並行 II 都必須將 整個輸入文字切斷分配給不同的執行緒同時進行比對。因此,數據並行 必須特別注意區段與區段的邊界偵測問題(boundary detection problem), 在每段被切割的數據中,要留意是否有字串樣式剛好被邊界所截斷,圖 3-2 即為邊界偵測問題發生的情形。

圖 3-2 邊界偵測問題

19

在固定字串比對時,要防止此類問題產生,會將每條執行緒所負責 的區段往後延伸 m 個位置;在比對多個不同長度的字串樣式時,則延伸 其中長度最長的字串樣式之長度。然而近似字串比對比起固定字串比對 又需考慮 edit distance,因此 bit-parallelism 在防止邊界偵測時,必須往 後延伸(m+k)個位置,考慮是否涵蓋了容許的 edit distance 的範圍。

舉例來說,給定一個長度為 m 的字串樣式,與 edit distance 為 k,則 在進行近似字串比對時,若在長度(m+k)中,已 match(m+k)個字元,

則可回報 match;倘若在長度(m+k)中,只 match(m-k-1)個字元,

則需要繼續比對後面的位置,而在此位置上,極有可能發生邊界偵測的 問題。圖 3-3 中,倘若只往後延伸(m+1)個位置,則在區段 2 的第二 個位置上發生一個訊息遺漏;如果延伸(m+k)個位置,則可以避免此 問題發生。

圖 3-3 防止邊界偵測問題

第三節 數據並行 I

數據並行 I 是在處理龐大資料量時,將資料量分成許多單元並分配

20

給不同的執行緒,每條執行緒皆獨力完成自己的工作(見圖 3-4)。圖 3-4 中,將輸入字串切割分段,各條執行緒分別比對所有的字串樣式,而每 條執行緒需負責的長度如 v 所示:

v. 輸入字串長度 +(總執行緒數量 – )

總執行緒數量 + 字串樣式長度 +

在運算式 v 中,先加上了總執行緒數量-1 後在相除,是為了避免商 數為 0。相除後面加上字串樣式長度與 edit distance 是為了防止邊界問題 產生。

圖 3-4 數據並行 I

第四節 數據並行 II

數據並行 II 則是給予輸入文字中每個位置一條執行緒 Xi,每個執行 緒必須負責比對所有的字串樣式,而所負責的長度為(m+k)個位置。

圖 3-5 即是數據並行 II 的範例。

21

圖 3-5 數據並行 II

第五節 本章小結

採取數據並行架構,可以使一個龐大的工作,透過多執行緒分工,

變成運算簡短的小工作,相較於任務平行架構,數據並行架構較適合使 用於 GPU 的運作中。故本研究在 GPU 上,分別實現數據並行 I 與數據 並行 II 於 bit-parallelism,分析其成效的差異。

22

23

相關文件