專利名稱:基于gpu的序列比對算法的比對結果處理方法
技術領域:
本發(fā)明涉及ー種序列比對結果的處理方法,具體涉及ー種基于GPU的Smith-Waterman序列比對算法的比對結果處理方法。
背景技術:
Smith-Waterman算法是生物信息學研究中序列比對的核心算法之一。算法由打分和回溯兩部分組成,打分是為了獲取序列之間的相似程度,回溯是為了尋找序列之間的最佳匹配片段。如果序列間具有足夠的相似性,就推測序列間可能有共同的進化祖先。但相似性高并不一定來自同一進化祖先,因此需辨別序列之間的同源性,尋找序列間的匹配片段。隨著生物序列數(shù)據(jù)庫規(guī)模的迅速增長,序列比對研究對計算能力的需求越來越高,使用傳統(tǒng)的CPU進行序列比對已不能滿足需要,于是圖形處理器(GPU)、現(xiàn)場可編程門陣列(FPGA)等各種加速器被應用到序列比對研究當中。近年來,國內外學者在基于GPU加速Smith-Waterman算法方面做了大量研究エ作,主要集中在打分部分,即Smith-Waterman算法被簡單地用作序列篩選的工具,而忽略了其用于獲取最佳匹配片段的價值。如圖I所示,其主要包括以下步驟=CPU讀取用戶輸入的待查詢序列Q、子矩陣S、數(shù)據(jù)庫序列D ;CPU將Q傳輸?shù)紾PU的常數(shù)內存,并將S和D傳輸?shù)紾PU的紋理內存;GPU并行實現(xiàn)Smith-Waterman算法;GPU傳回分值數(shù)組score ロ給CPU。打分部分為了節(jié)省存儲空間,通常不寫回比對結果(即分值矩陣),以容納更多的序列進行比對。而回溯部分是基于比對結果進行的,因受限于GPU顯存容量、存取開銷,也缺乏ー種高效的比對結果處理方法;因此,現(xiàn)有的研究工作中都沒有在GPU中實現(xiàn)大規(guī)模、快速的比對結果回溯。CPU執(zhí)行回溯部分的效率又明顯不如GPU,從而使回溯的執(zhí)行時間成為整個算法的瓶頸。
發(fā)明內容
本發(fā)明的目的在于提供一種基于GPU的序列比對算法的比對結果處理方法,該方法能實現(xiàn)Smith-Waterman算法快速打分,且能高效直觀地寫回比對結果,從而為回溯部分獲取最佳匹配片段提供分值矩陣。本發(fā)明是通過以下技術方案實現(xiàn)的一種基于GPU的序列比對算法的比對結果處理方法,包括以下步驟初始化GPU的塊大小為Bs,并確定線程數(shù)量為N,用戶輸入的待查詢序列Q的長度為qlen,GPU在共享內存中建立分值緩沖區(qū)score [Bs]和比對結果緩沖區(qū)val[Bs*17] [2],GPU初始化線程號為tid, score []為零,val [][]為零,緩沖器標記p = I,段計數(shù)器s = 0,線程號tid小于線程數(shù)量N的所有線程在紋理內存中查找相應的數(shù)據(jù)庫序列,并將數(shù)據(jù)庫序列的序列號sid設置為線程號tid,設置計數(shù)器i = 0,每個線程分別取出相應數(shù)據(jù)庫序列中的第i個字符,設置計數(shù)器j = s,每個線程分別取出待查詢序列Q中的第j個字符,每個線程根據(jù)Smith-Waterman算法對相應數(shù)據(jù)庫序列中的第i個字符和待查詢序列Q中的第j個字符進行計算,以得到val [] [p],每個線程分別求score [tid]和val [] [p]兩者的最大值,并用最大值替換score [tid],判斷j是否大于或等于s+15或qlen,如果j大于或等于s+15或qlen,則設置計數(shù)器m = 0,線程數(shù)量N中的姆16個線程將val [m*16] [p]到val [m*16+15][p]的16個元素聯(lián)合寫回GPU顯存,完成一次聯(lián)合寫回,判斷m是否大于或等于15,如果m大于或等于15,則每個線程分別判斷相應數(shù)據(jù)庫序列是否已沒有字符,如果線程相應數(shù)據(jù)庫序列已沒有字符,則判斷qlen是否小于或等于16,如果qlen小于或等于16,則每個線程分別將score [tid]寫回GPU顯存。本發(fā)明的比對結果處理方法還包括步驟如果j不大于或等于s+15或qlen,則j=j+1,每個線程分別取出待查詢序列Q中的第j個字符。本發(fā)明的比對結果處理方法還包括步驟如果m不大于或等于15,則m = m+1,線程數(shù)量N中的每16個線程將val [m*16] [p]到val [m*16+15] [p]的16個元素聯(lián)合寫回GPU
顯存,完成一次聯(lián)合寫回。本發(fā)明的比對結果處理方法還包括步驟如果線程相應數(shù)據(jù)庫序列還有字符,則P = I-p i = i+1,姆個線程分別取出相應數(shù)據(jù)庫序列中的第i個字符。本發(fā)明的比對結果處理方法還包括步驟如果qlen不小于或等于16,則qlen=qlen-16, s = s+16,重新初始化val []
的所有元素為零,p = 1,姆個線程初始化val [sid*17] [I]為GPU顯存中相應的值,設置計數(shù)器i = O。本發(fā)明具有以下的優(yōu)點和技術效果(I)在GPU的共享內存建立一個ニ維的比對結果緩沖區(qū),緩沖區(qū)內快速切換,從而減少數(shù)據(jù)的存取開銷,盡可能大的利用共享內存存取開銷小的優(yōu)勢。(2)當比對結果充滿緩沖區(qū)吋,16個線程循環(huán)16次聯(lián)合寫回GPU顯存,完全符合GPU顯存聯(lián)合寫回的要求,且使同一條序列的分值矩陣集中在GPU顯存的同一塊區(qū)域,從而得到直觀的分值矩陣,有利于Smith-Waterman算法回溯部分獲取最佳匹配片段。
圖I為現(xiàn)有的Smith-Waterman算法的流程圖。圖2為本發(fā)明基于GPU的序列比對算法的比對結果處理方法的流程圖。
具體實施例方式下面結合附圖和實例對本發(fā)明做進ー步詳細的說明。如圖2所示,本發(fā)明基于GPU的序列比對算法的比對結果處理方法包括以下幾個步驟(I)初始化GPU的塊大小為Bs,并確定線程數(shù)量為N,用戶輸入的待查詢序列Q的長度為qlen ;(2)GPU在共享內存中建立分值緩沖區(qū)score[Bs]和比對結果緩沖區(qū)val[Bs*17];(3) GPU初始化線程號為tid, score []為零,val [][]為零,緩沖器標記p = 1,段計數(shù)器s = 0;(4)線程號tid小于線程數(shù)量N的所有線程在紋理內存中查找相應的數(shù)據(jù)庫序列,并將數(shù)據(jù)庫序列的序列號Sid設置為線程號tid ;(5)設置計數(shù)器i = 0 ;(6)每個線程分別取出相應數(shù)據(jù)庫序列中的第i個字符;(7)設置計數(shù)器j = s ;(8)每個線程分別取出待查詢序列Q中的第j個字符;(9)姆個線程根據(jù)Smith-Waterman算法對相應數(shù)據(jù)庫序列中的第i個字符和待查詢序列Q中的第j個字符進行計算,以得到val [] [p];(10)每個線程分別求SCOre[tid]和val[][p]兩者的最大值,并用最大值替換score[tid];
(11)判斷j是否大于或等于s+15或qlen;若是則轉入步驟(13),否則轉入步驟
(12);(12)設置j = j+1,然后返回步驟(8);(13)設置計數(shù)器m = 0 ;(14)線程數(shù)量N中的每16個線程將val [m*16] [p]到val [m*16+15] [p]的16個元素聯(lián)合寫回GPU顯存,完成一次聯(lián)合寫回;(15)判斷m是否大于或等于15 ;若是則轉入步驟(17),否則轉入步驟(16)。(16)設置m = m+1,然后返回步驟(14);(17)每個線程分別判斷相應數(shù)據(jù)庫序列是否已沒有字符;若是則轉入步驟(19),否則轉入步驟(18);(18)設置 p = 1-p, i = i+1 ;然后返回步驟(6);(19)判斷qlen是否小于或等于16 ;若是則轉入步驟(23),否則轉入步驟(20);(20)設置 qlen = qlen-16, s = s+16 ;(21)重新初始化val[]
的所有元素為零,P=I;(22)每個線程初始化val[sid*17] [I]為GPU顯存中相應的值,然后返回步驟
(5)。(23)每個線程分別將score [tid]寫回GPU顯存。在步驟(7)中,序列號為sid的數(shù)據(jù)庫序列表示為Dsid,則Smith-Waterman算法公式表示如下
廣0
剛剛=腿 S;;^rSl4Q)
-gap其中,H(i,j)表示數(shù)據(jù)庫序列Dsid前i個字符、待查詢序列Q前j個字符的比對結果或分值,S表示子矩陣,S (Dsidi, Qj)表示數(shù)據(jù)庫序列Dsid第i個字符、待查詢序列Q第j個字符在子矩陣S中對應的值,gap表示罰分。實例為了驗證本發(fā)明的可行性和有效性,在下列表I所示的實驗配置環(huán)境下執(zhí)行編寫的計算機程序,對發(fā)明進行測試,測試結果如下列表2所示。表I :實驗配置環(huán)境CPUIntel Core i7, 2.67GHz
硬件配置內存4 GB顯卡NVIDIA GeForce GTX 295 操作系統(tǒng) LinuxRedHat Enterprise 5.5 軟件配置 CUDA23在表2中,由于CPU實現(xiàn)的Smith-Waterman算法效率很低,因此本發(fā)明的比較對象是得到廣泛運用的實現(xiàn)于GPU上的CUDASW++2. O。本發(fā)明提供的Smith-Waterman算法,除了能得到序列比對的分值之外,比對結果全部寫回GPU顯存,并傳回CPU作結果正確性驗證。而CUDASW++2. 0只實現(xiàn)了序列比對的 打分部分,比對結果并不寫回GPU顯存。在表2中,計算速度單位是更新千兆單元姆秒(Giga Cell Updates PerSecond,簡稱GCUPS);子矩陣使用BL0SUM62;罰分為10。通過比較不同長度序列的計算速度,發(fā)現(xiàn)本發(fā)明都有良好的加速比,可見本發(fā)明在保證寫回正確的比對結果到GPU顯存的同時,具有良好的運行效率。表2 :測試結果
'比對結果+寫M比對結果寫M~本發(fā)明
數(shù)據(jù)庫序列數(shù)~本發(fā)明本發(fā)明比對結果
查詢序W++
量方法方法與CPU比
列長度(GCUPS カロ速比 カロ速比
(總長度)) (GCU (GCUP 對結果一
PS)S)致性
宅今一
50 1000 (50,188) 0.0070.571.4 0.208 29.7
致
1000"完全一
1000.032 0.692 21.6 0.247 7.7
(100,262)致
1000"完全一
5000.661 0.877 1.33 0.8781.3
(499,777)致以上所述僅是本發(fā)明的具體實施方式
,應當指出,對于本技術領域的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干的改進和潤飾,這些改進和潤飾也應視為本發(fā)明的保護范圍。
權利要求
1.一種基于GPU的序列比對算法的比對結果處理方法,包括以下步驟 初始化GPU的塊大小為Bs,并確定線程數(shù)量為N,用戶輸入的待查詢序列Q的長度為qlen ; GPU在共享內存中建立分值緩沖區(qū)score [Bs]和比對結果緩沖區(qū)val[Bs*17] [2]; GPU初始化線程號為tid, score []為零,val [][]為零,緩沖器標記p = I,段計數(shù)器s=0 ; 線程號tid小于線程數(shù)量N的所有線程在紋理內存中查找相應的數(shù)據(jù)庫序列,并將數(shù)據(jù)庫序列的序列號sid設置為線程號tid ; 設置計數(shù)器i = 0 ; 每個線程分別取出相應數(shù)據(jù)庫序列中的第i個字符; 設置計數(shù)器j = s ; 每個線程分別取出待查詢序列Q中的第j個字符; 每個線程根據(jù)Smith-Waterman算法對相應數(shù)據(jù)庫序列中的第i個字符和待查詢序列Q中的第j個字符進行計算,以得到val [] [p]; 每個線程分別求sCOre[tid]和val [] [p]兩者的最大值,并用最大值替換score[tid]; 判斷j是否大于或等于s+15或qlen ; 如果j大于或等于s+15或qlen,則設置計數(shù)器m = 0 ; 線程數(shù)量N中的每16個線程將val [m*16] [p]到val [m*16+15] [p]的16個元素聯(lián)合寫回GPU顯存,完成一次聯(lián)合寫回; 判斷m是否大于或等于15; 如果m大于或等于15,則每個線程分別判斷相應數(shù)據(jù)庫序列是否已沒有字符; 如果線程相應數(shù)據(jù)庫序列已沒有字符,則判斷qlen是否小于或等于16 ; 如果qlen小于或等于16,則每個線程分別將score [tid]寫回GPU顯存。
2.根據(jù)權利要求I所述的基于GPU的序列比對算法的比對結果處理方法,其特征在于,還包括步驟 如果j不大于或等于s+15或qlen,則j = j+1 ; 每個線程分別取出待查詢序列Q中的第j個字符。
3.根據(jù)權利要求I所述的基于GPU的序列比對算法的比對結果處理方法,其特征在于,還包括步驟 如果m不大于或等于15,則m = m+1 ; 線程數(shù)量N中的每16個線程將val [m*16] [p]到val [m*16+15] [p]的16個元素聯(lián)合寫回GPU顯存,完成一次聯(lián)合寫回。
4.根據(jù)權利要求I所述的基于GPU的序列比對算法的比對結果處理方法,其特征在于,還包括步驟 如果線程相應數(shù)據(jù)庫序列還有字符,則P = 1-P,i = i+1 ; 每個線程分別取出相應數(shù)據(jù)庫序列中的第i個字符。
5.根據(jù)權利要求I所述的基于GPU的序列比對算法的比對結果處理方法,其特征在于,還包括步驟如果qlen不小于或等于16,則qlen = qlen-16, s = s+16 ;重新初始化val []
的所有元素為零,P=I; 每個線程初始化val [sid*17] [I]為GPU顯存中相應的值;設置計數(shù)器i = O。
全文摘要
本發(fā)明公開了一種基于GPU的序列比對算法的比對結果處理方法,包括初始化GPU的塊大小為Bs,并確定線程數(shù)量為N,用戶輸入的待查詢序列Q的長度為qlen,GPU在共享內存中建立分值緩沖區(qū)score[Bs]和比對結果緩沖區(qū)val[Bs*17][2],GPU初始化線程號為tid,score[]為零,val[][]為零,緩沖器標記p=1,段計數(shù)器s=0,線程號tid小于線程數(shù)量N的所有線程在紋理內存中查找相應的數(shù)據(jù)庫序列,并將數(shù)據(jù)庫序列的序列號sid設置為線程號tid,設置計數(shù)器i=0,每個線程分別取出相應數(shù)據(jù)庫序列中的第i個字符,設置計數(shù)器j=s,每個線程分別取出待查詢序列Q中的第j個字符。本發(fā)明能實現(xiàn)Smith-Waterman算法快速打分,且能高效直觀地寫回比對結果,從而為回溯部分獲取最佳匹配片段提供分值矩陣。
文檔編號G06F17/30GK102663270SQ201210060480
公開日2012年9月12日 申請日期2012年3月8日 優(yōu)先權日2012年3月8日
發(fā)明者馮曉文, 梁添, 鄭然 , 金海 申請人:華中科技大學