• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    CUDA-TP:基于GPU的自頂向下完整蛋白質(zhì)鑒定并行算法

    2018-07-19 11:55:12何增有
    關(guān)鍵詞:譜峰數(shù)組線程

    段 瓊 田 博 陳 征 王 潔,2 何增有,2

    1(大連理工大學(xué)軟件學(xué)院 遼寧大連 116620) 2 (遼寧省泛在網(wǎng)絡(luò)與服務(wù)軟件重點(diǎn)實(shí)驗(yàn)室(大連理工大學(xué)) 遼寧大連 116620) (wangjie1003@163.com)

    Fig. 1 Comparison between TD and BU for protein identification圖1 蛋白質(zhì)鑒定中的TD與BU方法對(duì)比

    蛋白質(zhì)組學(xué)(proteomics)是一門新興學(xué)科,主要研究細(xì)胞內(nèi)表達(dá)的所有蛋白質(zhì)及其活動(dòng)規(guī)律[1].由于基因的作用最終是由蛋白質(zhì)(protein)來(lái)體現(xiàn),所以蛋白質(zhì)組學(xué)的研究有著更為重要的實(shí)際意義和價(jià)值.蛋白質(zhì)組學(xué)的一個(gè)重要目標(biāo)是能夠快速有效地進(jìn)行蛋白質(zhì)鑒定,即確定一個(gè)樣本中表達(dá)的所有的蛋白質(zhì).蛋白質(zhì)是由氨基酸分子鏈接而成的生物大分子,蛋白質(zhì)的一級(jí)結(jié)構(gòu)(氨基酸序列)唯一確定了蛋白質(zhì)的身份,因此可以通過(guò)識(shí)別氨基酸序列達(dá)到鑒定蛋白質(zhì)的目的.只有鑒定到生物樣品中真實(shí)表達(dá)的蛋白質(zhì),才能準(zhǔn)確獲得蛋白質(zhì)相互作用、亞細(xì)胞定位等信息,為進(jìn)一步的疾病標(biāo)記物發(fā)現(xiàn)和新藥開(kāi)發(fā)提供強(qiáng)有力的支持[2].因此,蛋白質(zhì)鑒定是蛋白質(zhì)組學(xué)研究的基礎(chǔ),對(duì)整個(gè)領(lǐng)域的進(jìn)一步發(fā)展和應(yīng)用有著十分重要的意義.

    為解決蛋白質(zhì)鑒定問(wèn)題,目前以生物質(zhì)譜為基礎(chǔ)的蛋白質(zhì)組學(xué)分析方法主要有“自底向上”(bottom-up, BU)和“自頂向下”(top-down, TD)二種方法[3],2種方法比對(duì)如圖1所示.BU方法通常先將蛋白質(zhì)的復(fù)雜樣品進(jìn)行酶切產(chǎn)生肽段的混合物;然后通過(guò)液相色譜等技術(shù)將這些肽段的混合物進(jìn)行分離,進(jìn)而通過(guò)質(zhì)譜技術(shù)將肽段碎裂,并根據(jù)碎裂譜圖中的離子峰信息進(jìn)行數(shù)據(jù)庫(kù)搜索來(lái)鑒定肽段;最后將鑒定到的肽段進(jìn)行組裝、推理獲得樣品中所含有的蛋白質(zhì)[4-6].

    BU是由肽段推測(cè)蛋白質(zhì)序列,屬于“從局部推斷整體”.盡管BU已經(jīng)在當(dāng)前的蛋白質(zhì)組學(xué)研究中廣泛使用,但該類方法同樣存在著一系列的局限[7]:

    1) 由于并不是所有的肽段都可以有效地被捕捉到并生成二級(jí)譜圖,導(dǎo)致很多蛋白質(zhì)沒(méi)有相應(yīng)的肽段鑒定結(jié)果,進(jìn)而無(wú)法鑒定到該蛋白質(zhì)的存在;

    2) 即使可以通過(guò)少數(shù)幾個(gè)鑒定得到的肽段信息來(lái)推斷蛋白質(zhì)的存在與否,但是卻不能測(cè)繪出整個(gè)蛋白質(zhì)序列的全部信息,這主要包括蛋白質(zhì)各種氨基酸位點(diǎn)上的翻譯后修飾(post-translational modification, PTM);

    3) 由于是通過(guò)肽段的鑒定結(jié)果間接地得到蛋白質(zhì)的鑒定結(jié)果,而同一個(gè)肽段可以映射到多個(gè)不同的蛋白質(zhì)序列,這就需要解決一個(gè)復(fù)雜的計(jì)算問(wèn)題:蛋白質(zhì)推斷[8].而蛋白質(zhì)推斷問(wèn)題目前尚未徹底解決,仍有很多計(jì)算上的挑戰(zhàn)需要克服.

    與BU策略相反,TD方法不需要將蛋白質(zhì)“切割”成更短的肽段序列,而是直接將完整的蛋白質(zhì)進(jìn)行分離和離子化,然后對(duì)其進(jìn)行碎裂并利用串聯(lián)質(zhì)譜測(cè)量由每個(gè)蛋白質(zhì)生成的二級(jí)譜圖.在數(shù)據(jù)分析階段,通過(guò)比對(duì)數(shù)據(jù)庫(kù)中的蛋白質(zhì)序列和實(shí)驗(yàn)二級(jí)譜圖進(jìn)行蛋白質(zhì)鑒定[9-10].這樣,通過(guò)完整蛋白質(zhì)的質(zhì)量及其碎裂譜的信息可以實(shí)現(xiàn)真正意義上的蛋白質(zhì)鑒定.另外,TD能夠保留多種PTM之間的關(guān)聯(lián)信息,逐漸成為蛋白質(zhì)組學(xué)研究中的熱點(diǎn)[5].

    鑒于TD方法對(duì)于蛋白質(zhì)鑒定具有重要的生物學(xué)意義,針對(duì)TD策略中完整蛋白質(zhì)與譜圖的匹配問(wèn)題,已經(jīng)提出了一些有效的算法.在這些方法中,ProSight[11-12]采用泊松分布概率打分模型計(jì)算蛋白質(zhì)與譜圖的匹配概率,用“鳥(niǎo)槍標(biāo)注”的方法生成所有可能的蛋白質(zhì)變體數(shù)據(jù)庫(kù).這種方法最大的問(wèn)題是擴(kuò)展性差,如果變體增多可能導(dǎo)致“組合爆炸”.Frank等人[13]借鑒譜圖比對(duì)方法,以動(dòng)態(tài)規(guī)劃為基礎(chǔ)開(kāi)發(fā)了MS-TopDown算法,該算法能有效的鑒定蛋白質(zhì)及未知的PTM.Liu等人[14]在此基礎(chǔ)上通過(guò)優(yōu)化動(dòng)態(tài)規(guī)劃顯著提高了計(jì)算速度并提供了匹配的統(tǒng)計(jì)顯著性評(píng)估方法.在此后,TopPIC[15],MASH suit[16],MSpathFinder[17],Ptop[18]等工具都是以動(dòng)態(tài)規(guī)劃為主體進(jìn)行蛋白質(zhì)數(shù)據(jù)庫(kù)搜索并在不同的方面做了改進(jìn).然而,其面臨的最大問(wèn)題還是匹配時(shí)間不盡如人意,這是由動(dòng)態(tài)規(guī)劃算法所固有的時(shí)間復(fù)雜度決定的.

    高性能計(jì)算的發(fā)展對(duì)計(jì)算速度的提升做出了巨大貢獻(xiàn).自2003年開(kāi)始,圖形處理器(graphics proc-essing units, GPU)就在浮點(diǎn)運(yùn)算性能和存儲(chǔ)器帶寬上飛速發(fā)展.通用并行計(jì)算架構(gòu)(compute unified device architecture, CUDA)[19]是由英偉達(dá)公司推出的高性能運(yùn)算平臺(tái),它能夠充分發(fā)揮GPU并行計(jì)算的優(yōu)勢(shì).隨著GPU可編程性的增強(qiáng),GPU突破僅應(yīng)用于圖形處理領(lǐng)域的局限,開(kāi)始用于一些通用計(jì)算領(lǐng)域[20-21],尤其是在生物信息學(xué)領(lǐng)域,為研究人員提供了新的思路.例如翟艷堂等人[22]提出的PTM鑒定算法MS-Alignment的并行架構(gòu),有效地提高了在肽段上檢測(cè)PTM的效率;對(duì)于肽段鑒定問(wèn)題,Zhang等人[23]通過(guò)CUDA架構(gòu)將肽段鑒定算法RT-PSM[24]的速度提升了26倍;Baumgardner等人[25]成功對(duì)SpectraST[26]算法進(jìn)行了并行計(jì)算加速;Li等人[27]也順利地將譜圖點(diǎn)積算法并行化.近幾年來(lái),CUDA并行計(jì)算架構(gòu)更是在基因序列比對(duì)方面取得了全新的進(jìn)展[28-30].

    鑒于完整蛋白質(zhì)與質(zhì)譜數(shù)據(jù)匹配存在高耗時(shí)的缺點(diǎn),本文借鑒譜圖比對(duì)的思想,以MS-TopDown算法為基礎(chǔ),選擇CUDA編程模型設(shè)計(jì)CUDA-TP算法核心步驟,即完整蛋白質(zhì)與TD質(zhì)譜匹配分?jǐn)?shù)的計(jì)算.同時(shí)在計(jì)算步驟中引入平衡二叉搜索(adelson-velskii and landis, AVL)樹(shù)來(lái)保存每個(gè)路徑點(diǎn)上的信息并對(duì)MS-Filter[31]進(jìn)行改進(jìn)以加速蛋白質(zhì)過(guò)濾.最后,本文選取常用的target-decoy[32-33]方法對(duì)結(jié)果進(jìn)行錯(cuò)誤發(fā)現(xiàn)率(false discovery rate, FDR)控制.實(shí)驗(yàn)結(jié)果表明:在1%的FDR下CUDA-TP運(yùn)行速度分別是MS-TopDown和MS-Align+算法的10倍與2倍.

    本文的主要貢獻(xiàn)有3個(gè)方面:

    1) 提出了一種新型的基于GPU的完整蛋白質(zhì)與譜圖打分算法,該算法是對(duì)MS-TopDown的并行優(yōu)化,它繼承了可以鑒定未知PTM的特點(diǎn),同時(shí)得到的最終分?jǐn)?shù)是譜圖網(wǎng)格中的全局分?jǐn)?shù),并沒(méi)有使用MS-Align+方法中縮減譜圖網(wǎng)格搜索空間的策略.

    2) 對(duì)MS-Filter算法進(jìn)行改進(jìn)加速了蛋白質(zhì)過(guò)濾過(guò)程.

    3) 使用真實(shí)數(shù)據(jù)集進(jìn)行實(shí)驗(yàn),驗(yàn)證了本文所提出的CUDA-TP算法的高效性.

    1 問(wèn)題定義

    1.1 符號(hào)表示

    通常情況下,可以把一個(gè)譜圖轉(zhuǎn)換為其相應(yīng)的前綴殘基質(zhì)量(prefix residue mass, PRM)譜圖來(lái)表示完整蛋白質(zhì)的前綴肽段.例如二級(jí)串聯(lián)譜圖中一個(gè)質(zhì)量為ma的y離子單同位素譜峰在PRM譜圖中對(duì)應(yīng)的質(zhì)量為M-ma(M表示完整蛋白質(zhì)質(zhì)量).本文中,譜圖中所有譜峰都為單同位素譜峰,每個(gè)譜峰的單同位素質(zhì)量包含2個(gè)值:ma和其對(duì)應(yīng)的M-ma.同時(shí),譜圖還包含1個(gè)空質(zhì)量0與代表完整蛋白質(zhì)PRM值的M-18(18表示1個(gè)水分子質(zhì)量).具體而言,可以把譜圖S表示為一個(gè)有序序列:

    a0

    其中,a0=0,an=M-18.相應(yīng)地,長(zhǎng)度為m的蛋白質(zhì)序列P表示為

    b0

    其中,bi表示蛋白質(zhì)序列P中從第1個(gè)氨基酸到第i個(gè)氨基酸的質(zhì)量之和(假設(shè)b0=0,bm=M′-18,M′為蛋白質(zhì)P未加任何修飾物的質(zhì)量).給定一個(gè)蛋白質(zhì)序列P和一個(gè)譜圖S,定義它們所組成的譜圖網(wǎng)格(spectra grid)為(a0,b0),(a0,bm),(an,b0),(an,bm)四個(gè)點(diǎn)所組成的2維矩形方格,其共包含(n+1)(m+1)個(gè)點(diǎn).為了降低復(fù)雜性和方便計(jì)算,大部分的TD方法不包含譜峰強(qiáng)度,本文也將不考慮譜圖中譜峰強(qiáng)度.

    1.2 質(zhì)譜匹配

    蛋白質(zhì)序列P和譜圖S之間的匹配可以看作譜圖網(wǎng)格中的一條如圖2所示的路徑.路徑中一個(gè)點(diǎn)與其相鄰點(diǎn)的連接包含3種情況:

    1) 如果從(ai,bj)到(ai′,bj′)滿足ai=ai′,bj=bj′,則呈斜對(duì)角線;

    2) 如果從(ai,bj)到(ai′,bj′)滿足ai′>ai,則為垂直線,垂直線表示蛋白質(zhì)質(zhì)量增大,例如氨基酸位點(diǎn)上產(chǎn)生一個(gè)質(zhì)量大于0的PTM;

    3) 如果從(ai,bj)到(ai′,bj′)滿足bi′>bi,則為水平線,水平線表示蛋白質(zhì)質(zhì)量減少,例如氨基酸位點(diǎn)上產(chǎn)生1個(gè)質(zhì)量小于0的PTM.匹配路徑上所經(jīng)過(guò)的點(diǎn)即為共享譜峰數(shù)量[34](shared peak count),也稱為匹配分?jǐn)?shù).圖2(a)表示完美匹配,沒(méi)有發(fā)生任何PTM;圖2(b)表示第5和第6個(gè)氨基酸位點(diǎn)上分別產(chǎn)生-80Da和+90Da的PTM.

    Fig. 2 Illustration of protein-spectra matching圖2 蛋白質(zhì)與譜圖之間的匹配

    通過(guò)觀察可知,每條從(a0,b0)到(an,bm)的路徑都可能是蛋白質(zhì)序列P和譜圖S的一個(gè)有效匹配,而且匹配的路徑數(shù)目隨著質(zhì)量變化個(gè)數(shù)F(質(zhì)量變化對(duì)應(yīng)路徑中垂直與水平線)的增加而呈現(xiàn)指數(shù)增長(zhǎng).為了避免這種情況的發(fā)生,通常采用動(dòng)態(tài)規(guī)劃算法尋找譜圖網(wǎng)格中的最優(yōu)路徑[14-18],這樣,算法的運(yùn)行時(shí)間只會(huì)隨著F的增加呈線性增長(zhǎng).

    動(dòng)態(tài)規(guī)劃算法在尋找最優(yōu)路徑的過(guò)程中需要迭代地填充大小為n×m×F的數(shù)組D,D中的元素Di j(f)表示在最多允許發(fā)生f個(gè)質(zhì)量變化的前提下從(a0,b0)到(ai,bj)的最高匹配分?jǐn)?shù).數(shù)組D填充完成后,Dnm(F)的值即為蛋白質(zhì)序列P和譜圖S的匹配分?jǐn)?shù).在最優(yōu)路徑中,Di′j′(f′)的前驅(qū)點(diǎn)標(biāo)記為Di j(f),如果2個(gè)數(shù)值對(duì)(ai,bj)和(ai′,bj′)滿足條件:

    |ai-ai′-bj′+bj|<β,

    (1)

    則稱它們是余對(duì)角的(codiagonal),其中β為誤差值.

    通常,如果i

    (2)

    Di j(f)的計(jì)算為

    Di j(f)=max(Ddiag(i,j)(f)+1,
    Hi-1,j-1(f-1)+1).

    (3)

    Hi j(f)的狀態(tài)轉(zhuǎn)移方程為

    Hi j(f)=max(Di j(f),Hi-1,j(f),Hi,j-1(f)).

    (4)

    路徑起始點(diǎn)D0,0(f)=0.可以看出,質(zhì)量變化數(shù)F僅會(huì)讓數(shù)組D中的元素個(gè)數(shù)線性增加,算法的時(shí)間復(fù)雜度為O(nmF),n和m分別表示譜圖S中譜峰數(shù)量與蛋白質(zhì)序列P的長(zhǎng)度.

    為了減小匹配誤差,算法中的質(zhì)量變化可以選取已知的PTM(如雙氧化、磷酸化、甲基化)集合ΔPTM中的數(shù)值δ.因此,質(zhì)量變化分為了2部分:已知的PTM與未知的PTM.用Fs和Fg分別表示二者在匹配中所允許的最大個(gè)數(shù).至此,可以將diag(i,j)擴(kuò)展為diag(δ)(i,j)并使之滿足條件:

    -β<|ai-ai′-bj′+bj|-δ<β,

    (5)

    則之前的數(shù)組D和H大小變?yōu)閚×m×Fg×Fs,Di j(g,s)中的值仍然表示從(0,0)到(i,j)的最大分?jǐn)?shù).把式(3)轉(zhuǎn)化成:

    Di j(g,s)=max(Ddiag(i,j)(g,s)+1,
    Hi-1,j-1(g-1,s),Ddiag(δ)(i,j)(g,s-1)+1).

    (6)

    狀態(tài)轉(zhuǎn)移方程式(4)更新成

    Hi j(g,s)=max(Di j(g,s),
    Hi-1,j(g,s),Hi,j-1(g,s)).

    (7)

    通過(guò)式(6),可以利用動(dòng)態(tài)規(guī)劃算法,最終求得全局譜圖網(wǎng)格中完整蛋白質(zhì)序列P與譜圖S的匹配分?jǐn)?shù).

    Fig. 3 The flowchart of CUDA-TP algorithm圖3 CUDA-TP算法流程圖

    2 CUDA-TP算法

    如第1節(jié)所述的算法雖然能在線性時(shí)間內(nèi)計(jì)算出匹配分?jǐn)?shù),但當(dāng)?shù)鞍踪|(zhì)數(shù)據(jù)庫(kù)變大或者譜圖數(shù)量增多時(shí),其時(shí)間開(kāi)銷依然不容樂(lè)觀.為了加速計(jì)算過(guò)程,本文提出了基于GPU的CUDA-TP算法,該算法首先在CPU端使用AVL樹(shù)優(yōu)化前驅(qū)節(jié)點(diǎn)的求取,然后設(shè)計(jì)并行模型加速式(6)的計(jì)算.同時(shí),為了加快蛋白質(zhì)過(guò)濾,CUDA-TP還對(duì)蛋白質(zhì)過(guò)濾算法MS-Filter[31]做了改進(jìn).算法的整體流程如圖3所示.

    2.1 計(jì)算diag

    在譜圖網(wǎng)格中尋找最優(yōu)路徑時(shí),首先要計(jì)算網(wǎng)格中每個(gè)點(diǎn)的前驅(qū)坐標(biāo)diag(i,j).由定義可知diag(i,j)必是(i,j)左上部余對(duì)角線上的點(diǎn).如圖4所示,為求A的前驅(qū)點(diǎn),首先需要找到其左上部區(qū)域Z中與A在同一條余對(duì)角線上的點(diǎn)的集合{A0,A1,A2},然后再在該集合內(nèi)選取diag(i,j)的坐標(biāo).在選取坐標(biāo)時(shí),由式(6)可知,由于A1的diag值為A0的坐標(biāo),所以匹配路徑中A1的匹配分?jǐn)?shù)(對(duì)應(yīng)D中元素)至少比A0大1,依次類推,得到點(diǎn)A的diag取值是離A最近點(diǎn)A2的坐標(biāo)值.因此,求譜圖網(wǎng)格中每個(gè)點(diǎn)的diag即為求距離該點(diǎn)最近且和它呈余對(duì)角的點(diǎn)的坐標(biāo).最簡(jiǎn)單的方法是遍歷滿足要求區(qū)域中的所有點(diǎn),如圖4所示,A的遍歷區(qū)域?yàn)閆,但時(shí)間開(kāi)銷巨大.

    Fig. 4 Calculate diag of all nodes in the spectra grid圖4 計(jì)算譜圖網(wǎng)格中所有點(diǎn)的diag

    由式(1)易知,如果2個(gè)點(diǎn)是余對(duì)角的,那么它們所在坐標(biāo)對(duì)應(yīng)的數(shù)值對(duì)(ai,bj)的差值d在誤差范圍內(nèi)是相等的.也就是說(shuō),集合{A0,A1,A2}對(duì)應(yīng)相同的d.利用這條性質(zhì),可以通過(guò)AVL樹(shù)只遍歷一遍譜圖網(wǎng)格求取所有點(diǎn)的diag,如圖4所示.計(jì)算分步驟:

    1) 將譜圖網(wǎng)格從左到右按列進(jìn)行劃分,每列元素的順序從上到下;

    2) 建立一棵空的AVL樹(shù),樹(shù)的節(jié)點(diǎn)包含1個(gè)坐標(biāo)和1個(gè)d值;

    3) 從第1列的第1個(gè)元素開(kāi)始,依次計(jì)算坐標(biāo)元素的d值.如果AVL樹(shù)中沒(méi)有這個(gè)元素的d值,則把此值和它的坐標(biāo)作為新節(jié)點(diǎn)插入AVL樹(shù).如果查找到已經(jīng)有節(jié)點(diǎn)的d值與它相等,則把該元素的diag置為此節(jié)點(diǎn)所存儲(chǔ)的坐標(biāo),同時(shí)更新節(jié)點(diǎn)的坐標(biāo)為該元素的坐標(biāo).

    當(dāng)步驟3運(yùn)行至最后1列的最后1個(gè)元素時(shí),所有點(diǎn)的diag求取完畢.由于AVL樹(shù)節(jié)點(diǎn)個(gè)數(shù)等于譜圖網(wǎng)格中所有節(jié)點(diǎn)的不同的d值數(shù)量,所以AVL樹(shù)的查找速度?O(lbnm),能極大加快diag的計(jì)算.偽代碼如下:

    算法1. 在CPU端計(jì)算diag.

    輸入:譜圖a[n]、蛋白質(zhì)序列b[m]、誤差值β、AVL樹(shù)avl_tree;

    輸出:所有點(diǎn)的diag.

    ①InitializeAVLtree(avl_tree)*將輸入的avl_tree初始化為null*

    ② fori=0 tomdo

    ③ forj=0 tondo

    ④d←b[i]-a[j];

    ⑤ ifavl_treeincluded

    ⑥diag(i,j)←avl_tree[d](i,j);

    ⑦avl_tree[d](i,j)←(i,j);

    ⑧ else

    ⑨Insert(avl_tree,d,i,j);

    ⑩ end if

    需要注意的是,偽代碼中行⑤AVL樹(shù)在查找d值時(shí),如果AVL樹(shù)節(jié)點(diǎn)中的值與該值的差的絕對(duì)值小于β,就認(rèn)為它們是相等的.avl_tree[d](i,j)表示AVL樹(shù)中查找到的等于d值的節(jié)點(diǎn)所包含的坐標(biāo).

    2.2 計(jì)算diag(δ)

    Fig. 5 Calculate diag(δ) of all nodes in the spectra grid圖5 計(jì)算譜圖網(wǎng)格中所有點(diǎn)的diag(δ)

    不同于diag的計(jì)算,求解diag(δ)需要知道PTM集合ΔPTM中的所有數(shù)值δ.如果ΔPTM中有k個(gè)值,那么,求某個(gè)點(diǎn)的diag(δ)之前必須找出該點(diǎn)譜圖網(wǎng)格左上部與該點(diǎn)滿足式(5)的k個(gè)點(diǎn)集合,然后在這k個(gè)點(diǎn)集合中選取使匹配分值最大,即距離所求點(diǎn)最近的k個(gè)點(diǎn)的坐標(biāo)作為最終結(jié)果.如圖5所示,假設(shè)k=3,集合ΔPTM={δ1,δ2,δ3},在求A點(diǎn)的diag(δ)時(shí),首先在區(qū)域Y中尋找滿足條件的點(diǎn)集合{A0,A1,A2},{B0,B1,B2},{C0,C1,C2},然后選取集合中距離A最近的3個(gè)點(diǎn)A2,B2,C2的坐標(biāo)作為返回值.顯然,算法1無(wú)法滿足這樣的計(jì)算要求.

    由diag(δ)的計(jì)算過(guò)程可知,網(wǎng)格中的每個(gè)元素在求解時(shí),其結(jié)果互不影響,即所有元素可以同時(shí)計(jì)算.這種性質(zhì)很好地符合了CUDA并行架構(gòu)要求.在CUDA架構(gòu)中,CPU作為主機(jī)(host),GPU作為主機(jī)的協(xié)處理器(co-processor),它被看作執(zhí)行高度線程化并行處理任務(wù)的計(jì)算設(shè)備(device).運(yùn)行在GPU上的CUDA并行計(jì)算函數(shù)稱為內(nèi)核(kernel),以線程?hào)鸥?grid)形式組織,線程?hào)鸥裼扇舾蓚€(gè)線程塊(block)組成,每個(gè)線程塊又包含若干個(gè)線程(threads).實(shí)際運(yùn)行時(shí),線程塊被分割成更小的線程束(wrap)來(lái)執(zhí)行運(yùn)算任務(wù),1個(gè)線程束由連續(xù)的32個(gè)線程組成.

    diag(δ)并行算法如圖5所示,網(wǎng)格中每個(gè)點(diǎn)的計(jì)算分配1個(gè)線程,線程之間并行執(zhí)行,線程塊與線程塊之間不需要同步,將所有的元素存入GPU的全局存儲(chǔ)器.對(duì)一個(gè)點(diǎn)左上部的搜索區(qū)域,仍然按照算法1進(jìn)行劃分.算法執(zhí)行過(guò)程中,始終維護(hù)1個(gè)包含k個(gè)點(diǎn)坐標(biāo)的數(shù)組g,該數(shù)組的元素為坐標(biāo)值且映射ΔPTM中的某個(gè)δ值.遍歷搜索區(qū)域時(shí),如果2個(gè)點(diǎn)在同一個(gè)集合中,那么它們所對(duì)應(yīng)的δ必是相等的,則把后遍歷到的節(jié)點(diǎn)坐標(biāo)更新到數(shù)組g.如圖5中的點(diǎn)集合{A0,A1,A2},它們都對(duì)應(yīng)δ2,當(dāng)遍歷至A1時(shí),更新g[δ2]為A1的坐標(biāo),依次類推,遍歷完成時(shí),數(shù)組g即為A的最終結(jié)果.算法2描述了計(jì)算diag(δ)的具體過(guò)程.

    算法2. 在GPU端計(jì)算diag(δ).

    輸入:譜圖a[n]、蛋白質(zhì)序列b[m]、誤差值β、PTM的集合ΔPTM;

    輸出:存儲(chǔ)所有點(diǎn)的diag(δ)數(shù)組g.

    ① (n_left,m_left)←GetCoord(blockDim.x,blockIdx.x,blockIdx.y);*根據(jù)線程塊,線程信息獲取要處理的元素*

    ②d←fbs(b[m_left]-a[n_left]);

    ③ fori=0 tom_leftdo

    ④ forj=0 ton_leftdo

    ⑤delta←fbs(b[i]-a[j]-d);

    ⑥ ifΔPTMincludedelta

    ⑦g[delta]←(i,j);

    ⑧ end if

    ⑨ end for

    ⑩ end for

    算法2中的行①表示從當(dāng)前的線程獲取所要計(jì)算的點(diǎn)坐標(biāo);行②保存該坐標(biāo)對(duì)應(yīng)的d值;行③④開(kāi)始遍歷坐標(biāo)左上部區(qū)域的所有點(diǎn);行⑤~求當(dāng)前遍歷點(diǎn)的delta值,如果PTM集合ΔPTM包含此值,則將其更新到數(shù)組g,最后返回的數(shù)組g即為最終結(jié)果;代碼的行⑥檢測(cè)ΔPTM中是否存在δ與delta之差的絕對(duì)值小于β,如果存在,則判斷集合ΔPTM包含delta.

    2.3 數(shù)組計(jì)算并行架構(gòu)

    為求蛋白質(zhì)序列P與譜圖S的匹配分?jǐn)?shù),需要對(duì)式(6)和式(7)進(jìn)行計(jì)算,即求解數(shù)組D和數(shù)組H.在CUDA-TP算法中,D和H在邏輯上被聚集為數(shù)組E,E中每個(gè)元素包含2個(gè)值:Di,j,Hi,j.在計(jì)算Ei,j之前,需要得到Ei-1,j,Ei,j-1,Ei-1,j-1這3個(gè)值.如圖6所示,每次計(jì)算一個(gè)對(duì)角線上的元素,依次向下進(jìn)行,直至最后1個(gè)元素.不難發(fā)現(xiàn),對(duì)角線上的元素計(jì)算時(shí)互相之間是并行的,某個(gè)對(duì)角線上的元素全部計(jì)算完成后,再進(jìn)行下一個(gè)對(duì)角線的計(jì)算.由此,可以設(shè)計(jì)并行架構(gòu)求解數(shù)組E.

    Fig. 6 Execution of CUDA-TP algorithm圖6 CUDA-TP算法的執(zhí)行順序

    若蛋白質(zhì)序列P的長(zhǎng)度為m,譜圖S的譜峰數(shù)量為n,則數(shù)組E的元素個(gè)數(shù)為nm.當(dāng)n或者m變得很大時(shí),E的元素就會(huì)相應(yīng)的增多,導(dǎo)致要求解的空間很“龐大”,而GPU中同時(shí)并行執(zhí)行的線程數(shù)量是受限的,給每個(gè)元素指定1個(gè)線程顯然是不科學(xué)的.為了合理地利用GPU性能,可以把r×c個(gè)元素分為1個(gè)計(jì)算單元,每個(gè)單元分別分配1個(gè)線程,r和c根據(jù)GPU計(jì)算能力來(lái)指定大小(本文r和c均設(shè)置為2).線程按照標(biāo)號(hào)順序計(jì)算單元格中的元素,以保證在計(jì)算當(dāng)前元素時(shí)其左上部的所有元素是已知的.同時(shí),并行的線程運(yùn)行在同一個(gè)線程塊內(nèi),這樣能夠?qū)?shù)組E放到GPU的共享存儲(chǔ)器中.如圖7所示,計(jì)算單元A,B,C中的元素互不影響,它們是并行的,3個(gè)線程同時(shí)對(duì)其進(jìn)行計(jì)算且每個(gè)線程按順序計(jì)算4個(gè)元素.

    Fig. 7 Parallel processing architecture圖7 并行計(jì)算架構(gòu)

    算法3. 在GPU端計(jì)算數(shù)組E.

    輸入:譜圖a[n]、蛋白質(zhì)序列b[m]、計(jì)算單元大小r和c,diag,diag(δ);

    輸出:所求數(shù)組E.

    ①idx←GetIdx(blockDim.x,blockIdx.x,blockIdx.y);

    ②p←min(nr,mc);

    ③ fori=0 tordo

    ④ forj=0 tocdo

    ⑤ (ei,ej)←GetEIndex(E,p,idx,i,j);

    ⑥ if (ei,ej)≠?

    ⑦E[ei,ej]←GetMax(E,ei,ej,diag,diag(δ));*獲取結(jié)果并填充進(jìn)數(shù)組E*

    ⑧ end if

    ⑨ end for

    ⑩ end for

    算法3的行①首先獲取當(dāng)前的線程標(biāo)號(hào);行②求得最大并行數(shù)p;行③④表示線程按順序計(jì)算r×c個(gè)元素;行⑤得到要處理的元素坐標(biāo),如果該坐標(biāo)代表的元素不為空元素,則將數(shù)組E中此元素的數(shù)值更新;最后的行返回?cái)?shù)組E.需要注意的是,更新數(shù)組元素值的函數(shù)GetMax中的參數(shù)diag為算法1的結(jié)果,diag_delta即為3.2節(jié)所述的diag(δ),E包含的數(shù)組D和H值嚴(yán)格按照式(6)和式(7)求解.

    2.4 時(shí)間復(fù)雜度分析

    數(shù)組填充時(shí),串行程序依次計(jì)算數(shù)組E中的元素,完成F個(gè)E數(shù)組的計(jì)算需要O(NF).由2.3節(jié)可知,CUDA-TP算法將E劃分為F(r×c)個(gè)單元格,每次有p個(gè)線程同時(shí)運(yùn)行且每個(gè)線程在單元格中串行執(zhí)行,但由于空元素的存在,平均同時(shí)運(yùn)行線程的數(shù)量約為p2, GPU執(zhí)行完畢后最多剩余(r-1)n+(c-1)m個(gè)元素,于是CUDA-TP計(jì)算E的時(shí)間復(fù)雜度為

    (8)

    因此,質(zhì)譜匹配的總時(shí)間復(fù)雜度由O(N2+FN)變?yōu)?/p>

    (9)

    2.5 蛋白質(zhì)過(guò)濾

    對(duì)譜圖S來(lái)說(shuō),要從蛋白質(zhì)數(shù)據(jù)庫(kù)中尋找1個(gè)蛋白質(zhì)P,使得它與這個(gè)蛋白質(zhì)的匹配分?jǐn)?shù)最高.蛋白質(zhì)數(shù)據(jù)庫(kù)通常包含很多個(gè)蛋白質(zhì),讓所有蛋白質(zhì)與譜圖S進(jìn)行匹配分值計(jì)算,時(shí)間開(kāi)銷是巨大的.常用的方法是為每個(gè)譜圖挑選出L個(gè)候選蛋白質(zhì),然后譜圖與這L個(gè)候選蛋白質(zhì)計(jì)算匹配分?jǐn)?shù)并以最高分值的蛋白質(zhì)作為鑒定結(jié)果.MS-Filter[31]是目前進(jìn)行蛋白質(zhì)過(guò)濾很有效的方法(蛋白質(zhì)過(guò)濾問(wèn)題定義及相關(guān)算法參見(jiàn)文獻(xiàn)[31]),它為每個(gè)蛋白質(zhì)與譜圖S計(jì)算過(guò)濾分?jǐn)?shù),以分?jǐn)?shù)高低作為是否過(guò)濾蛋白質(zhì)的條件.CUDA-TP通過(guò)優(yōu)化MS-Filter算法3個(gè)計(jì)算步驟中的步驟2來(lái)加速蛋白質(zhì)過(guò)濾,優(yōu)化后的計(jì)算過(guò)程:

    1) 在低精度下計(jì)算譜圖與蛋白質(zhì)的卷積數(shù)組;

    2) 查找對(duì)角線分值大于閾值的候選區(qū)域,如果相鄰候選區(qū)域的最大邊界與最小邊界值之差小于所有氨基酸中甘氨酸的最小質(zhì)量75.05,則將這2個(gè)區(qū)域合并;

    3) 在高精度下依次對(duì)合并后的候選區(qū)域計(jì)算卷積數(shù)組,如果卷積數(shù)組中對(duì)角線分值大于設(shè)定的閾值,則將閾值更新為此分值,最后的閾值即為蛋白質(zhì)的過(guò)濾分?jǐn)?shù).

    蛋白質(zhì)的過(guò)濾加速體現(xiàn)在步驟2的候選區(qū)域合并,通過(guò)合并分散的小區(qū)域來(lái)減少步驟3高精度卷積數(shù)組的個(gè)數(shù).

    CUDA-TP創(chuàng)建L個(gè)流(stream)對(duì)過(guò)濾出的候選蛋白質(zhì)與譜圖的匹配分?jǐn)?shù)并行計(jì)算,CUDA架構(gòu)的流并行是粗粒度的并行,它能夠使GPU運(yùn)算的同時(shí)與CPU進(jìn)行數(shù)據(jù)交換.如圖8所示,為每個(gè)候選蛋白質(zhì)分配1個(gè)流,流與流之間并行執(zhí)行.

    Fig. 8 Stream parallelism for calculating the matching score between the spectrum and candidate proteins圖8 譜圖與候選蛋白質(zhì)匹配分?jǐn)?shù)計(jì)算的流并行

    3 實(shí)驗(yàn)與結(jié)果

    3.1 數(shù)據(jù)集合

    本文采用人類細(xì)胞蛋白p65[35]、大腸桿菌蛋白[36](escherichia coli, Ecoli)、人類核心組蛋白(human core histones)H4[37]和鼠傷寒沙門氏菌[38](salmonella typhimurium, ST)質(zhì)譜數(shù)據(jù)來(lái)進(jìn)行實(shí)驗(yàn),所有的蛋白質(zhì)數(shù)據(jù)庫(kù)均來(lái)自美國(guó)國(guó)立生物信息中心NCBI①.原始質(zhì)譜數(shù)據(jù)文件使用ReAdw②和MS-Deconv[39]轉(zhuǎn)化為只包含單同位素譜峰的譜圖.

    由于TD方法是對(duì)完整蛋白質(zhì)的鑒定,譜峰數(shù)量太少會(huì)導(dǎo)致匹配分?jǐn)?shù)過(guò)低,所以只保留前體質(zhì)量(precursor mass)大于2500Da且至少包含10個(gè)譜峰的譜圖[14].最終的實(shí)驗(yàn)數(shù)據(jù)集及其分布如表1和圖9所示.

    Table1TheNumberofSpectrafromFourDatasetsandtheNumberofProteinsintheCorrespondingDatabases

    表1 數(shù)據(jù)集中的譜圖數(shù)量及數(shù)據(jù)庫(kù)中蛋白質(zhì)個(gè)數(shù)

    Fig. 9 Distribution of the number of peaks and the length of proteins圖9 譜峰數(shù)量和蛋白質(zhì)長(zhǎng)度分布

    p65數(shù)據(jù)集包含240個(gè)譜圖,Ecoli數(shù)據(jù)集包含921個(gè)譜圖,H4和ST分別包含1 245,4 339個(gè)譜圖,譜圖中的譜峰數(shù)量分布如圖9(a)所示.p65與Ecoli數(shù)據(jù)集的譜峰較為均勻地分布在20~190之間;ST數(shù)據(jù)集的譜峰數(shù)量大多在20~80之間,占比57.2%,為2 482個(gè);而H4數(shù)據(jù)集的譜峰數(shù)量多數(shù)分布在160~200之間,占比57.8%,為720個(gè).

    4個(gè)實(shí)驗(yàn)數(shù)據(jù)集的蛋白質(zhì)數(shù)據(jù)庫(kù)分別含有349,2 206,2 433,4 606個(gè)蛋白質(zhì),蛋白質(zhì)序列長(zhǎng)度分布如圖9(b)所示.p65蛋白質(zhì)數(shù)據(jù)庫(kù)中的蛋白質(zhì)長(zhǎng)度大多分布在240~480之間,占比60.2%,共211個(gè);ST蛋白質(zhì)數(shù)據(jù)庫(kù)中的蛋白質(zhì)長(zhǎng)度在40~240之間的有2 947個(gè),占整個(gè)數(shù)據(jù)庫(kù)的64.1%;H4和Ecoli蛋白質(zhì)數(shù)據(jù)庫(kù)中的蛋白質(zhì)長(zhǎng)度多集中在80~340,H4包含1 989個(gè),Ecoli包含1 883個(gè),各自占比為81.4%,83.3%.

    3.2 CUDA-TP運(yùn)行時(shí)間

    CUDA-TP基于譜圖比對(duì)思想,與MS -Align+③通過(guò)減少搜索譜圖網(wǎng)格空間以達(dá)到運(yùn)行時(shí)間降低的策略不同,它是串行算法MS-TopDown的并行加速算法.本文通過(guò)設(shè)置不同的參數(shù)F(常用策略是固定Fg,改變Fs)和L來(lái)對(duì)CUDA-TP與MS-TopDown的運(yùn)行時(shí)間進(jìn)行比對(duì),實(shí)驗(yàn)環(huán)境如表2所示:

    Table 2 The Running Environment表2 實(shí)驗(yàn)環(huán)境

    Fig. 10 Running time of CUDA-TP and MS-TopDown on four datasets with different parameters 圖10 4個(gè)數(shù)據(jù)集上CUDA-TP與MS-TopDown在不同參數(shù)下的運(yùn)行時(shí)間

    MS-TopDown沒(méi)有蛋白質(zhì)過(guò)濾步驟,選用2.5節(jié)改進(jìn)的MS-Filter算法進(jìn)行蛋白質(zhì)過(guò)濾.MS-Align+從官方網(wǎng)站下載,MS-Align+只提供參數(shù)F的設(shè)置,運(yùn)行時(shí)L為軟件中的默認(rèn)參數(shù),因此只對(duì)比不同F(xiàn)參數(shù)下的運(yùn)行時(shí)間.同時(shí),實(shí)驗(yàn)采用常用的target-decoy[32-33]進(jìn)行FDR控制,所得實(shí)驗(yàn)結(jié)果FDR值均小于1%.本文首先設(shè)定不同的允許最多發(fā)生的PTM個(gè)數(shù)F和蛋白質(zhì)過(guò)濾數(shù)量L,從多角度對(duì)比CUDA-TP與MS-TopDown的運(yùn)行時(shí)間,4個(gè)數(shù)據(jù)集的實(shí)驗(yàn)結(jié)果如圖10所示:

    在p65數(shù)據(jù)集上,CUDA-TP平均運(yùn)行時(shí)間為22 min,MS-TopDown平均運(yùn)行時(shí)間為212 min,CUDA-TP速度是MS-TopDown的9.6倍;在Ecoli數(shù)據(jù)集上,CUDA-TP平均運(yùn)行時(shí)間為110 min,MS-TopDown平均運(yùn)行時(shí)間為1 212 min,CUDA-TP速度是MS-TopDown的11倍;在ST數(shù)據(jù)集上,CUDA-TP平均運(yùn)行時(shí)間為243 min,MS-TopDown平均運(yùn)行時(shí)間為2 315 min,CUDA-TP速度是MS-TopDown的9.5倍;在H4數(shù)據(jù)集上,CUDA-TP平均用時(shí)139 min,MS-TopDown用時(shí)1 405 min,CUDA-TP速度是MS-TopDown的10.1倍.可以看出,雖然質(zhì)譜數(shù)據(jù)集ST是H4的將近4倍,但是用時(shí)卻只是H4的2倍,這是由于H4譜圖中譜峰數(shù)量與其數(shù)據(jù)庫(kù)蛋白質(zhì)長(zhǎng)度普遍比ST的高,導(dǎo)致要求解的譜圖網(wǎng)格元素增多,增加了運(yùn)行時(shí)間.

    MS-Align+只可以調(diào)整F的大小,L默認(rèn)固定為20,因此本文對(duì)比分析了3種方法在不同F(xiàn)參數(shù)下的運(yùn)行時(shí)間,實(shí)驗(yàn)結(jié)果如圖11所示:

    Fig. 11 Running time of three methods on four datasets with different parameters圖11 4個(gè)數(shù)據(jù)集上3種方法在不同參數(shù)下的運(yùn)行時(shí)間

    3種方法的平均運(yùn)行時(shí)間在表3中給出,從表3中可以看到CUDA-TP的運(yùn)行速度約是MS-Align+的2倍,這證明基于譜圖比對(duì)思想的并行計(jì)算方法明顯優(yōu)于通過(guò)減少譜圖網(wǎng)格搜索空間來(lái)加速計(jì)算過(guò)程的策略.

    Table 3 Average Running Time of Three Methods表3 3種方法平均運(yùn)行時(shí)間 min

    3.3 CUDA-TP算法吞吐率

    并行算法除了運(yùn)行時(shí)間,有時(shí)更加關(guān)心其運(yùn)行時(shí)的吞吐率.MS-TopDown與MS-Align+是單核CPU 程序,并沒(méi)有進(jìn)行多線程優(yōu)化,這是由于2種方法采用以空間換取時(shí)間的策略,單核運(yùn)行時(shí)就幾乎達(dá)到了電腦資源的占用極限,實(shí)驗(yàn)中二者平均內(nèi)存使用率在90%以上,多核CPU的運(yùn)行幾乎是不可完成的.文獻(xiàn)[18]也指出單核MS-Align+運(yùn)行大規(guī)模人類蛋白質(zhì)質(zhì)譜數(shù)據(jù)時(shí),內(nèi)存需求甚至高達(dá)40 GB.而CUDA-TP并行算法可以在顯存1 GB的電腦上流暢運(yùn)行,其內(nèi)存占用不超過(guò)4 GB,因此具有更廣的適用性.

    CUDA-TP的時(shí)間復(fù)雜度已經(jīng)在2.4節(jié)詳細(xì)給出,3種方法在不同數(shù)據(jù)集上的吞吐率如表4所示,吞吐率指單位時(shí)間內(nèi)算法執(zhí)行的計(jì)算單元數(shù)量.從表4中可以看出CUDA-TP吞吐率約為MS-TopDown和MS-Align+的11倍,這在Ecoli和H4數(shù)據(jù)上表現(xiàn)尤為明顯,說(shuō)明譜圖網(wǎng)格元素的增多雖然增加了運(yùn)行時(shí)間,但吞吐率并沒(méi)有隨著降低.MS-Align+通過(guò)減少求取網(wǎng)格的數(shù)量來(lái)減少計(jì)算時(shí)間,但吞吐率并沒(méi)有實(shí)質(zhì)提升.因此,CUDA-TP在運(yùn)行時(shí)間和算法的吞吐率上要明顯優(yōu)于目前的MS-TopDown和MS-Align+方法.

    Table 4 Throughput of Three Methods 表4 3種方法的吞吐率 10-6cells

    Table 4 Throughput of Three Methods 表4 3種方法的吞吐率 10-6cells

    DatasetCUDA-TPMS-TopDownMS-Align+p65108.59.89.7Ecoli120.410.511.3H4115.111.211.7ST106.78.99.2

    MS-TopDown在數(shù)據(jù)集上的執(zhí)行時(shí)間通常要花費(fèi)大量時(shí)間(本文中MS-TopDown在最大數(shù)據(jù)集上的運(yùn)行時(shí)間在2 d左右),這大大降低了其在蛋白質(zhì)鑒定中的實(shí)用性,而本文提出的基于GPU的蛋白質(zhì)鑒定并行算法運(yùn)行速度是其10倍,有效地解決了譜圖比對(duì)思想應(yīng)用于大規(guī)模數(shù)據(jù)的弊端,與現(xiàn)有的MS-Align+算法相比具有明顯優(yōu)勢(shì),通過(guò)上述多種不同的實(shí)驗(yàn)測(cè)試,驗(yàn)證了CUDA-TP的優(yōu)秀性能.CUDA-TP源代碼托管在github公共服務(wù)網(wǎng)站①.

    4 總結(jié)及展望

    當(dāng)前,“自頂向下”的蛋白質(zhì)組學(xué)飛速發(fā)展,已經(jīng)成為大規(guī)模鑒定蛋白質(zhì)及定位PTM的關(guān)鍵技術(shù),但這些技術(shù)的應(yīng)用算法在運(yùn)行時(shí)間上還存在瓶頸.本文研究了TD策略下的蛋白質(zhì)鑒定問(wèn)題,提出了一種新型的基于GPU的完整蛋白質(zhì)鑒定并行算法CUDA-TP.1)該算法通過(guò)流并行和優(yōu)化MS-Filter來(lái)加速蛋白質(zhì)過(guò)濾;2)引入AVL樹(shù)降低譜圖網(wǎng)格中每個(gè)元素前驅(qū)節(jié)點(diǎn)的求取時(shí)間;3)在GPU端設(shè)計(jì)了計(jì)算迭代公式的CUDA并行架構(gòu).實(shí)驗(yàn)結(jié)果表明CUDA-TP可以有效地加速完整蛋白質(zhì)鑒定,與通過(guò)減少譜圖搜索空間來(lái)?yè)Q取效率的MS-Align+相比具有明顯優(yōu)勢(shì).

    在TD策略下對(duì)完整蛋白質(zhì)進(jìn)行鑒定,除了計(jì)算蛋白質(zhì)與譜圖的匹配分?jǐn)?shù),還需要進(jìn)一步評(píng)估匹配結(jié)果的統(tǒng)計(jì)顯著性.因此如何計(jì)算匹配分?jǐn)?shù)的同時(shí)得到蛋白質(zhì)與譜圖匹配的統(tǒng)計(jì)顯著性評(píng)估結(jié)果,并且不降低時(shí)間運(yùn)行效率,這將是我們下一步的研究工作.

    猜你喜歡
    譜峰數(shù)組線程
    連續(xù)波體制引信多譜峰特性目標(biāo)檢測(cè)方法
    JAVA稀疏矩陣算法
    X射線光電子能譜復(fù)雜譜圖的非線性最小二乘法分析案例
    基于無(wú)基底扣除的數(shù)據(jù)趨勢(shì)累積譜峰檢測(cè)算法
    色譜(2021年6期)2021-05-06 02:18:56
    JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
    巖性密度測(cè)井儀工作原理與典型故障分析
    科技資訊(2020年12期)2020-06-03 04:44:20
    淺談linux多線程協(xié)作
    尋找勾股數(shù)組的歷程
    Linux線程實(shí)現(xiàn)技術(shù)研究
    VB數(shù)組在for循環(huán)中的應(yīng)用
    考試周刊(2012年88期)2012-04-29 04:36:47
    国产三级黄色录像| 中亚洲国语对白在线视频| 亚洲av日韩在线播放| 亚洲国产精品一区二区三区在线| 亚洲av成人不卡在线观看播放网 | 国产成+人综合+亚洲专区| 国产欧美日韩一区二区精品| 大陆偷拍与自拍| 80岁老熟妇乱子伦牲交| 国产一级毛片在线| 久久久久国产精品人妻一区二区| 午夜福利影视在线免费观看| 亚洲情色 制服丝袜| 三级毛片av免费| 成年人黄色毛片网站| 99国产精品一区二区蜜桃av | 国产亚洲欧美在线一区二区| 女警被强在线播放| 午夜福利视频精品| 亚洲伊人色综图| 男女床上黄色一级片免费看| 中文欧美无线码| 国产高清videossex| 国产老妇伦熟女老妇高清| 新久久久久国产一级毛片| 黄色视频不卡| 热99re8久久精品国产| 黄色a级毛片大全视频| 老熟妇乱子伦视频在线观看 | 久久久国产成人免费| 91大片在线观看| 国产精品一区二区精品视频观看| 人妻 亚洲 视频| 满18在线观看网站| 日本猛色少妇xxxxx猛交久久| av不卡在线播放| 伊人久久大香线蕉亚洲五| 国产又爽黄色视频| 国产男女超爽视频在线观看| 菩萨蛮人人尽说江南好唐韦庄| 国产99久久九九免费精品| 亚洲熟女毛片儿| 国产主播在线观看一区二区| 亚洲激情五月婷婷啪啪| 成人18禁高潮啪啪吃奶动态图| 一级a爱视频在线免费观看| av在线老鸭窝| 国产福利在线免费观看视频| 国产激情久久老熟女| 欧美国产精品va在线观看不卡| 日本五十路高清| 在线观看人妻少妇| 日韩 亚洲 欧美在线| 俄罗斯特黄特色一大片| 一本一本久久a久久精品综合妖精| 黄片小视频在线播放| 久久毛片免费看一区二区三区| 国产一区二区激情短视频 | 免费在线观看黄色视频的| 一级片免费观看大全| 欧美精品人与动牲交sv欧美| 最新的欧美精品一区二区| 日韩大码丰满熟妇| 后天国语完整版免费观看| 99久久国产精品久久久| 夫妻午夜视频| 黄片播放在线免费| 日日爽夜夜爽网站| 高清欧美精品videossex| 又紧又爽又黄一区二区| 人人妻,人人澡人人爽秒播| 成年动漫av网址| 欧美精品一区二区大全| 正在播放国产对白刺激| 欧美日韩亚洲高清精品| 国产一区二区三区综合在线观看| 亚洲成人国产一区在线观看| 精品一区二区三区av网在线观看 | 国产精品久久久久久人妻精品电影 | 欧美激情久久久久久爽电影 | 丁香六月欧美| 免费在线观看视频国产中文字幕亚洲 | 免费少妇av软件| 美女高潮喷水抽搐中文字幕| 精品国产乱码久久久久久小说| 黄色毛片三级朝国网站| 亚洲成人免费av在线播放| 少妇裸体淫交视频免费看高清 | 亚洲少妇的诱惑av| 久久久久久久久久久久大奶| 亚洲国产精品一区三区| 亚洲av成人不卡在线观看播放网 | 亚洲欧美日韩另类电影网站| 欧美97在线视频| 一二三四社区在线视频社区8| 国产99久久九九免费精品| 欧美日韩亚洲国产一区二区在线观看 | 人妻 亚洲 视频| 制服人妻中文乱码| 大片电影免费在线观看免费| 狠狠婷婷综合久久久久久88av| 不卡一级毛片| 欧美日韩亚洲高清精品| 精品亚洲成a人片在线观看| tube8黄色片| 精品一区二区三卡| 久久亚洲国产成人精品v| 亚洲精品国产精品久久久不卡| 中文字幕另类日韩欧美亚洲嫩草| 男女免费视频国产| 又大又爽又粗| 日韩有码中文字幕| 老司机午夜十八禁免费视频| 熟女少妇亚洲综合色aaa.| 国产成人av激情在线播放| 美国免费a级毛片| 精品少妇一区二区三区视频日本电影| 女人高潮潮喷娇喘18禁视频| 久久天堂一区二区三区四区| 99热国产这里只有精品6| 国产1区2区3区精品| 自线自在国产av| 老司机影院毛片| 亚洲免费av在线视频| 免费在线观看视频国产中文字幕亚洲 | 一个人免费在线观看的高清视频 | 国产高清视频在线播放一区 | 久久国产精品影院| 欧美日韩中文字幕国产精品一区二区三区 | 亚洲天堂av无毛| 中文字幕高清在线视频| 一区福利在线观看| 狂野欧美激情性bbbbbb| 青春草视频在线免费观看| 黄频高清免费视频| 久久久久久久精品精品| 亚洲欧美色中文字幕在线| 亚洲激情五月婷婷啪啪| 精品国产国语对白av| 国产xxxxx性猛交| 日韩大码丰满熟妇| 亚洲欧美清纯卡通| 欧美黄色片欧美黄色片| 国产国语露脸激情在线看| 午夜福利影视在线免费观看| 在线观看一区二区三区激情| 亚洲精品久久久久久婷婷小说| 黄色a级毛片大全视频| 男人舔女人的私密视频| 亚洲av日韩在线播放| 91大片在线观看| 欧美+亚洲+日韩+国产| 国产伦人伦偷精品视频| 国产高清国产精品国产三级| 在线观看人妻少妇| tocl精华| av不卡在线播放| kizo精华| 少妇的丰满在线观看| 国产精品99久久99久久久不卡| 久久av网站| 99久久国产精品久久久| 国产亚洲av高清不卡| 久久久国产精品麻豆| 极品人妻少妇av视频| 国产高清videossex| 精品国产乱码久久久久久男人| 日本精品一区二区三区蜜桃| 俄罗斯特黄特色一大片| 中文字幕人妻熟女乱码| 久久久精品94久久精品| 高潮久久久久久久久久久不卡| 亚洲自偷自拍图片 自拍| 老熟妇仑乱视频hdxx| 精品国产一区二区三区四区第35| 中文字幕人妻丝袜一区二区| 中亚洲国语对白在线视频| 超色免费av| 欧美精品一区二区免费开放| 日本猛色少妇xxxxx猛交久久| 欧美日韩国产mv在线观看视频| 狠狠精品人妻久久久久久综合| av视频免费观看在线观看| 99香蕉大伊视频| 两性午夜刺激爽爽歪歪视频在线观看 | 美女脱内裤让男人舔精品视频| 美女扒开内裤让男人捅视频| 丝瓜视频免费看黄片| cao死你这个sao货| 亚洲成人手机| 亚洲第一青青草原| 老司机午夜福利在线观看视频 | 97在线人人人人妻| 亚洲色图 男人天堂 中文字幕| 99九九在线精品视频| 久热这里只有精品99| 91国产中文字幕| 国产av国产精品国产| 午夜视频精品福利| av有码第一页| tocl精华| 午夜激情久久久久久久| 91九色精品人成在线观看| 老司机靠b影院| 亚洲成人国产一区在线观看| 日韩大码丰满熟妇| 久久久久精品国产欧美久久久 | 国产av一区二区精品久久| 亚洲黑人精品在线| 自拍欧美九色日韩亚洲蝌蚪91| netflix在线观看网站| 成年av动漫网址| 中文字幕人妻丝袜一区二区| 波多野结衣一区麻豆| 高潮久久久久久久久久久不卡| 婷婷成人精品国产| 美女高潮到喷水免费观看| 国产成人av教育| 亚洲成人手机| 国产精品影院久久| 91精品三级在线观看| 一区二区三区精品91| 正在播放国产对白刺激| 韩国高清视频一区二区三区| 欧美黑人精品巨大| 免费观看av网站的网址| 国产成人欧美在线观看 | 久久性视频一级片| 丰满迷人的少妇在线观看| 亚洲精品成人av观看孕妇| 国产一卡二卡三卡精品| 国产成人av教育| 天天躁日日躁夜夜躁夜夜| 国产91精品成人一区二区三区 | 不卡av一区二区三区| 捣出白浆h1v1| 午夜成年电影在线免费观看| 午夜影院在线不卡| 两人在一起打扑克的视频| 国产亚洲一区二区精品| 深夜精品福利| 久久精品久久久久久噜噜老黄| 中文字幕色久视频| 窝窝影院91人妻| 97精品久久久久久久久久精品| 国产精品久久久av美女十八| 久久女婷五月综合色啪小说| 国产成人av教育| 在线观看舔阴道视频| 99国产极品粉嫩在线观看| 国产一区二区激情短视频 | 亚洲精品国产区一区二| 亚洲成av片中文字幕在线观看| 国产色视频综合| 精品少妇久久久久久888优播| 久久久精品区二区三区| 啦啦啦 在线观看视频| 法律面前人人平等表现在哪些方面 | 国产黄色免费在线视频| 人成视频在线观看免费观看| 一本久久精品| 国产一区二区三区在线臀色熟女 | 国内毛片毛片毛片毛片毛片| 丁香六月欧美| 亚洲国产日韩一区二区| 丰满迷人的少妇在线观看| 青春草视频在线免费观看| 精品国产一区二区久久| 建设人人有责人人尽责人人享有的| 男女免费视频国产| 一本综合久久免费| 大陆偷拍与自拍| 一级毛片女人18水好多| 黄片小视频在线播放| 国产亚洲欧美精品永久| 免费黄频网站在线观看国产| 在线观看免费午夜福利视频| 蜜桃国产av成人99| 久久性视频一级片| 国产精品一二三区在线看| 精品福利永久在线观看| 久久精品亚洲熟妇少妇任你| 狠狠婷婷综合久久久久久88av| 免费一级毛片在线播放高清视频 | 欧美日韩视频精品一区| 麻豆乱淫一区二区| 这个男人来自地球电影免费观看| 亚洲专区国产一区二区| 国产免费福利视频在线观看| 午夜福利视频精品| 日韩熟女老妇一区二区性免费视频| 中文字幕最新亚洲高清| 80岁老熟妇乱子伦牲交| 国产成人啪精品午夜网站| 国产亚洲av片在线观看秒播厂| 国产欧美日韩综合在线一区二区| 婷婷成人精品国产| 如日韩欧美国产精品一区二区三区| 亚洲专区国产一区二区| 亚洲激情五月婷婷啪啪| 一二三四在线观看免费中文在| 香蕉丝袜av| 男男h啪啪无遮挡| 人妻一区二区av| 国产成人啪精品午夜网站| 国产一区有黄有色的免费视频| 亚洲国产av影院在线观看| 超碰97精品在线观看| a级毛片在线看网站| av不卡在线播放| 亚洲性夜色夜夜综合| 久久 成人 亚洲| 99精品欧美一区二区三区四区| 亚洲欧洲日产国产| 久久久精品免费免费高清| 91麻豆av在线| 免费少妇av软件| 人人妻人人澡人人看| 男人爽女人下面视频在线观看| 免费黄频网站在线观看国产| 激情视频va一区二区三区| 一二三四社区在线视频社区8| 91国产中文字幕| 欧美老熟妇乱子伦牲交| 亚洲人成77777在线视频| 亚洲欧洲精品一区二区精品久久久| 飞空精品影院首页| 狠狠婷婷综合久久久久久88av| 亚洲av电影在线观看一区二区三区| 日本91视频免费播放| 国产熟女午夜一区二区三区| 国产成人a∨麻豆精品| 成年动漫av网址| 精品久久久久久电影网| 亚洲欧美激情在线| 免费观看人在逋| 窝窝影院91人妻| 欧美变态另类bdsm刘玥| 久久久国产成人免费| 日韩免费高清中文字幕av| av欧美777| 女人精品久久久久毛片| 久久久久久免费高清国产稀缺| 天堂中文最新版在线下载| 我的亚洲天堂| 91成人精品电影| 久久99一区二区三区| 窝窝影院91人妻| 亚洲精品一二三| 久久久久视频综合| 久久久久久久大尺度免费视频| 99国产精品一区二区蜜桃av | 美女高潮喷水抽搐中文字幕| 最新在线观看一区二区三区| 国产精品99久久99久久久不卡| 十八禁网站免费在线| 久久久久久亚洲精品国产蜜桃av| 欧美激情久久久久久爽电影 | 中文字幕人妻丝袜一区二区| 夫妻午夜视频| 免费少妇av软件| 久久精品久久久久久噜噜老黄| 侵犯人妻中文字幕一二三四区| 91av网站免费观看| 91精品伊人久久大香线蕉| 久热这里只有精品99| 欧美黄色淫秽网站| 婷婷成人精品国产| 亚洲av国产av综合av卡| 五月天丁香电影| 欧美日韩中文字幕国产精品一区二区三区 | 亚洲国产成人一精品久久久| 国产成人精品久久二区二区91| av在线播放精品| h视频一区二区三区| 亚洲一区二区三区欧美精品| 亚洲av成人一区二区三| 一本一本久久a久久精品综合妖精| 亚洲综合色网址| 久久人人97超碰香蕉20202| 国产福利在线免费观看视频| 青春草亚洲视频在线观看| 狠狠精品人妻久久久久久综合| 国产精品 国内视频| 欧美乱码精品一区二区三区| 欧美精品高潮呻吟av久久| 丝袜人妻中文字幕| 亚洲欧美清纯卡通| www.999成人在线观看| av网站在线播放免费| 丝袜在线中文字幕| 国产成人精品久久二区二区91| 91精品国产国语对白视频| 蜜桃在线观看..| 老司机午夜福利在线观看视频 | 欧美国产精品va在线观看不卡| 日韩三级视频一区二区三区| 国产精品 欧美亚洲| 国产野战对白在线观看| 成年人黄色毛片网站| 手机成人av网站| 精品国产一区二区三区久久久樱花| 50天的宝宝边吃奶边哭怎么回事| 精品视频人人做人人爽| 久久久精品国产亚洲av高清涩受| 99热全是精品| av免费在线观看网站| 少妇被粗大的猛进出69影院| 欧美日韩成人在线一区二区| 99国产精品一区二区蜜桃av | 久久人妻福利社区极品人妻图片| 国产99久久九九免费精品| 亚洲av美国av| 99精品久久久久人妻精品| 亚洲中文日韩欧美视频| 久久久国产欧美日韩av| 大陆偷拍与自拍| 国产男人的电影天堂91| 久久久国产欧美日韩av| 大片电影免费在线观看免费| 国产一卡二卡三卡精品| 一级毛片精品| 国产精品av久久久久免费| 在线十欧美十亚洲十日本专区| 亚洲欧美精品自产自拍| 日韩 亚洲 欧美在线| 一区二区三区精品91| 欧美 日韩 精品 国产| 亚洲国产av新网站| 日韩电影二区| 精品一区二区三区av网在线观看 | 男女免费视频国产| 欧美成人午夜精品| 亚洲一卡2卡3卡4卡5卡精品中文| 亚洲少妇的诱惑av| 多毛熟女@视频| 亚洲av美国av| 大片免费播放器 马上看| 黄频高清免费视频| 亚洲欧美日韩另类电影网站| 最黄视频免费看| 乱人伦中国视频| 首页视频小说图片口味搜索| 国产av一区二区精品久久| 黄片播放在线免费| 日韩视频一区二区在线观看| 丰满人妻熟妇乱又伦精品不卡| 国产av一区二区精品久久| 国产精品一区二区免费欧美 | av不卡在线播放| 午夜福利在线观看吧| 999久久久精品免费观看国产| bbb黄色大片| 国产成人系列免费观看| 成人影院久久| 国产精品九九99| 亚洲欧美清纯卡通| 99国产综合亚洲精品| 久久ye,这里只有精品| 亚洲 欧美一区二区三区| 在线永久观看黄色视频| 一本色道久久久久久精品综合| 国产欧美日韩一区二区三区在线| 最近最新免费中文字幕在线| 亚洲自偷自拍图片 自拍| 精品国产乱码久久久久久男人| 大片免费播放器 马上看| 亚洲精品美女久久av网站| 久久久久久久久免费视频了| 美女午夜性视频免费| 欧美黄色淫秽网站| 女人高潮潮喷娇喘18禁视频| 欧美日韩视频精品一区| 秋霞在线观看毛片| 国产精品久久久久久人妻精品电影 | 69av精品久久久久久 | 我要看黄色一级片免费的| 国产精品.久久久| 91大片在线观看| 国产av一区二区精品久久| 欧美日韩亚洲国产一区二区在线观看 | 久久久国产精品麻豆| av不卡在线播放| 欧美日韩成人在线一区二区| 97在线人人人人妻| av一本久久久久| 亚洲中文av在线| 热99国产精品久久久久久7| 亚洲av国产av综合av卡| 99久久人妻综合| 中文精品一卡2卡3卡4更新| 美女高潮喷水抽搐中文字幕| 一本久久精品| 桃红色精品国产亚洲av| 女人高潮潮喷娇喘18禁视频| 国产人伦9x9x在线观看| 女性生殖器流出的白浆| 国产老妇伦熟女老妇高清| 两性夫妻黄色片| 国产野战对白在线观看| 丰满迷人的少妇在线观看| 老司机影院毛片| 亚洲精品一卡2卡三卡4卡5卡 | 日韩中文字幕欧美一区二区| 少妇人妻久久综合中文| 亚洲精品久久成人aⅴ小说| av国产精品久久久久影院| 天天添夜夜摸| 国产成+人综合+亚洲专区| 国产亚洲精品久久久久5区| 亚洲欧美日韩高清在线视频 | 丝袜美足系列| 国产一区二区激情短视频 | www.999成人在线观看| 咕卡用的链子| 亚洲av国产av综合av卡| 十八禁高潮呻吟视频| 国产高清videossex| 色94色欧美一区二区| 欧美精品亚洲一区二区| 一区二区av电影网| 午夜福利一区二区在线看| 亚洲精品av麻豆狂野| 99国产精品一区二区蜜桃av | 日韩中文字幕欧美一区二区| 十分钟在线观看高清视频www| a级片在线免费高清观看视频| 99久久99久久久精品蜜桃| 1024视频免费在线观看| 99久久人妻综合| 国产人伦9x9x在线观看| 俄罗斯特黄特色一大片| 国产亚洲一区二区精品| 爱豆传媒免费全集在线观看| 一二三四社区在线视频社区8| 欧美性长视频在线观看| 美女主播在线视频| 久久亚洲精品不卡| 亚洲国产欧美网| 最新的欧美精品一区二区| 涩涩av久久男人的天堂| 青青草视频在线视频观看| 免费女性裸体啪啪无遮挡网站| 国产无遮挡羞羞视频在线观看| 成人国产av品久久久| 亚洲五月色婷婷综合| 日本一区二区免费在线视频| 日韩欧美一区视频在线观看| 男男h啪啪无遮挡| 中亚洲国语对白在线视频| 日韩制服丝袜自拍偷拍| 精品一区在线观看国产| 99精国产麻豆久久婷婷| 一区二区三区激情视频| 成人国语在线视频| 亚洲,欧美精品.| 天天躁日日躁夜夜躁夜夜| 91国产中文字幕| 久久国产精品男人的天堂亚洲| 亚洲色图综合在线观看| 亚洲国产欧美一区二区综合| 好男人电影高清在线观看| www.熟女人妻精品国产| 国内毛片毛片毛片毛片毛片| 欧美亚洲日本最大视频资源| 色综合欧美亚洲国产小说| 亚洲中文av在线| 侵犯人妻中文字幕一二三四区| 女人精品久久久久毛片| 久久久久精品人妻al黑| 欧美精品亚洲一区二区| 99热网站在线观看| 日本精品一区二区三区蜜桃| 亚洲午夜精品一区,二区,三区| 国产成人一区二区三区免费视频网站| 蜜桃在线观看..| 99国产精品一区二区三区| 日韩有码中文字幕| 欧美午夜高清在线| av不卡在线播放| 18禁黄网站禁片午夜丰满| 蜜桃在线观看..| 不卡av一区二区三区| 国产欧美日韩综合在线一区二区| 久久天堂一区二区三区四区| 欧美 亚洲 国产 日韩一| 操出白浆在线播放| 18禁国产床啪视频网站| 欧美精品啪啪一区二区三区 | 国产精品一二三区在线看| 777米奇影视久久| 亚洲av日韩精品久久久久久密| 亚洲熟女毛片儿| av网站在线播放免费| 亚洲av电影在线进入| 精品国产超薄肉色丝袜足j| 美女主播在线视频| 一个人免费看片子| 久久久久久免费高清国产稀缺| 成人亚洲精品一区在线观看| 亚洲av片天天在线观看| 久久99一区二区三区| 国产精品1区2区在线观看. | 精品久久蜜臀av无| 国产精品久久久人人做人人爽| 两个人看的免费小视频| 黄色视频,在线免费观看| 丝袜在线中文字幕| av一本久久久久| 欧美xxⅹ黑人| 日韩欧美国产一区二区入口| 淫妇啪啪啪对白视频 | 一本大道久久a久久精品| 99热国产这里只有精品6| 久久av网站|