前一章簡述了 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