專利名稱:對(duì)基于隨機(jī)上下文無(wú)關(guān)文法的rna二級(jí)結(jié)構(gòu)預(yù)測(cè)進(jìn)行加速的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及對(duì)基于隨機(jī)上下文無(wú)關(guān)文法SCFG(Stochastic Context-free Grammars)模型的RNA 二級(jí)結(jié)構(gòu)預(yù)測(cè)進(jìn)行加速的方法。
背景技術(shù):
隨著人類及其他各物種基因組測(cè)序項(xiàng)目的完成,生物信息學(xué)的研究已步入后基因 組時(shí)代。序列比對(duì)和搜索已成為分子生物學(xué)領(lǐng)域最重要的基礎(chǔ)性工作。目前在DNA和蛋白 質(zhì)序列分析領(lǐng)域已有許多經(jīng)典的研究工具,如BLAST、FASTA、HMMER、ClustalW等。而自20 世紀(jì)80年代中期具有催化性質(zhì)的RNA被發(fā)現(xiàn)以來,RNA所起的各種重要生物化學(xué)功能逐漸 引起了人們的關(guān)注。與DNA序列的雙螺旋結(jié)構(gòu)不同的是,雖然RNA序列本身是一條單鏈,但 它能通過堿基互補(bǔ)配對(duì)形成空間二維乃至三維結(jié)構(gòu),RNA的各種重要功能與其結(jié)構(gòu)直接相 關(guān),隨著近年來非編碼RNA在生物體內(nèi)所起的重要作用被發(fā)現(xiàn),針對(duì)RNA結(jié)構(gòu)的研究受到人 們的日益關(guān)注與重視。 由于RNA序列結(jié)構(gòu)上的保守性大于序列的保守性,有時(shí)序列本身相似度很低的兩 個(gè)RNA分子有可能具有很相似的結(jié)構(gòu),從而具有相近的功能,所以僅僅采用傳統(tǒng)的序列一 維結(jié)構(gòu)分析工具無(wú)法滿足對(duì)RNA結(jié)構(gòu)特性研究的需求。另一方面,由于結(jié)構(gòu)信息的加入大 大增加了 RNA序列分析的復(fù)雜性,直接針對(duì)三維結(jié)構(gòu)的理論預(yù)測(cè)方法還很不成熟。因此研 究RNA 二級(jí)結(jié)構(gòu)是揭示整個(gè)RNA奧秘的根本途徑。關(guān)于RNA序列分析模型及二級(jí)結(jié)構(gòu)預(yù)測(cè) 方法, 一直是近年來生物信息學(xué)研究的熱點(diǎn)和難點(diǎn)問題。 目前,最直接的RNA結(jié)構(gòu)測(cè)定方法是采用X射線衍射和核磁共振,這種方法雖然結(jié) 果精確可靠但是只有在擁有相關(guān)設(shè)備的環(huán)境下才能進(jìn)行,這種方法所用設(shè)備非常昂貴,且 非常耗時(shí)。因此采用計(jì)算機(jī)和數(shù)學(xué)模型預(yù)測(cè)RNA序列二級(jí)結(jié)構(gòu)的方法被廣泛采用,目前主 要有三類RNA 二級(jí)結(jié)構(gòu)預(yù)測(cè)方法基于熱力學(xué)模型的Zuker最小自由能方法,基于比較序列 分析模型的多序列比對(duì)方法和基于SCFG的結(jié)構(gòu)預(yù)測(cè)方法。其中,基于SCFG理論模型的標(biāo) 準(zhǔn)算法為Coche-Younger-Kasami,簡(jiǎn)稱CYK算法,是目前最好的RNA 二級(jí)結(jié)構(gòu)預(yù)測(cè)方法之 無(wú)回溯的CYK算法用于實(shí)現(xiàn)單條序列與單個(gè)RNA家族的共變模型 CM(CovarianceModel)間的比對(duì),從而判斷該RNA序列是否屬于該家族。帶回溯的CYK算法 還可進(jìn)一步得到該序列的二級(jí)結(jié)構(gòu)。CYK算法是一種三維動(dòng)態(tài)規(guī)劃算法,根據(jù)矩陣填充方向 不同,又可分為inside和outside兩種,但本質(zhì)上并無(wú)不同之處。無(wú)回溯CYK/inside算法 的輸入為一條長(zhǎng)度為L(zhǎng)的RNA序列x = Xl. . . &和一個(gè)CM模型。CM模型是Eddy和Durbin 提出的一種進(jìn)行RNA 二級(jí)結(jié)構(gòu)分析的概率模型,它利用SCFG從一組同源RNA序列的多序列 比對(duì)結(jié)果中發(fā)現(xiàn)一致性的結(jié)構(gòu),以刻畫RNA家族共同的結(jié)構(gòu)信息。CM模型由K個(gè)不同的狀 態(tài)以及對(duì)應(yīng)的字符生成概率ek和狀態(tài)轉(zhuǎn)移概率tk組成,狀態(tài)信息中包括當(dāng)前狀態(tài)的類型、 編號(hào)、父/子狀態(tài)的數(shù)量以及編號(hào)。在循環(huán)變量i、 j、 k的控制下,無(wú)回溯CYK/inside算法<formula>formula see original document page 10</formula>
實(shí)際上是不斷地迭代計(jì)算一個(gè)由K個(gè)三角矩陣疊加構(gòu)成的三維矩陣(每一個(gè)三角矩陣對(duì)應(yīng)
CM模型中的一個(gè)狀態(tài)),迭代公式如下(1《i《j+l,0《j《L, 1《k《K):
<formula>formula see original document page 10</formula> 上述公式中的M是CM模型對(duì)應(yīng)的三維矩陣,M(i, j,k)代表當(dāng)前計(jì)算的矩陣元素, i,j,k是元素在三維矩陣中的坐標(biāo)。S(k)表示當(dāng)前狀態(tài)的類型,其中BIF表示分支狀態(tài),其 他狀態(tài)如D、S、E、MP、ML、IL、MR、IR統(tǒng)稱為非分支狀態(tài),分別代表刪除、開始、結(jié)束、匹配、左 匹配、左插入、右匹配和右插入。C(k)表示當(dāng)前狀態(tài)的子狀態(tài)集合,Y代表子狀態(tài)集合中的 元素。Xi和Xj分別表示處于i、 j位置的序列字符,ek和tk分別代表當(dāng)前狀態(tài)下的字符生 成概率和子狀態(tài)轉(zhuǎn)移概率,變量d = j-i+l。 無(wú)回溯的CYK/inside算法的計(jì)算過程是從三維矩陣的最下層(每一層對(duì)應(yīng)CM模 型中的一個(gè)狀態(tài))邊緣的元素開始,沿對(duì)角線按照波前(wavefront)順序進(jìn)行計(jì)算。每層 元素的計(jì)算啟動(dòng)前首先判斷CM模型中當(dāng)前狀態(tài)的類型,根據(jù)當(dāng)前狀態(tài)類型選擇公式中的 一個(gè)分支執(zhí)行。當(dāng)下層三角矩陣所有元素計(jì)算完畢后再計(jì)算上一層元素。計(jì)算過程由下至 上逐層推進(jìn),直到CM模型的根節(jié)點(diǎn)(對(duì)應(yīng)三維矩陣最上層)中的所有元素算完。此時(shí)元素 M(l, L, 1)的值就是最終的比對(duì)分值,它代表該序列與當(dāng)前RNA家族的相似度。
無(wú)回溯的CYK/inside算法時(shí)間復(fù)雜度為O(K L2+B L3),空間復(fù)雜度為0(L2K), 其中L是RNA序列長(zhǎng)度,B是分支狀態(tài)個(gè)數(shù),K是CM模型中的狀態(tài)個(gè)數(shù)。由于巨大的時(shí)空復(fù) 雜度,該算法不適合處理較大規(guī)模的RNA序列。以LSU RNA序列為例,在單個(gè)Alpha處理器 上,執(zhí)行無(wú)回溯的CYK/inside算法需要17391秒(約4. 8小時(shí)),帶回溯的CYK/inside算 法則需要27798秒(約7. 7小時(shí)),因此對(duì)該算法進(jìn)行加速成為一個(gè)極具挑戰(zhàn)性的問題。
目前人們主要采用軟件并行方案基于多處理器平臺(tái)如cluster系統(tǒng)對(duì)CYK算法實(shí) 現(xiàn)加速。Jane C. Hill等人于1991年提出了一種按照對(duì)角線方向并行的無(wú)回溯CYK/inside 算法,在7個(gè)處理器上可以獲得3. 5倍的加速效果。2005年,中科院GM. Tan等人提出了對(duì) CYK/inside算法中的三維動(dòng)態(tài)規(guī)劃矩陣采用層內(nèi)并行處理策略,對(duì)矩陣進(jìn)行等面積的動(dòng)態(tài) 任務(wù)劃分,在多個(gè)處理器上并行執(zhí)行。但由于CYK算法中每個(gè)元素的計(jì)算量與其在矩陣中 所處的位置相關(guān),這種按面積等分的任務(wù)劃分策略會(huì)導(dǎo)致處理器負(fù)載不平衡,并且隨著處 理器個(gè)數(shù)的增加,計(jì)算過程中的通信開銷隨之增長(zhǎng)。算法復(fù)雜的數(shù)據(jù)依賴關(guān)系導(dǎo)致處理器 間的數(shù)據(jù)通信粒度小,通信次數(shù)頻繁,因而并行處理的效率不高。在由8個(gè)節(jié)點(diǎn)(每個(gè)節(jié)點(diǎn) 包括4個(gè)2. 4GHz AMD Opteron CPU和8GB主存, 一共32個(gè)處理器)構(gòu)成的Cluster上執(zhí) 行長(zhǎng)度為1542的LSU RNA序列的比對(duì)只能獲得19倍的加速效果,并行處理效率不到60% 。 新加坡南洋理工大學(xué)T. Liu等人提出在PC集群上按狀態(tài)層方向流水處理的層間并行處理 方案,在設(shè)計(jì)時(shí)根據(jù)元素位置與計(jì)算量之間的關(guān)系,在進(jìn)行計(jì)算區(qū)域劃分時(shí)采用了近似等負(fù)載的任務(wù)劃分策略,即單個(gè)元素計(jì)算量較小的區(qū)域包含的列數(shù)較多,單個(gè)元素計(jì)算量較 大的區(qū)域包含的列數(shù)較少,盡量讓每個(gè)處理器負(fù)責(zé)計(jì)算的元素的計(jì)算量之和相等而不是元 素個(gè)數(shù)相等。研究表明,新算法的并行處理效率顯著提高,在包含20個(gè)Inter-Xeon 2. 0GHz CPU的多處理器平臺(tái)和包含48個(gè)1.0GHz Alpha EV68處理器的Cluster上執(zhí)行LSU RNA序 列的比對(duì),可以達(dá)到16倍和36倍的加速效果。但是大規(guī)模并行計(jì)算機(jī)系統(tǒng)硬件設(shè)備的購(gòu) 置、使用、日常維護(hù)的成本高昂,包含20個(gè)Inter-Xeon CPU的PC Cluster系統(tǒng)硬件成本約 為30萬(wàn)元,系統(tǒng)功耗超過4KW,而由48個(gè)Alpha處理器構(gòu)成的Cluster成本超過40萬(wàn)元, 系統(tǒng)功耗超過6KW,只有少數(shù)機(jī)構(gòu)才有實(shí)力采購(gòu)使用,非一般用戶能用得上。
近年來,F(xiàn)PGA(Field Programmable Gate Array)器件在容量、時(shí)鐘頻率和功能 方面快速發(fā)展,且高端FPGA芯片的硬件成本不足2萬(wàn)元,最大功耗不足30W。目前已有許 多基于FPGA器件對(duì)經(jīng)典的序列比對(duì)算法實(shí)現(xiàn)硬件加速的報(bào)道,例如針對(duì)Smith-Waterman 算法進(jìn)行力口速的有Paracel的GeneMatcher, Compugen的Bioccelerator以及TimeLogic 的DeCypher等等,這些專用加速器可以達(dá)到每秒處理2億個(gè)矩陣單元的峰值計(jì)算能力;針 對(duì)BLAST算法實(shí)現(xiàn)硬件加速的有Mercury BLAST、 RC-BLAST、 Tree-BLAST、 BEE2、 CLC Cube 以及Mitrion的BLAST Accelerator等;針對(duì)RNA 二級(jí)結(jié)構(gòu)預(yù)測(cè)方法實(shí)現(xiàn)硬件加速的有并 行Zuker算法(Tan G. 2006)和并行Nussinov算法(Arpith Jacob 2008)。此外,有一些 硬件實(shí)現(xiàn)的Smith-Waterman算法已經(jīng)申請(qǐng)了專利,例如專利號(hào)分別為5553272,5632041, 5706498, 5964860和6112288的美國(guó)專利等等。但是現(xiàn)有的序列比對(duì)、搜索以及RNA結(jié)構(gòu)預(yù) 測(cè)領(lǐng)域的硬件加速方法都僅限于對(duì)二維動(dòng)態(tài)規(guī)劃矩陣的并行化,未涉及三維動(dòng)態(tài)規(guī)劃矩陣 的硬件加速,也未見有使用FPGA器件實(shí)現(xiàn)基于SCFG的RNA 二級(jí)結(jié)構(gòu)預(yù)測(cè)加速方法的相關(guān) 報(bào)道。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題在于在保證計(jì)算結(jié)果正確性,兼顧較低成本的前提下, 提供一種基于FPGA平臺(tái)的對(duì)基于隨機(jī)上下文無(wú)關(guān)文法的RNA 二級(jí)結(jié)構(gòu)預(yù)測(cè)進(jìn)行加速的方 法,加快使用SCFG進(jìn)行RNA 二級(jí)結(jié)構(gòu)預(yù)測(cè)的速度,使得在RNA序列數(shù)據(jù)量急劇增長(zhǎng)的背景 下,加速后的無(wú)回溯CYK/inside算法能夠滿足生物和醫(yī)學(xué)領(lǐng)域研究的日常需求。
本發(fā)明的技術(shù)方案為利用FPGA芯片實(shí)現(xiàn)細(xì)粒度的資源分配與任務(wù)劃分,采用多 個(gè)處理單元PE (Processing Element)對(duì)無(wú)回溯CYK/inside算法執(zhí)行過程進(jìn)行加速。
具體技術(shù)方案為 1.構(gòu)建由主機(jī)和可重構(gòu)算法加速器組成的異構(gòu)計(jì)算機(jī)系統(tǒng)。主機(jī)是一臺(tái)個(gè)人計(jì)算 機(jī),可重構(gòu)算法加速器插入主機(jī)主板PCI-E插槽與主機(jī)相連。主機(jī)上安裝有多序列比對(duì)程 序、CM模型構(gòu)建程序、CM模型解析程序、可重構(gòu)算法加速器邏輯下載程序和數(shù)據(jù)通訊程序。 主機(jī)通過JTAG(Joint Test Action Group)編程電纜對(duì)可重構(gòu)算法加速器進(jìn)行配置,將輸 入的RNA序列和CM模型通過PCI-E接口加載至可重構(gòu)算法加速器,并啟動(dòng)可重構(gòu)算法加速 器;可重構(gòu)算法加速器完成無(wú)回溯的CYK/inside算法的計(jì)算,將比對(duì)結(jié)果返回給主機(jī)。
可重構(gòu)算法加速器由算法FPGA、動(dòng)態(tài)存儲(chǔ)器DRAM (Dynamic Random AccesssMemory)禾口 PCI-E接口組成。DRAM與算法FPGA相連,用于存儲(chǔ)原始數(shù)據(jù)(包括RNA序列和CM模型)和中間狀態(tài)的計(jì)算結(jié)果,其存儲(chǔ)容量要求大于1GB。 PCI-E接口連接主機(jī)與算法FPGA,實(shí)現(xiàn)主機(jī)與算 法FPGA間的數(shù)據(jù)傳遞。 算法FPGA的JTAG配置端口通過JTAG編程電纜與主機(jī)相連,主機(jī)通過JTAG編程 電纜對(duì)算法FPGA進(jìn)行邏輯配置。 算法FPGA與DRAM和PCI-E接口相連。算法FPGA從PCI-E接口接收數(shù)據(jù)和操作 命令,并對(duì)操作命令進(jìn)行解析如果是數(shù)據(jù)寫命令,將從PCI-E接口接收的數(shù)據(jù)存儲(chǔ)在DRAM 中;如果是啟動(dòng)命令,執(zhí)行無(wú)回溯的CYK/inside計(jì)算,將計(jì)算結(jié)果存儲(chǔ)在DRAM中并向主機(jī) 返回計(jì)算完成信號(hào);如果是數(shù)據(jù)讀命令,將計(jì)算結(jié)果從DRAM中讀出并通過PCI-E接口發(fā)送 給主機(jī)。 算法FPGA由10接口控制器、DRAM存儲(chǔ)控制器、PE陣列控制器、PE陣列、PE同步 與寫回控制器組成。10接口控制器對(duì)外與PCI-E接口相連,對(duì)內(nèi)與DRAM存儲(chǔ)控制器、PE 陣列控制器相連。10接口控制器從PCI-E接口接收原始數(shù)據(jù)(CM模型和RNA序列),并向 DRAM存儲(chǔ)控制器發(fā)出數(shù)據(jù)寫請(qǐng)求,將原始數(shù)據(jù)通過DRAM存儲(chǔ)控制器寫入DRAM;數(shù)據(jù)存儲(chǔ)完 成后,IO接口控制器將數(shù)據(jù)準(zhǔn)備好信號(hào)發(fā)送給PE陣列控制器;IO接口控制器接收主機(jī)發(fā)出 的啟動(dòng)命令,并轉(zhuǎn)發(fā)給PE控制模塊,啟動(dòng)PE陣列;計(jì)算完成后,IO接口控制器接收主機(jī)發(fā) 出的的數(shù)據(jù)讀命令,通過DRAM存儲(chǔ)控制器將序列比對(duì)得分從DRAM中讀出,通過PCI-E接口 送回主機(jī)。 DRAM存儲(chǔ)控制器對(duì)外與DRAM相連,對(duì)內(nèi)與10接口控制器、PE陣列控制器、PE陣 列、PE同步與寫回控制器相連,它接收來自IO接口控制器的數(shù)據(jù)寫請(qǐng)求,將原始數(shù)據(jù)寫入 DRAM ;接收來自PE陣列控制器的數(shù)據(jù)讀請(qǐng)求,將RNA序列從DRAM讀出并發(fā)送至PE陣列; 接收來自PE陣列的CM模型和數(shù)據(jù)讀請(qǐng)求,將CM模型當(dāng)前狀態(tài)信息和計(jì)算所需的操作數(shù)從 DRAM讀出發(fā)送給PE陣列;接收來自PE同步與寫回控制器的寫請(qǐng)求,將由PE陣列產(chǎn)生的數(shù) 據(jù)寫回DRAM。 PE陣列控制器與10接口控制器、DRAM存儲(chǔ)控制器、PE同步與寫回控制器和PE陣 列相連。它從IO接口控制器接收數(shù)據(jù)準(zhǔn)備好信號(hào)后啟動(dòng)PE陣列。PE陣列控制器向DRAM 存儲(chǔ)控制器發(fā)數(shù)據(jù)讀請(qǐng)求,使PE陣列從DRAM獲得RNA序列。PE陣列控制器通過控制當(dāng)前 計(jì)算元素的下標(biāo)i, j, k的值實(shí)現(xiàn)PE陣列的初始化并對(duì)三維矩陣M實(shí)施按列循環(huán)分配和對(duì) 列元素實(shí)現(xiàn)由上至下或者由下至上的計(jì)算。PE陣列控制器在收到PE同步與寫回控制器發(fā) 出的PE同步與寫回完成信號(hào)后產(chǎn)生PE控制信號(hào),為PE陣列分配新的計(jì)算任務(wù),更新PE計(jì) 算元素的i, j,k,啟動(dòng)下一列元素的計(jì)算。 PE同步與寫回控制器與PE陣列和DRAM存儲(chǔ)控制器相連,它根據(jù)當(dāng)前元素的下標(biāo) i, j, k判斷PE的計(jì)算是否終止。由于每一列元素的計(jì)算量并不完全相等,當(dāng)某個(gè)PE完成 本列元素的計(jì)算后,PE同步與寫回控制器控制該P(yáng)E進(jìn)入同步等待狀態(tài)(此時(shí)陣列中的其他 PE可能仍在計(jì)算),并接收該P(yáng)E發(fā)出的數(shù)據(jù)寫回請(qǐng)求,按照先請(qǐng)求先服務(wù)的原則將PE陣列 存儲(chǔ)在數(shù)據(jù)緩存區(qū)中的計(jì)算結(jié)果讀出,通過DRAM存儲(chǔ)控制器寫回DRAM。寫回操作完成后, PE同步與寫回控制器向PE陣列控制器發(fā)出同步與寫回完成信號(hào)。 PE陣列負(fù)責(zé)三維動(dòng)態(tài)規(guī)劃矩陣的并行計(jì)算,它由n個(gè)PE、n個(gè)數(shù)據(jù)傳遞寄存器組和 n個(gè)數(shù)據(jù)緩存區(qū)構(gòu)成(n為正整數(shù),其大小受FPGA器件片內(nèi)邏輯和存儲(chǔ)容量的限制,且在陣 列規(guī)模和時(shí)鐘頻率之間進(jìn)行折中)。每個(gè)PE都有一片存放計(jì)算結(jié)果的數(shù)據(jù)緩存區(qū),每個(gè)PE都與DRAM存儲(chǔ)控制器、PE陣列控制器、PE同步與寫回控制器相連,相鄰PE之間通過一個(gè)數(shù) 據(jù)傳遞寄存器組相連。n個(gè)PE串聯(lián)構(gòu)成線性陣列,第一個(gè)PE為主PE,其他PE都是從PE, 稱為第1從PE,第2從PE,…,第n-l從PE。只有主PE能夠向DRAM存儲(chǔ)控制器發(fā)送數(shù)據(jù) 讀請(qǐng)求,從PE都只能被動(dòng)地從DRAM存儲(chǔ)控制器接收數(shù)據(jù)。每個(gè)數(shù)據(jù)傳遞寄存器組與左右 相鄰的PE相連(最后一個(gè)數(shù)據(jù)傳遞寄存器組連接第n-1從PE和主PE),使用FPGA片內(nèi)分 布式存儲(chǔ)模塊實(shí)現(xiàn),采用雙端口設(shè)計(jì),可以同時(shí)被本PE和下一個(gè)PE訪問,用于緩存從前一 個(gè)PE的數(shù)據(jù)緩存區(qū)中讀出的數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)在PE陣列間的傳遞。所有PE的數(shù)據(jù)緩存區(qū)都 與PE同步與寫回控制器相連。數(shù)據(jù)緩存區(qū)使用FPGA片內(nèi)集中式存儲(chǔ)模塊實(shí)現(xiàn),采用雙端 口設(shè)計(jì),可以同時(shí)被本PE和下一個(gè)PE訪問。每個(gè)數(shù)據(jù)緩存區(qū)都由多個(gè)獨(dú)立的存儲(chǔ)區(qū)域構(gòu) 成,每個(gè)存儲(chǔ)區(qū)域存儲(chǔ)三角矩陣的一列元素,所有存儲(chǔ)區(qū)域中存放的元素的列編號(hào)都相同, 但這些列元素都位于三維矩陣M的不同層。每個(gè)存儲(chǔ)區(qū)域都由三個(gè)寄存器標(biāo)明該區(qū)域的使 用狀態(tài),其中位置寄存器deck」d記錄所存儲(chǔ)的數(shù)據(jù)所處的狀態(tài)層編號(hào),父狀態(tài)寄存器p— cnt記錄還未計(jì)算出的本狀態(tài)層對(duì)應(yīng)的父狀態(tài)數(shù)量(即本狀態(tài)層元素還要用到的次數(shù)),區(qū) 域數(shù)據(jù)有效標(biāo)志寄存器BRAM_valid表示對(duì)應(yīng)區(qū)域存儲(chǔ)的數(shù)據(jù)是否有效。
PE由PE控制模塊、分值計(jì)算模塊、RNA序列存儲(chǔ)器、CM模型存儲(chǔ)器組成。
分值計(jì)算模塊對(duì)外與該P(yáng)E的數(shù)據(jù)緩存區(qū)相連,從數(shù)據(jù)緩存區(qū)中讀出當(dāng)前狀態(tài)的 子狀態(tài)數(shù)據(jù),按照無(wú)回溯CYK/inside遞歸公式實(shí)現(xiàn)對(duì)三維動(dòng)態(tài)規(guī)劃矩陣元素的計(jì)算,并將 計(jì)算結(jié)果寫入數(shù)據(jù)緩存區(qū)。分值計(jì)算模塊對(duì)內(nèi)與CM模型存儲(chǔ)器和PE控制模塊相連,它從 CM模型存儲(chǔ)器中讀出CM模型當(dāng)前狀態(tài)信息,從PE控制模塊或者從數(shù)據(jù)緩存區(qū)中讀出計(jì)算 所需的子狀態(tài)數(shù)據(jù),寫入分值計(jì)算模塊內(nèi)部的狀態(tài)寄存器中。 分值計(jì)算模塊由結(jié)束狀態(tài)計(jì)算模塊、非分支狀態(tài)計(jì)算模塊和分支狀態(tài)計(jì)算模塊三 個(gè)子模塊構(gòu)成,分別實(shí)現(xiàn)結(jié)束狀態(tài)、非分支狀態(tài)(不包括結(jié)束狀態(tài))和分支狀態(tài)層的計(jì)算。 三個(gè)子模塊彼此獨(dú)立,但都與數(shù)據(jù)緩存區(qū)、CM模型存儲(chǔ)器和PE控制模塊相連。三個(gè)子模塊 均由狀態(tài)寄存器、加法器、比較器和數(shù)據(jù)輸出寄存器組成。狀態(tài)寄存器與加法器相連,保存 CM模型的當(dāng)前狀態(tài)信息。加法器與狀態(tài)寄存器、PE控制模塊、比較器相連,非分支狀態(tài)計(jì)算 模塊和分支狀態(tài)計(jì)算模塊中的加法器還與數(shù)據(jù)緩存區(qū)相連(結(jié)束狀態(tài)計(jì)算模塊與數(shù)據(jù)緩 存區(qū)的數(shù)據(jù)通路連接是單向的,只寫數(shù)據(jù)緩存區(qū)而不從數(shù)據(jù)緩存區(qū)中讀回?cái)?shù)據(jù)),加法器從 PE控制模塊和數(shù)據(jù)緩存區(qū)中載入操作數(shù),從狀態(tài)寄存器中讀取當(dāng)前狀態(tài)下的字符生成概率 ek和狀態(tài)轉(zhuǎn)移概率tk,執(zhí)行加法運(yùn)算,并將結(jié)果傳遞給比較器。比較器與加法器和輸出寄存 器相連,它從加法器獲得當(dāng)前的計(jì)算結(jié)果,從輸出寄存器獲得當(dāng)前最大值,在PE控制模塊 的控制下旌計(jì)算結(jié)果和當(dāng)前最大值二者中的S^寫入輸出寄存器。輸出寄存器與比較器 和數(shù)據(jù)緩存區(qū)相連,它保存當(dāng)前狀態(tài)的所有子狀態(tài)下運(yùn)算結(jié)果的最大值,并在計(jì)算完成后 將輸出寄存器中的值即元素M(i, j,k)寫入數(shù)據(jù)緩存區(qū)。 RNA序列存儲(chǔ)器與PE控制模塊和CM模型存儲(chǔ)器相連,采用FPGA片內(nèi)分布式存儲(chǔ) 模塊實(shí)現(xiàn),用于存儲(chǔ)經(jīng)過二進(jìn)制編碼后的RNA序列(使用00、01、10、11表示RNA序列中的 四種堿基A、 C、 G、 U) 。 RNA序列存儲(chǔ)器的每個(gè)字節(jié)可存放4個(gè)序列字符,因此RNA序列存儲(chǔ) 器容量應(yīng)當(dāng)大于L/4(字節(jié)),L為按字符計(jì)數(shù)的RNA序列長(zhǎng)度。PE控制模塊將從DRAM中 讀出的RNA序列存入RNA序列存儲(chǔ)器(由主PE從DRAM讀出,并廣播至所有PE)。
對(duì)于FPGA的片內(nèi)存儲(chǔ)容量而言,整個(gè)CM模型的存儲(chǔ)需求過大(超過512KB),不宜將其整體存儲(chǔ)在FPGA片內(nèi)存儲(chǔ)器中,因此為每一個(gè)PE設(shè)置一個(gè)CM模型存儲(chǔ)器,它與RNA序 列存儲(chǔ)器和分支計(jì)算模塊相連,容量大于2Kb,只存儲(chǔ)CM模型當(dāng)前狀態(tài)下的相關(guān)信息,包括 當(dāng)前狀態(tài)的類型Stype、編號(hào)Statejd、最后一個(gè)父狀態(tài)的類型P—last、父狀態(tài)數(shù)量P—皿m、 第一個(gè)子狀態(tài)的類型C_f irst、子狀態(tài)數(shù)量C_num以及RNA字符的生成概率ek和轉(zhuǎn)移概率 tk。 PE控制模塊對(duì)外與IO接口控制器、DRAM存儲(chǔ)控制器和數(shù)據(jù)傳遞寄存器組相連。
它接收IO接口控制器發(fā)出的啟動(dòng)命令,啟動(dòng)PE的計(jì)算;計(jì)算時(shí)通過DRAM存儲(chǔ)控制器訪問
DRAM,讀回CM模型、RNA序列及中間結(jié)果;如果當(dāng)前狀態(tài)為匹配、右插入和右匹配,PE控制
模塊還將訪問前一個(gè)PE的數(shù)據(jù)緩存區(qū),從數(shù)據(jù)傳遞寄存器組讀回返回的數(shù)據(jù)。 PE控制模塊對(duì)內(nèi)與RNA序列存儲(chǔ)器、分值計(jì)算模塊和PE同步與寫回控制器相連。
PE控制模塊是一個(gè)控制狀態(tài)機(jī),負(fù)責(zé)控制PE的初始化、數(shù)據(jù)載入、分值計(jì)算、數(shù)據(jù)同步以及
數(shù)據(jù)寫回和緩存區(qū)數(shù)據(jù)替換,控制狀態(tài)機(jī)由開始狀態(tài)、PE初始化狀態(tài)、讀CM模型狀態(tài)、狀
態(tài)類型判斷狀態(tài)、結(jié)束狀態(tài)元素計(jì)算狀態(tài)、非分支狀態(tài)元素計(jì)算狀態(tài)、分支狀態(tài)元素計(jì)算狀
態(tài)、列元素計(jì)算完成狀態(tài)、寫回狀態(tài)、同步等待狀態(tài)、緩存區(qū)數(shù)據(jù)替換狀態(tài)、結(jié)束條件判斷狀
態(tài)、結(jié)束狀態(tài)這13個(gè)狀態(tài)構(gòu)成。 主機(jī)使用EDA工具對(duì)算法FPGA的邏輯進(jìn)行綜合,生成二進(jìn)制編碼的配置文件,并 通過JTAG編程電纜對(duì)算法FPGA進(jìn)行配置。配置過程結(jié)束后,算法FPGA自動(dòng)復(fù)位,可重構(gòu) 算法加速器進(jìn)入正常工作狀態(tài),等待主機(jī)發(fā)出操作指令。 第二步,主機(jī)使用多序列比對(duì)程序和CM模型構(gòu)建程序?qū)⑤斎氲囊唤M同源RNA序 列轉(zhuǎn)換為CM模型,然后使用模型解析程序?qū)M模型進(jìn)行格式化將CM模型文件中的數(shù)據(jù) 按照狀態(tài)編號(hào)的升序逐行順序地存放,為每個(gè)狀態(tài)分配存儲(chǔ)單元,并對(duì)不足一行(指的是 CM模型文件中的每個(gè)狀態(tài)對(duì)應(yīng)的數(shù)據(jù)量的最大長(zhǎng)度)的狀態(tài)數(shù)據(jù)信息進(jìn)行填充補(bǔ)0,以解 決由于CM模型中不同狀態(tài)行包含的信息量不等的問題,實(shí)現(xiàn)CM模型在可重構(gòu)算法加速器 DRAM中的規(guī)整存儲(chǔ),從而簡(jiǎn)化地址換算。格式化完成后,主機(jī)通過PCI-E接口將CM模型發(fā) 送至可重構(gòu)算法加速器的DRAM。 第三步,主機(jī)對(duì)輸入的RNA序列進(jìn)行二進(jìn)制編碼,使用2位二進(jìn)制數(shù)00、01、10、11 對(duì)RNA序列中的A、 C、 G、 U字符進(jìn)行編碼,并將編碼后的序列發(fā)送至可重構(gòu)算法加速器的 D廳。 第四步,主機(jī)向可重構(gòu)算法加速器發(fā)送啟動(dòng)命令,啟動(dòng)算法FPGA,主機(jī)進(jìn)入等待狀 態(tài)。啟動(dòng)命令由操作碼、RNA序列長(zhǎng)度、RNA序列在DRAM中存放的基地址、CM模型狀態(tài)數(shù) 量、CM模型在DRAM中存放的基地址、中間結(jié)果和最終計(jì)算結(jié)果在DRAM中存放的基地址組 成。算法FPGA接收到啟動(dòng)命令后啟動(dòng)PE陣列執(zhí)行無(wú)回溯CYK/inside算法計(jì)算,計(jì)算過程 包括以下步驟 4. 1 PE初始化,算法FPGA在收到主機(jī)發(fā)出的啟動(dòng)命令后,立即啟動(dòng)PE陣列的初始 化過程,具體步驟如下 4. 1. 1所有PE在各自的數(shù)據(jù)緩存區(qū)中選擇編號(hào)最小的一個(gè)空閑區(qū)域保存計(jì)算結(jié) 果(每個(gè)PE每次負(fù)責(zé)計(jì)算三角矩陣的一列);4. 1. 2主PE通過DRAM存儲(chǔ)控制器從DRAM中依次讀出RNA序列和CM模型第K行
數(shù)據(jù),并發(fā)送至所有的從PE,從PE接收RNA序列和CM模型第K行數(shù)據(jù)分別存儲(chǔ)在各自的RNA序列存儲(chǔ)器和CM模型存儲(chǔ)器中; 4. 1. 3所有PE根據(jù)各自在PE陣列中的編號(hào)為將要計(jì)算的元素下標(biāo)賦初始值i = P_id, j =P_id,k = K。 i, j,k為元素M(i, j,k)在三維矩陣中的坐標(biāo),i, j為元素在矩陣 中的行/列坐標(biāo),k為狀態(tài)編號(hào),P」d為PE的編號(hào),其中主PE的P」d = l,從PE的P」d 為2 n之間的整數(shù),K為CM模型中的狀態(tài)數(shù)量同時(shí)也是矩陣最底層的編號(hào),n為PE的數(shù) 4. 2數(shù)據(jù)載入 各PE根據(jù)當(dāng)前狀態(tài)的類型將操作數(shù)載入分值計(jì)算模塊, 一共分為五種情況
參如果當(dāng)前狀態(tài)類型為S、 D、 IL、 ML,則PE分值計(jì)算模塊從該P(yáng)E的數(shù)據(jù)緩存區(qū)中 載入當(dāng)前狀態(tài)的所有子狀態(tài)數(shù)據(jù)層中的第j列元素; 參如果當(dāng)前狀態(tài)類型為分支(BIF)狀態(tài),且Pjd = l,則PE從以下兩個(gè)位置獲得 計(jì)算所需的操作數(shù)1)從本地?cái)?shù)據(jù)緩存區(qū)中載入分支狀態(tài)右子狀態(tài)層的第j列元素;2)向 DRAM存儲(chǔ)控制器發(fā)讀請(qǐng)求,從DRAM中載入分支狀態(tài)左子狀態(tài)層的第i行元素,并將其廣播 至所有PE ; 參如果當(dāng)前狀態(tài)類型為分支(BIF)狀態(tài),且2《P_id《n,則PE從以下兩個(gè)位置 獲得計(jì)算所需的操作數(shù)1)從PE數(shù)據(jù)緩存區(qū)中載入右子狀態(tài)數(shù)據(jù)層的第j列元素;2)等待 接收主PE從DRAM中載入的左子狀態(tài)數(shù)據(jù)層的第i行元素; 參如果當(dāng)前狀態(tài)類型為IR、MR或者M(jìn)P(分別對(duì)應(yīng)CM模型中的右插入、右匹配和匹 配狀態(tài)),且P」d = 1,則PE向DRAM存儲(chǔ)控制器發(fā)讀請(qǐng)求,從DRAM載入當(dāng)前狀態(tài)的所有子 狀態(tài)數(shù)據(jù)層的第j-l列元素; 參如果當(dāng)前狀態(tài)類型為IR、MR或者M(jìn)P,且2《P_id《n,則從前一個(gè)PE的數(shù)據(jù)緩 存區(qū)中載入當(dāng)前狀態(tài)的所有子狀態(tài)數(shù)據(jù)層的j-l列元素;
4. 3計(jì)算比對(duì)得分 串行無(wú)回溯CYK/inside算法的計(jì)算過程是從三維矩陣最下層三角矩陣的主對(duì)角 線元素開始,沿對(duì)角線按照波前順序進(jìn)行計(jì)算。當(dāng)下層三角矩陣元素全部填充完后再計(jì)算 上一層的元素,但這種方法在FPGA平臺(tái)上并不適用。首先串行無(wú)回溯CYK/inside算法多 維度、非一致性的數(shù)據(jù)依賴關(guān)系導(dǎo)致計(jì)算過程中任務(wù)劃分困難,難以實(shí)現(xiàn)PE之間的負(fù)載平 衡;其次,串行無(wú)回溯CYK/inside程序的空間局部性差(訪存粒度小(數(shù)據(jù)量以KB為單 位),每次讀寫操作的數(shù)據(jù)量不等且在空間上不連續(xù)),導(dǎo)致訪存調(diào)度困難;第三,F(xiàn)PGA片 內(nèi)存儲(chǔ)資源不能滿足矩陣0(N3)的存儲(chǔ)需求,導(dǎo)致片外存儲(chǔ)器訪問延時(shí)將成為提高并行處 理效率的瓶頸。計(jì)算過程中三維矩陣每一層元素的存儲(chǔ)需求約為32MB,而目前容量最大的 FPGA器件片內(nèi)存儲(chǔ)容量不足2MB,因此有限的片內(nèi)存儲(chǔ)容量和相對(duì)較低的存儲(chǔ)帶寬是基于 FPGA平臺(tái)對(duì)無(wú)回溯CYK/inside算法進(jìn)行加速面臨的挑戰(zhàn)。 為此,本發(fā)明采用"按區(qū)域分割"和"逐層按列并行處理"的任務(wù)劃分策略實(shí)現(xiàn)對(duì) 三維動(dòng)態(tài)規(guī)劃矩陣的細(xì)粒度并行計(jì)算,方法是 4.3. 1首先對(duì)三維矩陣按狀態(tài)層方向進(jìn)行縱切,將其垂直分割為s個(gè)區(qū)域 (s=「Z/"l , L為RNA序列的長(zhǎng)度),每一個(gè)區(qū)域仍是一個(gè)三維矩陣,每個(gè)區(qū)域都包含K層,每 一層包含n列元素;然后對(duì)每一個(gè)區(qū)域逐層計(jì)算從第1個(gè)區(qū)域的第K層出發(fā),當(dāng)?shù)贙層計(jì) 算完成后再算第K-l層,直到第1個(gè)區(qū)域的第1層算完,然后再計(jì)算第2個(gè)區(qū)域的第K層,第K-1層,…,第1層;之后再計(jì)算第3個(gè)區(qū)域…,直到最后一個(gè)區(qū)域的第1層算完。對(duì)每 一層的計(jì)算而言,每個(gè)PE負(fù)責(zé)計(jì)算當(dāng)前狀態(tài)層中的一列,PE計(jì)算的元素的列號(hào)與PE在陣 列中的序號(hào)P」d對(duì)應(yīng)。主PE的編號(hào)P」d二 l,負(fù)責(zé)計(jì)算本區(qū)域第l列元素,從PE計(jì)算本 區(qū)域的第2 n列元素。 4. 3. 2陣列中的n個(gè)PE采用單程序多數(shù)據(jù)流(Single Program Multiple Data) 方式同時(shí)計(jì)算位于矩陣不同列的n個(gè)數(shù)據(jù),以達(dá)到對(duì)計(jì)算過程進(jìn)行加速的效果。PE都使用 無(wú)回溯CYK/inside算法的迭代公式對(duì)矩陣元素進(jìn)行計(jì)算,但計(jì)算時(shí)根據(jù)不同的狀態(tài)類型 采用不同的計(jì)算順序,方法是 4.3.2.1如果當(dāng)前狀態(tài)k是分支狀態(tài),則每一個(gè)PE都從各自列的頂部位置(i = 1)開始按照由上至下的順序計(jì)算。當(dāng)前狀態(tài)層的計(jì)算啟動(dòng)時(shí),主PE計(jì)算元素(1, j),第l 從PE計(jì)算元素(1, j+l),…,第n-l從PE計(jì)算元素(1, j+n-l), j為元素在矩陣中的列坐 標(biāo),1《j《L。當(dāng)?shù)?行的n個(gè)元素計(jì)算完之后,所有PE同時(shí)更新元素的橫坐標(biāo),計(jì)算下 一行(i = 2)的n個(gè)元素。每一個(gè)PE由上至下串行計(jì)算本列元素,整個(gè)PE陣列每次完成 本狀態(tài)層中的一行元素的計(jì)算。當(dāng)一個(gè)PE計(jì)算的元素坐標(biāo)i = j時(shí)(即到達(dá)各自列的底 部位置),PE計(jì)算暫停,進(jìn)入等待狀態(tài)。由于三角矩陣每一列元素的個(gè)數(shù)不等,PE按編號(hào)順 序依次進(jìn)入同步等待狀態(tài),直到收到最后一個(gè)從PE的計(jì)算完成信號(hào)。特別地,當(dāng)n = 1時(shí), 此時(shí)沒有從PE,主PE按照從左至右的順序?qū)仃囋剡M(jìn)行逐列計(jì)算,在每一列內(nèi)部按照由 上至下的順序?qū)γ恳粋€(gè)元素進(jìn)行計(jì)算。 4. 3. 2. 2如果當(dāng)前狀態(tài)k是非分支狀態(tài),則每一個(gè)PE都從各自列的底部位置(i = j)開始,按照由下至上的順序計(jì)算。當(dāng)前狀態(tài)層的計(jì)算啟動(dòng)時(shí),所有PE計(jì)算的元素都位于 三角矩陣的主對(duì)角線上主PE計(jì)算元素(i,j),第l從PE計(jì)算元素(i+l,j+l),…,第n-l 從PE計(jì)算元素(i+n-l, j+n-l),l《i《L, i《j《L。位于同一條對(duì)角線上的元素的計(jì) 算量都相等,因此所有PE都可以同時(shí)完成當(dāng)前元素的計(jì)算,當(dāng)前對(duì)角線上的n個(gè)元素計(jì)算 完之后,所有PE同時(shí)向上移動(dòng)一個(gè)計(jì)算位置,主PE計(jì)算元素(i-l, j),第1從PE計(jì)算元素 (i, j+l),…,第n-1從PE計(jì)算元素(i+n-2, j+n_l)。當(dāng)PE計(jì)算的元素行坐標(biāo)i = 1時(shí), PE計(jì)算暫停,進(jìn)入等待狀態(tài)(如果計(jì)算結(jié)果需要寫回DRAM,PE將在等待狀態(tài)下發(fā)出寫回請(qǐng) 求)。同樣,由于三角矩陣每一列元素的個(gè)數(shù)不等,PE將按編號(hào)順序依次進(jìn)入等待狀態(tài)。主 PE算完元素(l,j)后進(jìn)入等待狀態(tài),此時(shí)第l從PE計(jì)算元素(l,j+l),…,第n-l從PE計(jì) 算元素(n-l, j+n-l)。第l從PE計(jì)算完(1, j+l)后進(jìn)入等待狀態(tài),此時(shí)第2從PE計(jì)算元 素(1, j+2),…,第n-l從PE計(jì)算元素(n-2, j+n-l),第2從PE計(jì)算完元素(1, j+2)后也 進(jìn)入等待狀態(tài),…,直到第n-l從PE的算完元素(1, j+n-l)后本區(qū)域當(dāng)前狀態(tài)層的計(jì)算結(jié) 束。特別地,當(dāng)11= l時(shí),此時(shí)沒有從PE,主PE按照從左至右的順序?qū)仃囋剡M(jìn)行逐列計(jì) 算,在每一列內(nèi)部按照由下至上的順序?qū)γ恳粋€(gè)元素進(jìn)行計(jì)算。由于只有一個(gè)PE,此時(shí)也就 不存在同步等待,當(dāng)一列元素計(jì)算完成后如果需要寫回,則直接發(fā)出寫回請(qǐng)求。
4. 4所有PE的列元素計(jì)算結(jié)果都保存在PE各自的數(shù)據(jù)緩存區(qū)中,PE根據(jù)狀態(tài)類 型確定是否將數(shù)據(jù)寫回DRAM。 4.4. 1如果當(dāng)前狀態(tài)是分支狀態(tài)的左子狀態(tài),則所有PE都將計(jì)算結(jié)果寫回 DRAM(因?yàn)榉种У淖笞訝顟B(tài)數(shù)據(jù)在未來很長(zhǎng)一段時(shí)間內(nèi)不會(huì)被使用)。方法是PE完成本 列元素的計(jì)算后向PE同步與寫回控制器發(fā)數(shù)據(jù)寫回請(qǐng)求,隨后PE同步與寫回控制器將數(shù)據(jù)從PE的數(shù)據(jù)緩存區(qū)中讀出,通過DRAM存儲(chǔ)控制器將數(shù)據(jù)寫回DRAM。如果陣列中同時(shí)有
多個(gè)PE發(fā)數(shù)據(jù)寫回請(qǐng)求,PE同步與寫回控制器依次將各PE的數(shù)據(jù)寫回DRAM。 4. 4. 2如果當(dāng)前狀態(tài)是匹配、右插入或者右匹配狀態(tài),則只有最后一個(gè)從PE將計(jì)
算結(jié)果寫回DRAM(因?yàn)樵揚(yáng)E的計(jì)算結(jié)果位于本區(qū)域當(dāng)前狀態(tài)層的的最右側(cè),在下一個(gè)區(qū)域
同一狀態(tài)層計(jì)算時(shí)將會(huì)被用到),其它PE的計(jì)算結(jié)果都保存在各自數(shù)據(jù)緩存區(qū)中,以便在
后續(xù)的計(jì)算中被本PE使用或通過數(shù)據(jù)傳遞寄存器組傳遞給下一個(gè)PE。 4. 5對(duì)各PE進(jìn)行同步。由于三角矩陣每一列的元素個(gè)數(shù)和計(jì)算量不等,導(dǎo)致PE間
的負(fù)載并不完全平衡,當(dāng)陣列中的某個(gè)PE完成本列元素的計(jì)算時(shí),陣列中該P(yáng)E之后的處理
單元仍然處于計(jì)算狀態(tài)。為了保持?jǐn)?shù)據(jù)依賴關(guān)系的一致性,該P(yáng)E在完成本列元素的計(jì)算之
后進(jìn)入同步等待狀態(tài)。PE在同步等待狀態(tài)下收到第n-1從PE發(fā)出的當(dāng)前狀態(tài)層計(jì)算完成
信號(hào)后進(jìn)入緩存區(qū)數(shù)據(jù)替換狀態(tài)。PE在緩存區(qū)數(shù)據(jù)替換狀態(tài)下判斷是否存在某個(gè)存儲(chǔ)區(qū)域
的父狀態(tài)寄存器P—cnt數(shù)值為O,若為0則釋放該狀態(tài)占用的數(shù)據(jù)緩存區(qū)。 4.6加載新任務(wù)。當(dāng)每個(gè)PE都收到第n-l從PE(P」d二n)的計(jì)算完成信號(hào)時(shí),PE
陣列控制器將本區(qū)域中的下一個(gè)狀態(tài)層加載至PE陣列,為每一個(gè)PE分配新狀態(tài)層中的一
列元素,即為變量i, j, k賦值如果k > O,則i = P_id, j = P_id, k = k-l,載入CM模型
的第k-1行數(shù)據(jù);否則,i = P_id, j = j+n, k = K,載入CM模型的第K行數(shù)據(jù),隨后PE控
制狀態(tài)機(jī)進(jìn)入結(jié)束條件判斷狀態(tài)。如果j > L,則進(jìn)入結(jié)束狀態(tài)(此時(shí)當(dāng)前PE處于空閑狀
態(tài),直到陣列中的所有PE計(jì)算完成),否則在數(shù)據(jù)緩存區(qū)尋找一個(gè)新的編號(hào)最小的空閑區(qū)
域,然后轉(zhuǎn)4. 2,對(duì)下一個(gè)狀態(tài)層進(jìn)行計(jì)算; 4.7當(dāng)所有PE都進(jìn)入結(jié)束狀態(tài)后,主PE將最終的計(jì)算結(jié)果(元素M(l,L,l)的值,
它代表最終的比對(duì)得分)寫回DRAM,算法FPGA向主機(jī)發(fā)計(jì)算完成信號(hào),PE計(jì)算過程結(jié)束。
PE控制模塊將所有寄存器清O,回到開始狀態(tài),等待主機(jī)發(fā)新的啟動(dòng)命令。 第五步,主機(jī)接收到可重構(gòu)算法加速器返回的計(jì)算完成信號(hào)后通過PCI-E接口向
可重構(gòu)算法加速器發(fā)數(shù)據(jù)讀命令,算法FPGA接收數(shù)據(jù)讀命令將計(jì)算結(jié)果從DRAM中讀出,通
過PCI-E接口轉(zhuǎn)發(fā)給主機(jī),RNA序列比對(duì)過程結(jié)束。 與現(xiàn)有技術(shù)相比,采用本發(fā)明可達(dá)到以下技術(shù)效果 1.本發(fā)明通過對(duì)無(wú)回溯CYK/inside算法中三維動(dòng)態(tài)規(guī)劃矩陣分值計(jì)算進(jìn)行區(qū)域 分割、區(qū)域內(nèi)逐層計(jì)算、層內(nèi)按矩陣列順序并行處理,對(duì)計(jì)算過程進(jìn)行細(xì)粒度并行化,實(shí)現(xiàn) 了對(duì)基于SCFG模型的RNA序列二級(jí)結(jié)構(gòu)預(yù)測(cè)應(yīng)用的加速。通過與運(yùn)行在Intel Pentium4 2. 66GH CPU、1. 5GB主存計(jì)算機(jī)上的比對(duì)軟件Infernal-0. 55比較,采用本發(fā)明在RNA序列 長(zhǎng)度為379, CM模型狀態(tài)數(shù)為1176時(shí),可以獲得接近14倍的加速效果,而當(dāng)測(cè)試序列長(zhǎng)度 為959, CM模型狀態(tài)數(shù)為3145時(shí),可獲得14. 5倍的加速效果。 2.就基于SCFG模型的RNA 二級(jí)結(jié)構(gòu)預(yù)測(cè)應(yīng)用而言,本發(fā)明以很小的硬件代價(jià)(1 片F(xiàn)PGA和一臺(tái)通用計(jì)算機(jī))取得了與包含20個(gè)Inter-Xeon CPU的并行計(jì)算機(jī)相當(dāng)?shù)募铀?效果。包含20個(gè)Inter-Xeon CPU的并行計(jì)算機(jī)系統(tǒng)功耗超過3KW,功耗分析結(jié)果表明,算 法FPGA芯片的最大功耗小于30W,整個(gè)加速器系統(tǒng)平臺(tái)(包括主機(jī)和可重構(gòu)算法加速器) 的總功耗不超過300W,僅為前者系統(tǒng)功耗的10%左右。 3.本發(fā)明將可編程的FPGA芯片作為通用計(jì)算機(jī)的協(xié)處理器,具有成本低、計(jì)算部 件密集、性價(jià)比高的優(yōu)點(diǎn);同時(shí)FPGA算法加速器具備的重構(gòu)能力能夠靈活地適應(yīng)算法的改變,克服了傳統(tǒng)專用硬件造價(jià)高、普及率低的缺點(diǎn)。
圖1是本發(fā)明第一步構(gòu)建的異構(gòu)計(jì)算機(jī)系統(tǒng)總體結(jié)構(gòu)圖。 圖2是本發(fā)明異構(gòu)計(jì)算機(jī)系統(tǒng)中可重構(gòu)算法加速器中算法FPGA邏輯結(jié)構(gòu)圖。 圖3是本發(fā)明可重構(gòu)算法加速器中算法FPGA中PE的邏輯結(jié)構(gòu)圖。 圖4是本發(fā)明各PE的PE控制模塊狀態(tài)轉(zhuǎn)換圖。 圖5是本發(fā)明異構(gòu)計(jì)算機(jī)系統(tǒng)進(jìn)行RNA序列比對(duì)的流程圖。 圖6是圖5第6步中PE陣列執(zhí)行無(wú)回溯CYK/inside計(jì)算的流程圖。 圖7是圖6中PE陣列計(jì)算比對(duì)得分步驟的三維矩陣填充過程示意圖。
具體實(shí)施例方式
圖1是本發(fā)明第一步構(gòu)建的異構(gòu)計(jì)算機(jī)系統(tǒng)總體結(jié)構(gòu)圖。異構(gòu)計(jì)算機(jī)系統(tǒng)由主機(jī) 和可重構(gòu)算法加速器組成??芍貥?gòu)算法加速器插入主機(jī)主板PCI-E插槽與主機(jī)相連。主機(jī) 上安裝有CM模型格式化程序、RNA序列編碼程序可重構(gòu)算法加速器邏輯下載程序和數(shù)據(jù)通 訊程序。主機(jī)通過JTAG編程電纜對(duì)可重構(gòu)算法加速器中的算法FPGA進(jìn)行配置,將RNA序 列和CM模型通過PCI-E接口加載至可重構(gòu)算法加速器,并啟動(dòng)可重構(gòu)算法加速器;可重構(gòu) 算法加速器完成無(wú)回溯的CYK/inside算法的計(jì)算,然后將比對(duì)結(jié)果返回給主機(jī)。
可重構(gòu)算法加速器由算法FPGA、DRAM和PCI-E接口組成。DRAM與算法FPGA相連, 存儲(chǔ)原始數(shù)據(jù)(包括RNA序列和CM模型)和中間狀態(tài)的計(jì)算結(jié)果,其存儲(chǔ)容量大于IGB。 PCI-E接口連接主機(jī)與算法FPGA,實(shí)現(xiàn)主機(jī)與算法FPGA間的數(shù)據(jù)傳遞。JTAG編程電纜連接 主機(jī)USB接口與算法FPGA的JTAG配置端口 。 算法FPGA與DRAM和PCI-E接口相連。算法FPGA從PCI-E接口接收數(shù)據(jù)和操作命 令,并對(duì)命令進(jìn)行解析如果是數(shù)據(jù)寫命令,則從將PCI-E接口接收的數(shù)據(jù)存儲(chǔ)在DRAM中; 如果是啟動(dòng)命令,則執(zhí)行無(wú)回溯的CYK/inside計(jì)算過程,將計(jì)算結(jié)果存儲(chǔ)在DRAM中并向主 機(jī)返回計(jì)算完成信號(hào);如果是數(shù)據(jù)讀命令,則將計(jì)算結(jié)果從DRAM讀回通過PCI-E接口發(fā)送 給主機(jī)。 圖2是本發(fā)明異構(gòu)計(jì)算機(jī)系統(tǒng)中可重構(gòu)算法加速器中算法FPGA邏輯結(jié)構(gòu)圖。算 法FPGA由10接口控制器、DRAM存儲(chǔ)控制器、PE陣列控制器、PE陣列、PE同步與寫回控制 器組成。10接口控制器對(duì)外與PCI-E接口相連,對(duì)內(nèi)與DRAM存儲(chǔ)控制器、PE陣列控制器相 連。 10接口控制器從PCI-E接口接收原始數(shù)據(jù),并向DRAM存儲(chǔ)控制器發(fā)數(shù)據(jù)寫請(qǐng)求, 將原始數(shù)據(jù)寫入DRAM ;數(shù)據(jù)存儲(chǔ)完成后,10接口控制器將數(shù)據(jù)準(zhǔn)備好信號(hào)發(fā)送給PE陣列控 制器;計(jì)算完成后,IO接口控制器接收主機(jī)發(fā)出的的數(shù)據(jù)讀命令,通過DRAM存儲(chǔ)控制器將 序列比對(duì)得分從DRAM讀出,通過PCI-E接口送回主機(jī)。 DRAM存儲(chǔ)控制器對(duì)外與DRAM相連,對(duì)內(nèi)與10接口控制器、PE陣列控制器、PE陣 列、PE同步與寫回控制器相連,負(fù)責(zé)實(shí)現(xiàn)對(duì)DRAM的訪問。 PE陣列控制器與10接口控制器、DRAM存儲(chǔ)控制器、PE同步與寫回控制器和PE陣 列中的所有PE相連。它從10接口控制器接收數(shù)據(jù)準(zhǔn)備好信號(hào)后啟動(dòng)PE陣列,它向DRAM存儲(chǔ)控制器發(fā)數(shù)據(jù)讀請(qǐng)求,使所有的PE處理單元從DRAM獲得RNA序列。在計(jì)算比對(duì)得分階段,PE陣列控制器通過控制當(dāng)前計(jì)算元素的下標(biāo)i, j, k對(duì)三維矩陣實(shí)施按列循環(huán)分配并通過對(duì)i, j, k的賦值控制PE的初始計(jì)算位置和元素的計(jì)算順序;在PE中間結(jié)果寫回階段,收到PE同步與寫回控制器發(fā)出的PE同步與寫回完成信號(hào)后為PE分配新的計(jì)算任務(wù);在加載新任務(wù)階段,通過對(duì)i, j, k的判斷決定PE是否終止計(jì)算。 PE同步與寫回控制器與PE陣列中每一個(gè)PE以及PE的數(shù)據(jù)緩存區(qū)相連,可以直接訪問數(shù)據(jù)緩存區(qū)。PE同步與寫回控制器根據(jù)i, j,k監(jiān)控每個(gè)PE當(dāng)前計(jì)算的元素所處的位置。 PE陣列由n個(gè)PE、 n個(gè)數(shù)據(jù)傳遞寄存器組和n個(gè)數(shù)據(jù)緩存區(qū)構(gòu)成。每個(gè)PE都與DRAM存儲(chǔ)控制器、PE陣列控制器、PE同步與寫回控制器、數(shù)據(jù)緩存區(qū)以及相鄰的數(shù)據(jù)傳遞寄存器組相連。n個(gè)PE串聯(lián)構(gòu)成線性陣列,其中陣列左側(cè)第一個(gè)PE為主PE,其他PE都是從PE,稱為第1從PE,第2從PE,…,第n-l從PE。只有主PE能夠向DRAM存儲(chǔ)控制器發(fā)送數(shù)據(jù)讀請(qǐng)求,從PE都被動(dòng)地從DRAM存儲(chǔ)控制器接收數(shù)據(jù)。每個(gè)數(shù)據(jù)傳遞寄存器組與左右相鄰的PE相連(最后一個(gè)數(shù)據(jù)傳遞寄存器組連接第n-1從PE和主PE),可以同時(shí)被本PE和下一個(gè)PE訪問,用于緩存從前一個(gè)PE的數(shù)據(jù)緩存區(qū)中讀出的數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)在PE陣列間的傳遞。每個(gè)PE都有一片存放計(jì)算結(jié)果的數(shù)據(jù)緩存區(qū),所有PE的數(shù)據(jù)緩存區(qū)都與PE同步與寫回控制器相連,在中間結(jié)果寫回階段可被PE同步與寫回控制器直接訪問。數(shù)據(jù)緩存區(qū)可以同時(shí)被本PE和下一個(gè)PE訪問,用于存儲(chǔ)本PE的計(jì)算結(jié)果。每個(gè)PE的數(shù)據(jù)緩存區(qū)都由多個(gè)獨(dú)立的存儲(chǔ)區(qū)域構(gòu)成,每個(gè)存儲(chǔ)區(qū)域存儲(chǔ)三角矩陣的一列元素,所有存儲(chǔ)區(qū)域存放的元素的列編號(hào)都相同,但這些列元素位于三維矩陣M的不同層。
圖3是本發(fā)明可重構(gòu)算法加速器中算法FPGA中PE的邏輯結(jié)構(gòu)圖。PE由PE控制模塊、分值計(jì)算模塊、RNA序列存儲(chǔ)器、CM模型存儲(chǔ)器組成。 分值計(jì)算模塊對(duì)外與數(shù)據(jù)緩存區(qū)相連,從數(shù)據(jù)緩存區(qū)中讀出當(dāng)前狀態(tài)的子狀態(tài)數(shù)據(jù),將計(jì)算結(jié)果寫入數(shù)據(jù)緩存區(qū);對(duì)內(nèi)與CM模型存儲(chǔ)器和PE控制模塊相連,它從CM模型存儲(chǔ)器中讀出CM模型當(dāng)前狀態(tài)信息,寫入分值計(jì)算模塊內(nèi)部的狀態(tài)寄存器中,從PE控制模塊或數(shù)據(jù)緩存區(qū)中載入計(jì)算所需的子狀態(tài)數(shù)據(jù),輸入分值計(jì)算模塊內(nèi)部的加法器。
分值計(jì)算模塊由結(jié)束狀態(tài)計(jì)算模塊、非分支狀態(tài)計(jì)算模塊和分支狀態(tài)計(jì)算模塊三個(gè)子模塊構(gòu)成,分別實(shí)現(xiàn)結(jié)束狀態(tài)、非分支狀態(tài)(不包括結(jié)束狀態(tài))和分支狀態(tài)層的計(jì)算。三個(gè)子模塊彼此獨(dú)立,但都與數(shù)據(jù)緩存區(qū)、CM模型存儲(chǔ)器和PE控制模塊相連。三個(gè)子模塊均由狀態(tài)寄存器、加法器、比較器和輸出寄存器組成。狀態(tài)寄存器與加法器相連,保存CM模型的當(dāng)前狀態(tài)信息。加法器與狀態(tài)寄存器、PE控制模塊、比較器相連,非分支狀態(tài)計(jì)算模塊和分支狀態(tài)計(jì)算模塊中的加法器還與數(shù)據(jù)緩存區(qū)相連(結(jié)束狀態(tài)計(jì)算模塊與數(shù)據(jù)緩存區(qū)的數(shù)據(jù)通路連接是單向的,只寫數(shù)據(jù)緩存區(qū)而不從數(shù)據(jù)緩存區(qū)中讀回?cái)?shù)據(jù)),非分支狀態(tài)計(jì)算模塊和分支狀態(tài)計(jì)算模塊的加法器從PE控制模塊和數(shù)據(jù)緩存區(qū)中載入操作數(shù),結(jié)束狀態(tài)計(jì)算模塊的加法器從PE控制模塊載入操作數(shù),從狀態(tài)寄存器中讀取當(dāng)前狀態(tài)下的字符生成概率ek和狀態(tài)轉(zhuǎn)移概率tk,執(zhí)行加法運(yùn)算,并將結(jié)果傳遞給比較器。比較器與加法器和輸出寄存器相連,它從加法器獲得當(dāng)前的計(jì)算結(jié)果,從輸出寄存器獲得當(dāng)前最大值,在PE控制模塊的控制下將計(jì)算結(jié)果和當(dāng)前最大值二者中的較大者寫入輸出寄存器。輸出寄存器與比較器和數(shù)據(jù)緩存區(qū)相連,它保存當(dāng)前狀態(tài)的所有子狀態(tài)下運(yùn)算結(jié)果的最大值,并在計(jì)算完成后將輸出寄存器中的值即元素M(i, j,k)寫入數(shù)據(jù)緩存區(qū)。 RNA序列存儲(chǔ)器與PE控制模塊和CM模型存儲(chǔ)器相連,采用FPGA片內(nèi)分布式存儲(chǔ)模塊實(shí)現(xiàn),用于存儲(chǔ)經(jīng)過二進(jìn)制編碼后的RNA序列。PE控制模塊將從DRAM中讀出的RNA序列存入RNA序列存儲(chǔ)器(由主PE從DRAM讀出,并廣播至所有PE)。 CM模型存儲(chǔ)器與RNA序列存儲(chǔ)器和分值計(jì)算模塊相連,存儲(chǔ)CM模型中當(dāng)前狀態(tài)k的相關(guān)信息。 PE控制模塊對(duì)外與IO接口控制器、DRAM存儲(chǔ)控制器和數(shù)據(jù)傳遞寄存器組相連。它接收10接口控制器發(fā)出的啟動(dòng)命令,啟動(dòng)PE。在PE初始化階段,接收從DRAM中載入的CM模型狀態(tài)數(shù)據(jù),并將其緩存在CM模型存儲(chǔ)器中。計(jì)算時(shí),根據(jù)當(dāng)前狀態(tài)的類型訪問DRAM和前一個(gè)PE的數(shù)據(jù)緩存區(qū)獲取計(jì)算所需的數(shù)據(jù)。PE控制模塊對(duì)內(nèi)與RNA序列存儲(chǔ)器、分值計(jì)算模塊和PE同步與寫回控制器相連。當(dāng)前狀態(tài)層的計(jì)算完成后,PE控制模塊根據(jù)當(dāng)前狀態(tài)類型判斷是否需要將計(jì)算結(jié)果寫回DRAM。如果需要寫回,則向PE同步與寫回控制器發(fā)出寫回請(qǐng)求,并等待接收PE同步與寫回控制器發(fā)出的數(shù)據(jù)寫回完成信號(hào)。寫回操作完成后,PE控制模塊發(fā)出當(dāng)前狀態(tài)層計(jì)算完成信號(hào),并將存放子狀態(tài)數(shù)據(jù)的存儲(chǔ)區(qū)域?qū)?yīng)的父狀態(tài)寄存器數(shù)值減1。如果某個(gè)存儲(chǔ)區(qū)域的父狀態(tài)寄存器數(shù)值減為O,則將區(qū)域數(shù)據(jù)有效標(biāo)志寄存器清O,并將該區(qū)域編號(hào)加入空閑存儲(chǔ)區(qū)域集合。當(dāng)PE控制模塊接收到同步等待完成(即最后一個(gè)從PE發(fā)出的當(dāng)前狀態(tài)層計(jì)算完成)信號(hào)后,更新元素下標(biāo)i, j, k的值,啟動(dòng)下一個(gè)狀態(tài)層的計(jì)算。 圖4是本發(fā)明各PE的PE控制模塊狀態(tài)轉(zhuǎn)換圖。PE控制模塊是一個(gè)控制狀態(tài)機(jī),由13個(gè)狀態(tài)構(gòu)成,狀態(tài)定義和轉(zhuǎn)換過程如下 開始狀態(tài)算法FPGA配置結(jié)束并復(fù)位之后,控制狀態(tài)機(jī)自動(dòng)進(jìn)入開始狀態(tài),收到10接口控制器發(fā)出的啟動(dòng)命令后進(jìn)入PE初始化狀態(tài)。 PE初始化狀態(tài)在數(shù)據(jù)緩存區(qū)中選擇編號(hào)最小的一個(gè)空閑區(qū)域保存計(jì)算結(jié)果;向DRAM存儲(chǔ)控制器發(fā)讀請(qǐng)求,從DRAM載入RNA序列,并寫入RNA序列存儲(chǔ)器;為PE計(jì)算的元素下標(biāo)賦初始值i = P」d, j = P」d,k = K(默認(rèn)為從三維矩陣M最底層的邊緣位置開始計(jì)算)。初始化操作完成后進(jìn)入讀CM模型狀態(tài)。 讀CM模型狀態(tài)該狀態(tài)下,PE控制模塊向DRAM存儲(chǔ)控制器發(fā)出讀請(qǐng)求,從DRAM載入CM模型當(dāng)前狀態(tài)k的信息,并寫入CM模型存儲(chǔ)器,隨后進(jìn)入狀態(tài)類型判斷狀態(tài)。
狀態(tài)類型判斷狀態(tài)將當(dāng)前狀態(tài)編號(hào)k填入在PE初始化狀態(tài)選擇的空閑區(qū)域?qū)?yīng)的位置寄存器deck」d中;并判斷當(dāng)前狀態(tài)的類型,如果是結(jié)束狀態(tài),則進(jìn)入結(jié)束狀態(tài)元素計(jì)算狀態(tài);如果是非分支狀態(tài),則進(jìn)入非分支狀態(tài)元素計(jì)算狀態(tài);如果是分支狀態(tài),則進(jìn)入分支狀態(tài)元素計(jì)算狀態(tài),并給PE計(jì)算的元素下標(biāo)賦新值i = 1, j = P」d, k = K。
結(jié)束狀態(tài)元素計(jì)算狀態(tài)在本狀態(tài)下啟動(dòng)結(jié)束狀態(tài)計(jì)算子模塊,按照CYK/inside算法迭代公式中的結(jié)束狀態(tài)計(jì)算分支對(duì)矩陣元素M(i, j, k)進(jìn)行計(jì)算;結(jié)束狀態(tài)元素的計(jì)算只與元素位置相關(guān),不需要從DRAM或者數(shù)據(jù)緩存區(qū)載入數(shù)據(jù),產(chǎn)生的計(jì)算結(jié)果保存在數(shù)據(jù)緩存區(qū),然后根據(jù)元素下標(biāo)判斷本列元素的計(jì)算是否完成。如果i = l,則進(jìn)入列元素計(jì)算完成狀態(tài);否則繼續(xù)保持本狀態(tài),i = i-l,計(jì)算下一個(gè)元素。 非分支狀態(tài)元素計(jì)算狀態(tài)在本狀態(tài)下啟動(dòng)非分支狀態(tài)計(jì)算子模塊,按照CYK/inside算法迭代公式中的非分支狀態(tài)(不包括結(jié)束狀態(tài))計(jì)算分支對(duì)矩陣元素M(i, j, k)進(jìn)行計(jì)算。如果當(dāng)前狀態(tài)為開始狀態(tài)、刪除狀態(tài)或左插入狀態(tài),則從本PE的數(shù)據(jù)緩存區(qū)載入操作數(shù);如果當(dāng)前狀態(tài)為匹配或右插入狀態(tài),主PE從DRAM載入操作數(shù),從PE從前一個(gè)PE的數(shù)據(jù)緩存區(qū)載入載入操作數(shù)。計(jì)算結(jié)果保存在數(shù)據(jù)緩存區(qū),然后根據(jù)元素下標(biāo)判斷本列元素的計(jì)算是否完成。如果i = l,則進(jìn)入列元素計(jì)算完成狀態(tài);否則繼續(xù)保持本狀態(tài),更新元素下標(biāo)i = i-l,計(jì)算下一個(gè)元素。 分支狀態(tài)元素計(jì)算狀態(tài)在本狀態(tài)下啟動(dòng)分支狀態(tài)計(jì)算子模塊,按照CYK/inside算法迭代公式中的分支狀態(tài)計(jì)算分支對(duì)矩陣元素M(i, j,k)進(jìn)行計(jì)算。分支狀態(tài)計(jì)算模塊從DRAM中載入左子狀態(tài)的一行,從PE的數(shù)據(jù)緩存區(qū)中載入右子狀態(tài)的一列數(shù)據(jù),計(jì)算結(jié)果保存在數(shù)據(jù)緩存區(qū),然后根據(jù)元素下標(biāo)判斷本列元素的計(jì)算是否完成。如果i = P」d,則進(jìn)入列元素計(jì)算完成狀態(tài);否則繼續(xù)保持本狀態(tài),元素下標(biāo)i = i+l,繼續(xù)計(jì)算下一個(gè)元素。
列元素計(jì)算完成狀態(tài)將存放子狀態(tài)數(shù)據(jù)的存儲(chǔ)區(qū)域?qū)?yīng)的父狀態(tài)寄存器數(shù)值減l ;并根據(jù)當(dāng)前計(jì)算的CM模型狀態(tài)類型判斷是否需要將保存在數(shù)據(jù)緩存區(qū)中的元素寫回DRAM。如果當(dāng)前狀態(tài)是分支狀態(tài)的左子狀態(tài),則所有PE的PE控制模塊都向PE同步與寫回控制器發(fā)出寫回請(qǐng)求,隨后進(jìn)入寫回狀態(tài);如果當(dāng)前狀態(tài)是匹配、右插入或者右匹配狀態(tài),則最后一個(gè)從PE的PE控制模塊向PE同步與寫回控制器發(fā)寫回請(qǐng)求,隨后最后一個(gè)從PE的PE控制模塊進(jìn)入寫回狀態(tài),其它PE控制狀態(tài)機(jī)進(jìn)入同步等待狀態(tài);如果當(dāng)前狀態(tài)是左插入、左匹配、刪除或者結(jié)束狀態(tài),則不需要將數(shù)據(jù)緩存區(qū)中的元素寫回DRAM,所有PE的PE控制狀態(tài)機(jī)直接進(jìn)入同步等待狀態(tài)。 寫回狀態(tài)PE在該狀態(tài)下保持?jǐn)?shù)據(jù)寫回請(qǐng)求,直到PE同步與寫回控制器響應(yīng)該請(qǐng)求,隨后PE同步與寫回控制器將數(shù)據(jù)從PE數(shù)據(jù)緩存區(qū)中讀出,通過DRAM存儲(chǔ)控制器將數(shù)據(jù)寫回DRAM。在收到PE同步與寫回控制器返回的寫回完成信號(hào)后向陣列中的其他PE發(fā)出當(dāng)前狀態(tài)層計(jì)算完成信號(hào),進(jìn)入緩存區(qū)數(shù)據(jù)替換狀態(tài)。 同步等待狀態(tài)該狀態(tài)下PE處于空閑狀態(tài),在收到最后一個(gè)PE發(fā)出的當(dāng)前狀態(tài)層計(jì)算完成信號(hào)(表明整個(gè)PE陣列計(jì)算和寫回操作都已完成)后進(jìn)入緩存區(qū)數(shù)據(jù)替換狀態(tài)。
緩存區(qū)數(shù)據(jù)替換狀態(tài)PE控制狀態(tài)機(jī)判斷當(dāng)前使用的存儲(chǔ)區(qū)域的父狀態(tài)寄存器P_cnt的值是否為0,如果為0 (說明該存儲(chǔ)區(qū)域所存放狀態(tài)的所有父狀態(tài)都已算完,該區(qū)域內(nèi)的數(shù)據(jù)將不再被使用),則將該存儲(chǔ)區(qū)域的數(shù)據(jù)有效標(biāo)志寄存器清0,并將該存儲(chǔ)區(qū)域編號(hào)加入空閑存儲(chǔ)區(qū)域集合;更新元素下標(biāo)i, j,k的值如果k > O,則i = P_id, j = P_id,k = k-1 ;否則i = P」d, j = j+n, k = K,隨后進(jìn)入結(jié)束條件判斷狀態(tài)。 結(jié)束條件判斷狀態(tài)PE控制狀態(tài)機(jī)判斷分值計(jì)算模塊終止條件如果j > L,則進(jìn)入結(jié)束狀態(tài),否則在數(shù)據(jù)緩存區(qū)中選擇編號(hào)最小的一個(gè)空閑區(qū)域,然后進(jìn)入讀CM模型狀態(tài),準(zhǔn)備對(duì)下一個(gè)狀態(tài)層中的列元素進(jìn)行計(jì)算。 結(jié)束狀態(tài)PE控制狀態(tài)機(jī)將所有寄存器清O,回到開始狀態(tài),等待接收IO接口控制
器轉(zhuǎn)發(fā)主機(jī)發(fā)出的新的啟動(dòng)命令,開始下一輪計(jì)算。 圖5是本發(fā)明異構(gòu)計(jì)算機(jī)系統(tǒng)進(jìn)行RNA序列比對(duì)的流程圖 第一步,構(gòu)建由主機(jī)和可重構(gòu)算法加速器組成的異構(gòu)計(jì)算機(jī)系統(tǒng)。 序列比對(duì)流程對(duì)應(yīng)本發(fā)明的第二、三、四、五步,為了清楚地表明主機(jī)端和可重構(gòu)
算法加速器的工作,則可分為8個(gè)小步驟。 第二步,包括1、2小步
1.主機(jī)使用多序列比對(duì)和CM模型構(gòu)建程序?qū)⑤斎氲囊唤M同源RNA序列轉(zhuǎn)換為CM模型,然后使用模型解析程序格式化CM模型,并將其通過PCI-E接口發(fā)送至可重構(gòu)算法加速器。 2.可重構(gòu)算法加速器算法FPGA接收主機(jī)發(fā)送的CM模型,將其存儲(chǔ)在DRAM中,然
后向主機(jī)返回?cái)?shù)據(jù)接收完成信號(hào)。 第三步,包括3、4小步 3.主機(jī)對(duì)輸入的RNA序列進(jìn)行二進(jìn)制編碼,并將經(jīng)過編碼的RNA序列發(fā)送至可重構(gòu)算法加速器。4.可重構(gòu)算法加速器算法FPGA接收主機(jī)發(fā)送的RNA序列,將其存儲(chǔ)在DRAM中,并
向主機(jī)返回?cái)?shù)據(jù)接收完成信號(hào)。 第四步,包括5、6小步 5.主機(jī)收到可重構(gòu)算法加速器返回的RNA序列接收完成信號(hào)后,向可重構(gòu)算法加速器發(fā)送啟動(dòng)命令,啟動(dòng)算法FPGA執(zhí)行計(jì)算,主機(jī)進(jìn)入等待狀態(tài)。6.算法FPGA接收到主機(jī)發(fā)送的啟動(dòng)命令隨即啟動(dòng)PE陣列執(zhí)行無(wú)回溯CYK/inside計(jì)算。算法FPGA計(jì)算完成后,將結(jié)果寫回DRAM,隨后向主機(jī)發(fā)出計(jì)算完成信號(hào)。
第五步,包括7、8小步 7.主機(jī)在等待狀態(tài)下接收可重構(gòu)算法加速器發(fā)出的計(jì)算完成信號(hào)后通過PCI-E接口向算法加速器發(fā)出數(shù)據(jù)讀命令。 8.可重構(gòu)算法加速器算法FPGA接收到主機(jī)發(fā)出的數(shù)據(jù)讀命令,將計(jì)算結(jié)果從DRAM中讀出并傳給主機(jī),比對(duì)過程結(jié)束。 圖6是圖5第6步中PE陣列執(zhí)行無(wú)回溯CYK/inside計(jì)算的流程圖。圖中的符號(hào)s表示分割后得到的較小的三維矩陣(即計(jì)算區(qū)域)的數(shù)量(s=「£/w"l) ;m表示當(dāng)前正在計(jì)算的區(qū)域的編號(hào)(1《m《s) ;K表示CM模型的狀態(tài)數(shù)量,即三維矩陣的層數(shù);k表示當(dāng)前正在計(jì)算的狀態(tài)層的編號(hào)(1《k《K) ;d為當(dāng)前最小的空閑存儲(chǔ)區(qū)域編號(hào)(1《d《n) ;n
為PE的數(shù)量;S(k)表示當(dāng)前狀態(tài)的類型;P(k)表示當(dāng)前狀態(tài)k的父狀態(tài);L為RNA序列的
長(zhǎng)度;D、S、E、MP、 IL、ML、 IR、MR和BIF表示具體的狀態(tài)類型,分別代表CM模型中的刪除、開始、結(jié)束、匹配、左插入、左匹配、右插入、右匹配和分支狀態(tài),其中除了分支狀態(tài)BIF外,其余的狀態(tài)統(tǒng)稱為非分支狀態(tài)。PE陣列的操作流程包括初始化、數(shù)據(jù)載入、計(jì)算比對(duì)得分、寫回中間結(jié)果、PE陣列同步和加載新任務(wù)六個(gè)步驟 1.初始化。算法FPGA在收到主機(jī)發(fā)出的操作指令后,立即啟動(dòng)PE陣列的初始化
1. l所有PE在各自的數(shù)據(jù)緩存區(qū)中選擇編號(hào)最小的空閑區(qū)域d用于保存計(jì)算結(jié)果; 1. 2主PE向DRAM存儲(chǔ)控制器發(fā)數(shù)據(jù)讀請(qǐng)求,DRAM存儲(chǔ)控制器從DRAM依次讀出RNA序列和CM模型第K行數(shù)據(jù),并發(fā)送至所有的從PE ;從PE接收RNA序列和CM模型第K行數(shù)據(jù)并分別存儲(chǔ)在各自的RNA序列存儲(chǔ)器和CM模型存儲(chǔ)器中; 1. 3確定將要計(jì)算的元素的初始位置。所有PE根據(jù)各自在PE陣列中的編號(hào)P_id為將要計(jì)算的元素下標(biāo)賦初始值i = P」d, j = P」d, k = K。
2.數(shù)據(jù)載入。 各PE根據(jù)當(dāng)前狀態(tài)的類型將操作數(shù)載入分值計(jì)算模塊, 一共分為五種情況
參如果當(dāng)前狀態(tài)類型為S、 D、 IL、 ML,則PE分值計(jì)算模塊從該P(yáng)E的數(shù)據(jù)緩存區(qū)中載入當(dāng)前狀態(tài)的所有子狀態(tài)數(shù)據(jù)層中的第j列元素; 參如果當(dāng)前狀態(tài)類型為分支(BIF)狀態(tài),且Pjd = l,則PE從以下兩個(gè)位置獲得計(jì)算所需的操作數(shù)1)從數(shù)據(jù)緩存區(qū)中載入分支狀態(tài)右子狀態(tài)層的第j列元素;2)向DRAM存儲(chǔ)控制器發(fā)讀請(qǐng)求,從DRAM中載入分支狀態(tài)左子狀態(tài)層的第i行元素,并將其廣播至所有PE ; 參如果當(dāng)前狀態(tài)類型為分支(BIF)狀態(tài),且2《P_id《n,則PE從以下兩個(gè)位置獲得計(jì)算所需的操作數(shù)1)從PE數(shù)據(jù)緩存區(qū)中載入右子狀態(tài)數(shù)據(jù)層的第j列元素;
2)等待接收主PE從DRAM中載入的左子狀態(tài)數(shù)據(jù)層的第i行元素;
參如果當(dāng)前狀態(tài)類型為IR、MR或者M(jìn)P(分別對(duì)應(yīng)CM模型中的右插入、右匹配和匹配狀態(tài)),且P」d = 1,則PE向DRAM存儲(chǔ)控制器發(fā)讀請(qǐng)求,從DRAM載入當(dāng)前狀態(tài)的所有子狀態(tài)數(shù)據(jù)層的第j-l列元素; 參如果當(dāng)前狀態(tài)類型為IR、MR或者M(jìn)P,且2《P_id《n,則從前一個(gè)PE的數(shù)據(jù)緩存區(qū)中載入當(dāng)前狀態(tài)的所有子狀態(tài)數(shù)據(jù)層的j-l列元素;
3.計(jì)算比對(duì)得分 3. l將三維矩陣按狀態(tài)層方向垂直分割為s個(gè)區(qū)域(S-「Z/w"l),按照編號(hào)依次進(jìn)
行計(jì)算。對(duì)每一個(gè)區(qū)域m(l《m《s)采用逐層計(jì)算的策略從區(qū)域m的第K層出發(fā),當(dāng)?shù)贙層計(jì)算完成后再算第K-1層,…,直到區(qū)域m的第l層算完。 3. 2對(duì)每一層的計(jì)算而言,每個(gè)PE負(fù)責(zé)計(jì)算當(dāng)前狀態(tài)層中的一列,PE計(jì)算的元素的列號(hào)與PE在陣列中的序號(hào)P」d對(duì)應(yīng)。主PE的編號(hào)P」d = l,負(fù)責(zé)計(jì)算本區(qū)域第1列元素,從PE計(jì)算本區(qū)域的第2 n列元素。所有PE都同時(shí)按照無(wú)回溯CYK/inside算法的迭代公式對(duì)矩陣元素進(jìn)行計(jì)算,但要根據(jù)不同的狀態(tài)類型采用不同的計(jì)算順序
3.2.1如果當(dāng)前狀態(tài)k是分支狀態(tài),則每一個(gè)PE都從各自列的頂部位置(i = 1)開始,按照由上至下的順序計(jì)算。整個(gè)PE陣列每次完成本狀態(tài)層中一行元素的計(jì)算。當(dāng)一個(gè)PE計(jì)算的元素坐標(biāo)i = j時(shí)(即到達(dá)各自列的底部位置),PE計(jì)算暫停,進(jìn)入等待狀態(tài)。由于三角矩陣每一列元素的個(gè)數(shù)不等,PE按編號(hào)順序依次進(jìn)入同步等待狀態(tài),直到收到最后一個(gè)從PE的計(jì)算完成信號(hào)。 3. 2. 2如果當(dāng)前狀態(tài)k是非分支狀態(tài),則每一個(gè)PE都從各自列的底部位置(i = j)開始,按照由下至上的順序計(jì)算。區(qū)域m中的第k個(gè)狀態(tài)層的計(jì)算啟動(dòng)時(shí),所有PE計(jì)算的元素都位于三角矩陣的主對(duì)角線上。當(dāng)主對(duì)角線上的n個(gè)元素計(jì)算完之后,所有PE同時(shí)向上移動(dòng)一個(gè)計(jì)算位置。當(dāng)PE計(jì)算的元素行坐標(biāo)i = 1時(shí),PE計(jì)算暫停,進(jìn)入等待狀態(tài)(如果計(jì)算結(jié)果需要寫回DRAM,PE將在等待狀態(tài)下發(fā)出寫回請(qǐng)求)。由于三角矩陣每一列元素的個(gè)數(shù)不等,PE將按編號(hào)順序依次進(jìn)入同步等待狀態(tài)。直到第n-l從PE完成本列最上方元素的計(jì)算(i = 1)并寫回DRAM(如果需要寫回)后,本區(qū)域當(dāng)前狀態(tài)層k的計(jì)算結(jié)束。
4.寫回中間結(jié)果。所有PE的列元素計(jì)算結(jié)果都保存在PE各自的數(shù)據(jù)緩存區(qū)中,PE根據(jù)狀態(tài)類型確定是否將數(shù)據(jù)寫回FPGA片外的DRAM。 5.對(duì)PE陣列中的PE進(jìn)行同步,直到所有PE完成本狀態(tài)層的計(jì)算。PE進(jìn)行同步等待的同時(shí)判斷當(dāng)前使用的存儲(chǔ)區(qū)域的父狀態(tài)寄存器P—cnt的值是否為O,如果為O,則釋放該緩存區(qū)。
6.加載新任務(wù)。當(dāng)收到最后一個(gè)PE(PE[n])的計(jì)算完成信號(hào)后(說明此時(shí)本狀 態(tài)層的計(jì)算任務(wù)已完成),PE陣列控制模塊將下一個(gè)狀態(tài)層加載至PE陣列,為每一個(gè)PE分 配新狀態(tài)層中的一列元素,并對(duì)變量i,j,k進(jìn)行賦值如果kX),則i =P_id,j =P_id, k = k-l,載入CM模型的第k-1行數(shù)據(jù);否則,i = P_id, j = j+n, k = K,載入CM模型的第 K行數(shù)據(jù),隨后PE控制狀態(tài)機(jī)進(jìn)入結(jié)束條件判斷狀態(tài)。如果j > L,則當(dāng)前PE的計(jì)算終止, 否則在數(shù)據(jù)緩存區(qū)尋找當(dāng)前編號(hào)最小的一個(gè)空閑存儲(chǔ)區(qū)域,回到第2步(數(shù)據(jù)載入),準(zhǔn)備 對(duì)下一個(gè)狀態(tài)層進(jìn)行計(jì)算。 PE重復(fù)上述計(jì)算過程直到新指派的列元素編號(hào)j超出輸入的RNA序列的長(zhǎng)度(此 時(shí)當(dāng)前PE處于空閑狀態(tài),直到陣列中的所有PE計(jì)算完成)。當(dāng)所有PE的計(jì)算都終止后,主 PE將最終的計(jì)算結(jié)果(即元素M(l,L,l)的值)寫回DRAM,算法FPGA向主機(jī)發(fā)計(jì)算完成信 號(hào),PE計(jì)算過程結(jié)束。PE控制模塊狀態(tài)機(jī)將所有寄存器清0,回到開始狀態(tài)。
圖7是圖6中PE陣列計(jì)算比對(duì)得分步驟的三維矩陣填充過程示意圖。圖中的 符號(hào)K表示CM模型的狀態(tài)數(shù)量,即三維矩陣的層數(shù);k表示當(dāng)前正在計(jì)算的狀態(tài)層的編號(hào) (1《k《K) ;i, j分別表示PE當(dāng)前計(jì)算的元素在三角矩陣中的行/列坐標(biāo);L為RNA序列 的長(zhǎng)度;圖中的虛線箭頭代表三維矩陣的計(jì)算順序。 PE陣列采用"按區(qū)域分割"和"逐層按列并行處理"的任務(wù)劃分策略實(shí)現(xiàn)對(duì)三 維動(dòng)態(tài)規(guī)劃矩陣的細(xì)粒度并行計(jì)算。如圖7a所示,首先對(duì)三維矩陣按狀態(tài)層方向進(jìn)行縱 切,將其垂直分割為s個(gè)區(qū)域(F「丄/"l),每個(gè)區(qū)域仍是一個(gè)三維矩陣,每個(gè)區(qū)域都包含 K層,每一層包含n列元素;然后按照編號(hào)對(duì)分割后的區(qū)域進(jìn)行逐一計(jì)算。對(duì)每一個(gè)區(qū)域 m(l《m《s),采用逐層計(jì)算的策略從第1個(gè)區(qū)域的第K層出發(fā)(圖7a區(qū)域1的第K層 中標(biāo)出的粗線代表初始計(jì)算位置),當(dāng)?shù)贙層計(jì)算完成后再算第K-l層,直到第1個(gè)區(qū)域的 第1層算完,然后再計(jì)算第2個(gè)區(qū)域的第K層,第K-l層,…,第1層;之后再計(jì)算第3個(gè)區(qū) 域…,直到最后一個(gè)區(qū)域s的第1層算完,此時(shí)區(qū)域s的第1層右上角元素M(l, L, 1)的值 便是最終的序列比對(duì)分值。對(duì)每一層的計(jì)算而言,每個(gè)PE負(fù)責(zé)計(jì)算當(dāng)前狀態(tài)層中的一列, PE計(jì)算的元素的列號(hào)與PE在陣列中的序號(hào)P」d對(duì)應(yīng)。主PE的編號(hào)P」d二 l,負(fù)責(zé)計(jì)算 本區(qū)域的第1列元素,從PE計(jì)算本區(qū)域的第2 n列元素。 陣列中的n個(gè)PE采用SPMD方式同時(shí)計(jì)算位于矩陣不同列的n個(gè)數(shù)據(jù),以達(dá)到對(duì) 計(jì)算過程進(jìn)行加速的效果。所有PE都使用無(wú)回溯CYK/inside算法的迭代公式對(duì)矩陣元素 進(jìn)行計(jì)算,但計(jì)算時(shí)根據(jù)不同的狀態(tài)類型采用不同的計(jì)算順序。 參如果當(dāng)前狀態(tài)k是分支狀態(tài),則每個(gè)PE都從各自列的頂部位置(i = 1)開始計(jì)
算,按照由上至下的順序執(zhí)行(如圖7b所示)。當(dāng)前狀態(tài)層的計(jì)算啟動(dòng)時(shí),主PE計(jì)算元素 (1, j),第1從PE計(jì)算元素(1, j+l),…,第n-l從PE計(jì)算元素(1, j+n-l)。當(dāng)?shù)?行的n 個(gè)元素計(jì)算完之后,所有PE同時(shí)更新元素的橫坐標(biāo),計(jì)算下一行(i = 2)的n個(gè)元素。當(dāng) 一個(gè)PE計(jì)算的元素坐標(biāo)i = j時(shí)(即到達(dá)各自列的底部位置),PE計(jì)算暫停,進(jìn)入等待狀 態(tài)。由于三角矩陣每一列元素的個(gè)數(shù)不等,PE按編號(hào)順序依次進(jìn)入同步等待狀態(tài),直到收 到最后一個(gè)從PE的計(jì)算完成信號(hào)。特別地,當(dāng)n = 1時(shí),此時(shí)沒有從PE,主PE按照從左至 右的順序?qū)仃囋剡M(jìn)行逐列計(jì)算,在每一列內(nèi)部按照由上至下的順序?qū)γ恳粋€(gè)元素進(jìn)行 計(jì)算。 參如果當(dāng)前狀態(tài)k是非分支狀態(tài),則每個(gè)PE都從各自列的底部位置開始,按照由下至上的順序計(jì)算(如圖7c所示)。當(dāng)前狀態(tài)層的計(jì)算啟動(dòng)時(shí),所有PE計(jì)算的元素都位于 三角矩陣的主對(duì)角線上(i = j):主PE計(jì)算元素(i, j),第1從PE計(jì)算元素(i+1 , j+1),…, 第n-l從PE計(jì)算元素(i+n-l, j+n-l)。位于同一條對(duì)角線上的元素的計(jì)算量都相等,因 此所有PE都可以同時(shí)完成當(dāng)前元素的計(jì)算,當(dāng)前對(duì)角線上的n個(gè)元素計(jì)算完之后,所有PE 同時(shí)向上移動(dòng)一個(gè)計(jì)算位置,主PE計(jì)算元素(i-l, j),第l從PE計(jì)算元素(i, j+l),, 第n-1從PE計(jì)算元素(i+n-2, j+n_l)。當(dāng)PE計(jì)算的元素行坐標(biāo)i = 1時(shí),PE計(jì)算暫停, 進(jìn)入等待狀態(tài)(如果計(jì)算結(jié)果需要寫回DRAM, PE將在等待狀態(tài)下發(fā)出寫回請(qǐng)求)。同樣, 由于三角矩陣每一列元素的個(gè)數(shù)不等,PE將按編號(hào)順序依次進(jìn)入同步等待狀態(tài)。主PE算 完元素(1, j)后進(jìn)入等待狀態(tài),此時(shí)第l從PE計(jì)算元素(1, j+l),…,第n-l從PE計(jì)算 元素(n-l, j+n-l)。第l從PE計(jì)算完(1, j+l)后進(jìn)入等待狀態(tài),此時(shí)第2從PE計(jì)算元素 (1, j+2),…,第n-l從PE計(jì)算元素(n-2, j+n_l),第2從PE計(jì)算完元素(1, j+2)后也進(jìn) 入等待狀態(tài),…,直到第n-l從PE的算完元素(l,j+n-l)。特別地,當(dāng)n二 l時(shí),此時(shí)沒有 從PE,主PE按照從左至右的順序?qū)仃囋剡M(jìn)行逐列計(jì)算,在每一列內(nèi)部按照由下至上的 順序?qū)γ恳粋€(gè)元素進(jìn)行計(jì)算。由于只有一個(gè)PE,此時(shí)也就不存在同步等待,當(dāng)一列元素計(jì)算 完成后如果需要寫回,則直接發(fā)出寫回請(qǐng)求。 當(dāng)PE控制模塊收到最后一個(gè)從PE(P」d二n-l)的當(dāng)前狀態(tài)層計(jì)算完成信號(hào)后 (說明此時(shí)本區(qū)域當(dāng)前狀態(tài)層的計(jì)算任務(wù)已完成),隨后PE控制狀態(tài)機(jī)進(jìn)入結(jié)束條件判斷 狀態(tài)。如果j 〉L,則PE的計(jì)算過程結(jié)束,否則在數(shù)據(jù)緩存區(qū)尋找當(dāng)前編號(hào)最小的一個(gè)空閑 存儲(chǔ)區(qū)域,回到數(shù)據(jù)載入步驟,準(zhǔn)備對(duì)下一個(gè)狀態(tài)層進(jìn)行計(jì)算。當(dāng)區(qū)域s中的最后一個(gè)狀態(tài) 層(k = 1)計(jì)算完成后,計(jì)算過程結(jié)束,此時(shí)矩陣右上角元素M(l, L,l)的值便是最終的序 列比對(duì)得分。
權(quán)利要求
一種對(duì)基于隨機(jī)上下文無(wú)關(guān)文法的RNA二級(jí)結(jié)構(gòu)預(yù)測(cè)進(jìn)行加速的方法,其特征在于包括以下步驟第一步,構(gòu)建由主機(jī)和可重構(gòu)算法加速器組成的異構(gòu)計(jì)算機(jī)系統(tǒng),主機(jī)是一臺(tái)個(gè)人計(jì)算機(jī),可重構(gòu)算法加速器與主機(jī)相連,主機(jī)上安裝有多序列比對(duì)程序、CM模型構(gòu)建程序、CM模型解析程序、可重構(gòu)算法加速器邏輯下載程序和數(shù)據(jù)通訊程序;主機(jī)通過JTAG編程電纜對(duì)可重構(gòu)算法加速器進(jìn)行配置,將RNA序列和CM模型通過PCI-E接口加載至可重構(gòu)算法加速器,并啟動(dòng)可重構(gòu)算法加速器;可重構(gòu)算法加速器完成無(wú)回溯的CYK/inside算法的計(jì)算,將比對(duì)結(jié)果返回給主機(jī);可重構(gòu)算法加速器由算法FPGA、動(dòng)態(tài)存儲(chǔ)器DRAM和PCI-E接口組成DRAM與算法FPGA相連,用于存儲(chǔ)原始數(shù)據(jù)-RNA序列和CM模型及中間狀態(tài)的計(jì)算結(jié)果,PCI-E接口連接主機(jī)與算法FPGA;算法FPGA的JTAG配置端口通過JTAG編程電纜與主機(jī)相連,主機(jī)通過JTAG編程電纜對(duì)算法FPGA進(jìn)行邏輯配置;算法FPGA與DRAM和PCI-E接口相連,算法FPGA從PCI-E接口接收數(shù)據(jù)和操作命令,并對(duì)操作命令進(jìn)行解析如果是數(shù)據(jù)寫命令,將從PCI-E接口接收的數(shù)據(jù)存儲(chǔ)在DRAM中;如果是啟動(dòng)命令,執(zhí)行無(wú)回溯的CYK/inside計(jì)算,將計(jì)算結(jié)果存儲(chǔ)在DRAM中并向主機(jī)返回計(jì)算完成信號(hào);如果是數(shù)據(jù)讀命令,將計(jì)算結(jié)果從DRAM中讀出并通過PCI-E接口發(fā)送給主機(jī);算法FPGA由IO接口控制器、DRAM存儲(chǔ)控制器、PE陣列控制器、PE陣列、PE同步與寫回控制器組成IO接口控制器對(duì)外與PCI-E接口相連,對(duì)內(nèi)與DRAM存儲(chǔ)控制器、PE陣列控制器相連,IO接口控制器從PCI-E接口接收原始數(shù)據(jù)即CM模型和RNA序列,并向DRAM存儲(chǔ)控制器發(fā)出數(shù)據(jù)寫請(qǐng)求,將原始數(shù)據(jù)通過DRAM存儲(chǔ)控制器寫入DRAM;數(shù)據(jù)存儲(chǔ)完成后,IO接口控制器將數(shù)據(jù)準(zhǔn)備好信號(hào)發(fā)送給PE陣列控制器;IO接口控制器接收主機(jī)發(fā)出的啟動(dòng)命令,并轉(zhuǎn)發(fā)給PE控制模塊,啟動(dòng)PE陣列;計(jì)算完成后,IO接口控制器接收主機(jī)發(fā)出的的數(shù)據(jù)讀命令,通過DRAM存儲(chǔ)控制器將序列比對(duì)得分從DRAM中讀出,通過PCI-E接口送回主機(jī);DRAM存儲(chǔ)控制器對(duì)外與DRAM相連,對(duì)內(nèi)與IO接口控制器、PE陣列控制器、PE陣列、PE同步與寫回控制器相連,它接收來自IO接口控制器的數(shù)據(jù)寫請(qǐng)求,將原始數(shù)據(jù)寫入DRAM;接收來自PE陣列控制器的數(shù)據(jù)讀請(qǐng)求,將RNA序列從DRAM讀出并發(fā)送至PE陣列;接收來自PE陣列的CM模型和數(shù)據(jù)讀請(qǐng)求,將CM模型當(dāng)前狀態(tài)信息和計(jì)算所需的操作數(shù)從DRAM讀出發(fā)送給PE陣列;接收來自PE同步與寫回控制器的寫請(qǐng)求,將由PE陣列產(chǎn)生的數(shù)據(jù)寫回DRAM;PE陣列控制器與IO接口控制器、DRAM存儲(chǔ)控制器、PE同步與寫回控制器和PE陣列相連,它從IO接口控制器接收數(shù)據(jù)準(zhǔn)備好信號(hào)后啟動(dòng)PE陣列,PE陣列控制器向DRAM存儲(chǔ)控制器發(fā)數(shù)據(jù)讀請(qǐng)求,使PE陣列從DRAM獲得RNA序列;PE陣列控制器通過控制當(dāng)前計(jì)算元素的下標(biāo)i,j,k的值實(shí)現(xiàn)PE陣列的初始化并對(duì)三維矩陣M實(shí)施按列循環(huán)分配和對(duì)列元素實(shí)現(xiàn)由上至下或者由下至上的計(jì)算;PE陣列控制器在收到PE同步與寫回控制器發(fā)出的PE同步與寫回完成信號(hào)后產(chǎn)生PE控制信號(hào),為PE陣列分配新的計(jì)算任務(wù),更新PE計(jì)算元素的i,j,k,啟動(dòng)下一列元素的計(jì)算;PE同步與寫回控制器與PE陣列和DRAM存儲(chǔ)控制器相連,它根據(jù)當(dāng)前元素的下標(biāo)i,j,k判斷PE的計(jì)算是否終止;當(dāng)某個(gè)PE完成本列元素的計(jì)算后,PE同步與寫回控制器控制該P(yáng)E進(jìn)入同步等待狀態(tài),并接收該P(yáng)E發(fā)出的數(shù)據(jù)寫回請(qǐng)求,按照先請(qǐng)求先服務(wù)的原則將PE陣列存儲(chǔ)在數(shù)據(jù)緩存區(qū)中的計(jì)算結(jié)果讀出,通過DRAM存儲(chǔ)控制器寫回DRAM;寫回操作完成后,PE同步與寫回控制器向PE陣列控制器發(fā)出同步與寫回完成信號(hào);PE陣列負(fù)責(zé)三維動(dòng)態(tài)規(guī)劃矩陣的并行計(jì)算,它由n個(gè)PE、n個(gè)數(shù)據(jù)傳遞寄存器組和n個(gè)數(shù)據(jù)緩存區(qū)構(gòu)成,n為正整數(shù),每個(gè)PE都有一片存放計(jì)算結(jié)果的數(shù)據(jù)緩存區(qū),每個(gè)PE都與DRAM存儲(chǔ)控制器、PE陣列控制器、PE同步與寫回控制器相連,相鄰PE之間通過一個(gè)數(shù)據(jù)傳遞寄存器組相連;n個(gè)PE串聯(lián)構(gòu)成線性陣列,第一個(gè)PE為主PE,其他PE都是從PE,稱為第1從PE,第2從PE,...,第n-1從PE,只有主PE向DRAM存儲(chǔ)控制器發(fā)送數(shù)據(jù)讀請(qǐng)求,從PE都被動(dòng)地從DRAM存儲(chǔ)控制器接收數(shù)據(jù);每個(gè)數(shù)據(jù)傳遞寄存器組與左右相鄰的PE模塊相連,最后一個(gè)數(shù)據(jù)傳遞寄存器組連接第n-1從PE和主PE,可以同時(shí)被本PE和下一個(gè)PE訪問,用于緩存從前一個(gè)PE的數(shù)據(jù)緩存區(qū)中讀出的數(shù)據(jù);所有PE的數(shù)據(jù)緩存區(qū)都與PE同步與寫回控制器相連,被本PE和下一個(gè)PE訪問;PE由PE控制模塊、分值計(jì)算模塊、RNA序列存儲(chǔ)器、CM模型存儲(chǔ)器組成分值計(jì)算模塊對(duì)外與該P(yáng)E的數(shù)據(jù)緩存區(qū)相連,從數(shù)據(jù)緩存區(qū)中讀出當(dāng)前狀態(tài)的子狀態(tài)數(shù)據(jù),按照無(wú)回溯CYK/inside遞歸公式實(shí)現(xiàn)對(duì)三維動(dòng)態(tài)規(guī)劃矩陣元素的計(jì)算,并將計(jì)算結(jié)果寫入數(shù)據(jù)緩存區(qū);分值計(jì)算模塊對(duì)內(nèi)與CM模型存儲(chǔ)器和PE控制模塊相連,它從CM模型存儲(chǔ)器中讀出CM模型當(dāng)前狀態(tài)信息,從PE控制模塊或者從數(shù)據(jù)緩存區(qū)中讀出計(jì)算所需的子狀態(tài)數(shù)據(jù),寫入分值計(jì)算模塊內(nèi)部的狀態(tài)寄存器中;分值計(jì)算模塊由結(jié)束狀態(tài)計(jì)算模塊、非分支狀態(tài)計(jì)算模塊和分支狀態(tài)計(jì)算模塊三個(gè)子模塊構(gòu)成,分別實(shí)現(xiàn)結(jié)束狀態(tài)、非分支狀態(tài)和分支狀態(tài)層的計(jì)算;三個(gè)子模塊彼此獨(dú)立,但都與數(shù)據(jù)緩存區(qū)、CM模型存儲(chǔ)器和PE控制模塊相連;RNA序列存儲(chǔ)器與PE控制模塊和CM模型存儲(chǔ)器相連,存儲(chǔ)經(jīng)過二進(jìn)制編碼后的RNA序列;CM模型存儲(chǔ)器與RNA序列存儲(chǔ)器和分支計(jì)算模塊相連,存儲(chǔ)CM模型當(dāng)前狀態(tài)下的相關(guān)信息,包括當(dāng)前狀態(tài)的類型Stype、編號(hào)State_id、最后一個(gè)父狀態(tài)的類型P_last、父狀態(tài)數(shù)量P_num、第一個(gè)子狀態(tài)的類型C_first、子狀態(tài)數(shù)量C_num以及RNA字符的生成概率ek和轉(zhuǎn)移概率tk;PE控制模塊對(duì)外與IO接口控制器、DRAM存儲(chǔ)控制器和數(shù)據(jù)傳遞寄存器組相連,它接收IO接口控制器發(fā)出的啟動(dòng)命令,啟動(dòng)PE的計(jì)算;計(jì)算時(shí)通過DRAM存儲(chǔ)控制器訪問DRAM,讀回CM模型、RNA序列及中間結(jié)果;如果當(dāng)前狀態(tài)為匹配、右插入和右匹配,PE控制模塊還將訪問前一個(gè)PE的數(shù)據(jù)緩存區(qū),從數(shù)據(jù)傳遞寄存器組讀回返回的數(shù)據(jù);PE控制模塊對(duì)內(nèi)與RNA序列存儲(chǔ)器、分值計(jì)算模塊和PE同步與寫回控制器相連;PE控制模塊是一個(gè)控制狀態(tài)機(jī),負(fù)責(zé)控制PE的初始化、數(shù)據(jù)載入、分值計(jì)算、數(shù)據(jù)同步以及數(shù)據(jù)寫回和緩存區(qū)數(shù)據(jù)替換;主機(jī)對(duì)算法FPGA的邏輯進(jìn)行綜合,生成配置文件,并通過JTAG編程電纜對(duì)算法FPGA進(jìn)行配置,配置過程結(jié)束后,算法FPGA自動(dòng)復(fù)位,可重構(gòu)算法加速器進(jìn)入正常工作狀態(tài),等待主機(jī)發(fā)出操作指令;第二步,主機(jī)使用多序列比對(duì)程序和CM模型構(gòu)建程序?qū)⑤斎氲囊唤M同源RNA序列轉(zhuǎn)換為CM模型,然后使用模型解析程序?qū)M模型進(jìn)行格式化,并將格式化后的CM模型通過PCI-E接口發(fā)送至可重構(gòu)算法加速器,可重構(gòu)算法加速器將接收的CM模型存儲(chǔ)在DRAM中;第三步,主機(jī)對(duì)輸入的RNA序列進(jìn)行二進(jìn)制編碼,使用2位二進(jìn)制數(shù)00、01、10、11對(duì)RNA序列中的A、C、G、U字符進(jìn)行編碼,并將編碼后的序列發(fā)送至可重構(gòu)算法加速器的DRAM;第四步,主機(jī)向可重構(gòu)算法加速器發(fā)送啟動(dòng)命令,啟動(dòng)算法FPGA,主機(jī)進(jìn)入等待狀態(tài);算法FPGA接收到啟動(dòng)命令后啟動(dòng)PE陣列執(zhí)行無(wú)回溯CYK/inside算法計(jì)算,計(jì)算過程包括以下步驟4.1PE初始化,算法FPGA在收到主機(jī)發(fā)出的啟動(dòng)命令后,立即啟動(dòng)PE陣列的初始化過程,具體步驟如下4.1.1所有PE在各自的數(shù)據(jù)緩存區(qū)中選擇編號(hào)最小的一個(gè)空閑區(qū)域保存計(jì)算結(jié)果;4.1.2主PE通過DRAM存儲(chǔ)控制器從DRAM中讀出RNA序列,并將RNA序列發(fā)送至所有從PE,從PE接收RNA序列并存儲(chǔ)在各自的RNA序列存儲(chǔ)器中;4.1.3所有PE根據(jù)各自在PE陣列中的編號(hào)為將要計(jì)算的元素下標(biāo)賦初始值i=P_id,j=P_id,k=K;i,j,k為元素在三維矩陣中的坐標(biāo),P_id為PE的編號(hào),其中主PE的P_id=1,從PE的P_id為2~n之間的整數(shù),K為CM模型中的狀態(tài)數(shù)量同時(shí)也是矩陣最底層的編號(hào),n為PE的數(shù)量;4.2數(shù)據(jù)載入各PE根據(jù)當(dāng)前狀態(tài)的類型將操作數(shù)載入分值計(jì)算模塊,一共分為五種情況●如果當(dāng)前狀態(tài)類型為S、D、IL、ML,則PE分值計(jì)算模塊從該P(yáng)E的數(shù)據(jù)緩存區(qū)中載入當(dāng)前狀態(tài)的所有子狀態(tài)數(shù)據(jù)層中的第j列元素;●如果當(dāng)前狀態(tài)類型為分支狀態(tài),且P_id=1,則PE從以下兩個(gè)位置獲得計(jì)算所需的操作數(shù)1)從本地?cái)?shù)據(jù)緩存區(qū)中載入分支狀態(tài)右子狀態(tài)層的第j列元素;2)向DRAM存儲(chǔ)控制器發(fā)讀請(qǐng)求,從DRAM中載入分支狀態(tài)左子狀態(tài)層的第i行元素,并將其廣播至所有PE;●如果當(dāng)前狀態(tài)類型為分支狀態(tài),且2≤P_id≤n,則PE從以下兩個(gè)位置獲得計(jì)算所需的操作數(shù)1)從本PE數(shù)據(jù)緩存區(qū)中載入右子狀態(tài)數(shù)據(jù)層的第j列元素;2)等待接收主PE從DRAM中載入的左子狀態(tài)數(shù)據(jù)層的第i行元素;●如果當(dāng)前狀態(tài)類型為IR、MR或者M(jìn)P,且P_id=1,則PE向DRAM存儲(chǔ)控制器發(fā)讀請(qǐng)求,從DRAM載入當(dāng)前狀態(tài)的所有子狀態(tài)數(shù)據(jù)層的第j-1列元素;●如果當(dāng)前狀態(tài)類型為IR、MR或者M(jìn)P,且2≤P_id≤n,則從前一個(gè)PE的數(shù)據(jù)緩存區(qū)中載入當(dāng)前狀態(tài)的所有子狀態(tài)數(shù)據(jù)層的j-1列元素;4.3計(jì)算比對(duì)得分4.3.1對(duì)三維矩陣按狀態(tài)層方向進(jìn)行縱切,將其垂直分割為s個(gè)區(qū)域,s=[L/n],L為RNA序列的長(zhǎng)度,每一個(gè)區(qū)域仍是一個(gè)三維矩陣,每個(gè)區(qū)域都包含K層,每一層包含n列元素;然后對(duì)每一個(gè)區(qū)域逐層計(jì)算從第1個(gè)區(qū)域的第K層出發(fā),當(dāng)?shù)贙層計(jì)算完成后再算第K-1層,直到第1個(gè)區(qū)域的第1層算完,然后再計(jì)算第2個(gè)區(qū)域的第K層,第K-1層,...,第1層;之后再計(jì)算第3個(gè)區(qū)域...,直到最后一個(gè)區(qū)域的第1層算完;對(duì)每一層的計(jì)算而言,每個(gè)PE負(fù)責(zé)計(jì)算當(dāng)前狀態(tài)層中的一列,PE計(jì)算的元素的列號(hào)與PE在陣列中的序號(hào)P_id對(duì)應(yīng);主PE的編號(hào)P_id=1,負(fù)責(zé)計(jì)算本區(qū)域第1列元素,從PE計(jì)算本區(qū)域的第2~n列元素;4.3.2陣列中的n個(gè)PE采用單程序多數(shù)據(jù)流方式同時(shí)計(jì)算位于矩陣不同列的n個(gè)數(shù)據(jù),PE都使用無(wú)回溯CYK/inside算法的迭代公式對(duì)矩陣元素進(jìn)行計(jì)算,但計(jì)算時(shí)根據(jù)不同的狀態(tài)類型采用不同的計(jì)算順序,方法是4.3.2.1如果當(dāng)前狀態(tài)k是分支狀態(tài),則每一個(gè)PE都從各自列的頂部位置開始按照由上至下的順序計(jì)算當(dāng)前狀態(tài)層的計(jì)算啟動(dòng)時(shí),主PE計(jì)算元素(1,j),第1從PE計(jì)算元素(1,j+1),...,第n-1從PE計(jì)算元素(1,j+n-1),j為元素在矩陣中的列坐標(biāo),1≤j≤L;當(dāng)?shù)?行的n個(gè)元素計(jì)算完之后,所有PE同時(shí)更新元素的橫坐標(biāo),計(jì)算下一行的n個(gè)元素;每一個(gè)PE由上至下串行計(jì)算本列元素,整個(gè)PE陣列每次完成本狀態(tài)層中的一行元素的計(jì)算;當(dāng)一個(gè)PE計(jì)算的元素坐標(biāo)i=j(luò)時(shí),PE計(jì)算暫停,進(jìn)入等待狀態(tài);由于三角矩陣每一列元素的個(gè)數(shù)不等,PE按編號(hào)順序依次進(jìn)入同步等待狀態(tài),直到收到最后一個(gè)從PE的計(jì)算完成信號(hào);4.3.2.2如果當(dāng)前狀態(tài)k是非分支狀態(tài),則每一個(gè)PE都從各自列的底部位置開始,按照由下至上的順序計(jì)算當(dāng)前狀態(tài)層的計(jì)算啟動(dòng)時(shí),所有PE計(jì)算的元素都位于三角矩陣的主對(duì)角線上主PE計(jì)算元素(i,j),第1從PE計(jì)算元素(i+1,j+1),...,第n-1從PE計(jì)算元素(i+n-1,j+n-1),1≤i≤L,i≤j≤L;當(dāng)前對(duì)角線上的n個(gè)元素計(jì)算完之后,所有PE同時(shí)向上移動(dòng)一個(gè)計(jì)算位置,主PE計(jì)算元素(i-1,j),第1從PE計(jì)算元素(i,+1),...,第n-1從PE計(jì)算元素(i+n-2,j+n-1);當(dāng)PE計(jì)算的元素行坐標(biāo)i=1時(shí),PE計(jì)算暫停,PE按編號(hào)順序依次進(jìn)入同步等待狀態(tài);當(dāng)一列元素計(jì)算完成后如果需要寫回,則直接發(fā)出寫回請(qǐng)求;4.4所有PE的列元素計(jì)算結(jié)果都保存在PE各自的數(shù)據(jù)緩存區(qū)中,PE根據(jù)狀態(tài)類型確定是否將數(shù)據(jù)寫回DRAM4.4.1如果當(dāng)前狀態(tài)是分支狀態(tài)的左子狀態(tài),則所有PE都將計(jì)算結(jié)果寫回DRAM;4.4.2如果當(dāng)前狀態(tài)是匹配、右插入或者右匹配狀態(tài),則只有最后一個(gè)從PE將計(jì)算結(jié)果寫回DRAM,其它PE的計(jì)算結(jié)果都保存在各自數(shù)據(jù)緩存區(qū)中;4.5對(duì)各PE進(jìn)行同步;4.6加載新任務(wù)當(dāng)每個(gè)PE都收到第n-1從PE的計(jì)算完成信號(hào)時(shí),PE陣列控制器將本區(qū)域中的下一個(gè)狀態(tài)層加載至PE陣列,為每一個(gè)PE分配新狀態(tài)層中的一列元素,即為變量i,j,k賦值如果k>0,則i=P_id,j=P_id,k=k-1,載入CM模型的第k-1行數(shù)據(jù);否則,i=P_id,j=j(luò)+n,k=K,載入CM模型的第K行數(shù)據(jù),隨后PE控制狀態(tài)機(jī)進(jìn)入結(jié)束條件判斷狀態(tài);如果j>L,則轉(zhuǎn)4.7進(jìn)入結(jié)束狀態(tài),否則在數(shù)據(jù)緩存區(qū)尋找一個(gè)新的編號(hào)最小的空閑區(qū)域,然后轉(zhuǎn)4.2;4.7當(dāng)所有PE都進(jìn)入結(jié)束狀態(tài)后,主PE將最終的計(jì)算結(jié)果M(1,L,1)的值寫回DRAM,算法FPGA向主機(jī)發(fā)計(jì)算完成信號(hào),PE計(jì)算過程結(jié)束;PE控制模塊將所有寄存器清0,回到開始狀態(tài),等待主機(jī)發(fā)新的啟動(dòng)命令;第五步,主機(jī)接收到可重構(gòu)算法加速器返回的計(jì)算完成信號(hào)后通過PCI-E接口向可重構(gòu)算法加速器發(fā)數(shù)據(jù)讀命令,算法FPGA接收數(shù)據(jù)讀命令將計(jì)算結(jié)果從DRAM中讀出,通過PCI-E接口轉(zhuǎn)發(fā)給主機(jī),RNA序列比對(duì)過程結(jié)束。
2.如權(quán)利要求1所述的對(duì)基于隨機(jī)上下文無(wú)關(guān)文法的RNA 二級(jí)結(jié)構(gòu)預(yù)測(cè)進(jìn)行加速的 方法,其特征在于所述DRAM存儲(chǔ)容量要求大于1GB ;所述PE陣列中數(shù)據(jù)傳遞寄存器組使用 FPGA片內(nèi)分布式存儲(chǔ)模塊實(shí)現(xiàn),采用雙端口設(shè)計(jì);PE陣列中的數(shù)據(jù)緩存區(qū)使用FPGA片內(nèi)集中式存儲(chǔ)模塊實(shí)現(xiàn),采用雙端口設(shè)計(jì);PE中的RNA序列存儲(chǔ)器采用FPGA片內(nèi)分布式存儲(chǔ)模 塊實(shí)現(xiàn),容量大于L/4字節(jié),L為按字符計(jì)數(shù)的RNA序列長(zhǎng)度;PE中的CM模型存儲(chǔ)器容量大 于2Kb。
3. 如權(quán)利要求1所述的對(duì)基于隨機(jī)上下文無(wú)關(guān)文法的RNA二級(jí)結(jié)構(gòu)預(yù)測(cè)進(jìn)行加速的方 法,其特征在于所述PE陣列中的每個(gè)數(shù)據(jù)緩存區(qū)都由多個(gè)獨(dú)立的存儲(chǔ)區(qū)域構(gòu)成,每一個(gè)存 儲(chǔ)區(qū)域存儲(chǔ)三角矩陣的一列元素,所有存儲(chǔ)區(qū)域中存放的元素的列編號(hào)都相同,但這些列 元素位于不同的狀態(tài)層;每個(gè)存儲(chǔ)區(qū)域都由三個(gè)寄存器標(biāo)明該區(qū)域的使用狀態(tài),其中位置 寄存器deck」d用于記錄所存儲(chǔ)的數(shù)據(jù)所處的狀態(tài)層編號(hào),父狀態(tài)寄存器p_cnt記錄還未 計(jì)算出的本狀態(tài)層對(duì)應(yīng)的父狀態(tài)數(shù)量,區(qū)域數(shù)據(jù)有效標(biāo)志寄存器BRAM_valid表示對(duì)應(yīng)區(qū) 域存儲(chǔ)的數(shù)據(jù)是否有效。
4. 如權(quán)利要求1所述的對(duì)基于隨機(jī)上下文無(wú)關(guān)文法的RNA二級(jí)結(jié)構(gòu)預(yù)測(cè)進(jìn)行加速的方 法,其特征在于所述分值計(jì)算模塊中的結(jié)束狀態(tài)計(jì)算模塊、非分支狀態(tài)計(jì)算模塊和分支狀 態(tài)計(jì)算模塊三個(gè)子模塊均由狀態(tài)寄存器、加法器、比較器和數(shù)據(jù)輸出寄存器組成,狀態(tài)寄存 器與加法器相連,保存CM模型的當(dāng)前狀態(tài)信息;加法器與狀態(tài)寄存器、PE控制模塊、比較器 相連,非分支狀態(tài)計(jì)算模塊和分支狀態(tài)計(jì)算模塊中的加法器還與數(shù)據(jù)緩存區(qū)相連,結(jié)束狀 態(tài)計(jì)算模塊與數(shù)據(jù)緩存區(qū)的數(shù)據(jù)通路連接是單向的,只寫數(shù)據(jù)緩存區(qū)而不從數(shù)據(jù)緩存區(qū)中 讀回?cái)?shù)據(jù);加法器從PE控制模塊和數(shù)據(jù)緩存區(qū)中載入操作數(shù),從狀態(tài)寄存器中讀取當(dāng)前狀 態(tài)下的字符生成概率ek和狀態(tài)轉(zhuǎn)移概率tk,執(zhí)行加法運(yùn)算,并將結(jié)果傳遞給比較器;比較器 與加法器和輸出寄存器相連,它從加法器獲得當(dāng)前的計(jì)算結(jié)果,從輸出寄存器獲得當(dāng)前最 大值,在PE控制模塊的控制下將計(jì)算結(jié)果和當(dāng)前最大值中的較大者寫入輸出寄存器;輸出 寄存器與比較器和數(shù)據(jù)緩存區(qū)相連,它保存當(dāng)前狀態(tài)的所有子狀態(tài)下運(yùn)算結(jié)果的最大值, 并在計(jì)算完成后將輸出寄存器中的值即元素M(i, j, k)寫入數(shù)據(jù)緩存區(qū)。
5. 如權(quán)利要求1所述的對(duì)基于隨機(jī)上下文無(wú)關(guān)文法的RNA二級(jí)結(jié)構(gòu)預(yù)測(cè)進(jìn)行加速的方 法,其特征在于PE控制模塊這個(gè)控制狀態(tài)機(jī)由13個(gè)狀態(tài)構(gòu)成,狀態(tài)定義和轉(zhuǎn)換過程是開始狀態(tài)算法FPGA配置結(jié)束并復(fù)位之后,控制狀態(tài)機(jī)自動(dòng)進(jìn)入開始狀態(tài),收到10接口控制器發(fā)出的啟動(dòng)命令后進(jìn)入PE初始化狀態(tài);PE初始化狀態(tài)在數(shù)據(jù)緩存區(qū)中選擇編號(hào)最小的一個(gè)空閑區(qū)域保存計(jì)算結(jié)果;向DRAM 存儲(chǔ)控制器發(fā)讀請(qǐng)求,從DRAM載入RNA序列,并寫入RNA序列存儲(chǔ)器;為PE計(jì)算的元素下 標(biāo)賦初始值i = P」d, j = P」d, k = K,初始化操作完成后進(jìn)入讀CM模型狀態(tài);讀CM模型狀態(tài)該狀態(tài)下,PE控制模塊向DRAM存儲(chǔ)控制器發(fā)出讀請(qǐng)求,從DRAM載入 CM模型當(dāng)前狀態(tài)k的信息,并寫入CM模型存儲(chǔ)器,隨后進(jìn)入狀態(tài)類型判斷狀態(tài);狀態(tài)類型判斷狀態(tài)將當(dāng)前狀態(tài)編號(hào)k填入在PE初始化狀態(tài)選擇的空閑區(qū)域?qū)?yīng)的位 置寄存器deck」d中;并判斷當(dāng)前狀態(tài)的類型,如果是結(jié)束狀態(tài),則進(jìn)入結(jié)束狀態(tài)元素計(jì)算 狀態(tài);如果是非分支狀態(tài),則進(jìn)入非分支狀態(tài)元素計(jì)算狀態(tài);如果是分支狀態(tài),則進(jìn)入分支狀態(tài)元素計(jì)算狀態(tài),并給PE計(jì)算的元素下標(biāo)賦新值i = 1, j =P」d,k = K;結(jié)束狀態(tài)元素計(jì)算狀態(tài)在本狀態(tài)下啟動(dòng)結(jié)束狀態(tài)計(jì)算子模塊,按照CYK/inside算法 迭代公式中的結(jié)束狀態(tài)計(jì)算分支對(duì)矩陣元素M(i, j, k)進(jìn)行計(jì)算;結(jié)束狀態(tài)元素的計(jì)算只 與元素位置相關(guān),不需要從DRAM或者數(shù)據(jù)緩存區(qū)載入數(shù)據(jù),產(chǎn)生的計(jì)算結(jié)果保存在數(shù)據(jù)緩 存區(qū),然后根據(jù)元素下標(biāo)判斷本列元素的計(jì)算是否完成;如果i = l,則進(jìn)入列元素計(jì)算完成狀態(tài);否則繼續(xù)保持本狀態(tài),i = i-l,計(jì)算下一個(gè)元素;非分支狀態(tài)元素計(jì)算狀態(tài)在本狀態(tài)下啟動(dòng)非分支狀態(tài)計(jì)算子模塊,按照CYK/inside 算法迭代公式中的非分支狀態(tài)計(jì)算分支對(duì)矩陣元素M(i, j, k)進(jìn)行計(jì)算,這里非分支狀態(tài) 不包括結(jié)束狀態(tài);如果當(dāng)前狀態(tài)為開始狀態(tài)、刪除狀態(tài)或左插入狀態(tài),則從本PE的數(shù)據(jù)緩 存區(qū)載入操作數(shù);如果當(dāng)前狀態(tài)為匹配或右插入狀態(tài),主PE從DRAM載入操作數(shù),從PE從前 一個(gè)PE的數(shù)據(jù)緩存區(qū)載入載入操作數(shù)。計(jì)算結(jié)果保存在數(shù)據(jù)緩存區(qū),然后根據(jù)元素下標(biāo)判 斷本列元素的計(jì)算是否完成;如果i = l,則進(jìn)入列元素計(jì)算完成狀態(tài);否則繼續(xù)保持本狀 態(tài),更新元素下標(biāo)i = i-l,計(jì)算下一個(gè)元素;分支狀態(tài)元素計(jì)算狀態(tài)在本狀態(tài)下啟動(dòng)分支狀態(tài)計(jì)算子模塊,按照CYK/inside算 法迭代公式中的分支狀態(tài)計(jì)算分支對(duì)矩陣元素M(i, j, k)進(jìn)行計(jì)算;分支狀態(tài)計(jì)算模塊從 DRAM中載入左子狀態(tài)的一行,從PE的數(shù)據(jù)緩存區(qū)中載入右子狀態(tài)的一列數(shù)據(jù),計(jì)算結(jié)果保 存在數(shù)據(jù)緩存區(qū),然后根據(jù)元素下標(biāo)判斷本列元素的計(jì)算是否完成;如果i = P」d,則進(jìn)入 列元素計(jì)算完成狀態(tài);否則繼續(xù)保持本狀態(tài),元素下標(biāo)i = i+l,繼續(xù)計(jì)算下一個(gè)元素;列元素計(jì)算完成狀態(tài)將存放當(dāng)前狀態(tài)的子狀態(tài)數(shù)據(jù)的存儲(chǔ)區(qū)域?qū)?yīng)的父狀態(tài)寄存器 數(shù)值減l,并根據(jù)當(dāng)前計(jì)算的CM模型狀態(tài)類型判斷是否需要將保存在數(shù)據(jù)緩存區(qū)中的元素 寫回DRAM ;如果當(dāng)前狀態(tài)是分支狀態(tài)的左子狀態(tài),則所有PE的PE控制模塊都向PE同步與 寫回控制器發(fā)出寫回請(qǐng)求,隨后進(jìn)入寫回狀態(tài);如果當(dāng)前狀態(tài)是匹配、右插入或者右匹配狀 態(tài),則最后一個(gè)從PE的PE控制模塊向PE同步與寫回控制器發(fā)寫回請(qǐng)求,隨后最后一個(gè)從 PE的PE控制模塊進(jìn)入寫回狀態(tài),其它PE控制狀態(tài)機(jī)進(jìn)入同步等待狀態(tài);如果當(dāng)前狀態(tài)是 左插入、左匹配、刪除或者結(jié)束狀態(tài),則不需要將數(shù)據(jù)緩存區(qū)中的元素寫回DRAM,所有PE的 PE控制狀態(tài)機(jī)直接進(jìn)入同步等待狀態(tài);寫回狀態(tài)PE在該狀態(tài)下保持?jǐn)?shù)據(jù)寫回請(qǐng)求,直到PE同步與寫回控制器響應(yīng)該請(qǐng)求, 隨后PE同步與寫回控制器將數(shù)據(jù)從PE數(shù)據(jù)緩存區(qū)中讀出,通過DRAM存儲(chǔ)控制器將數(shù)據(jù)寫 回DRAM ;在收到PE同步與寫回控制器返回的寫回完成信號(hào)后向陣列中的其他PE發(fā)出區(qū)域計(jì)算完成信號(hào),進(jìn)入緩存區(qū)數(shù)據(jù)替換狀態(tài);同步等待狀態(tài)該狀態(tài)下PE處于空閑狀態(tài),在收到最后一個(gè)PE發(fā)出的區(qū)域計(jì)算完成信號(hào)后進(jìn)入緩存區(qū)數(shù)據(jù)替換狀態(tài);緩存區(qū)數(shù)據(jù)替換狀態(tài)PE控制狀態(tài)機(jī)判斷當(dāng)前使用的存儲(chǔ)區(qū)域的父狀態(tài)寄存器p_cnt 的值是否為0,如果為0,則將該存儲(chǔ)區(qū)域的數(shù)據(jù)有效標(biāo)志寄存器清0,并將該存儲(chǔ)區(qū)域編號(hào) 加入空閑存儲(chǔ)區(qū)域集合;更新元素下標(biāo)i, j, k的值如果k > O,則i = P」d, j = P」d, k =k-1 ;否則i = P」d, j = j+n, k = K,隨后進(jìn)入結(jié)束條件判斷狀態(tài);結(jié)束條件判斷狀態(tài)PE控制狀態(tài)機(jī)判斷分值計(jì)算模塊終止條件如果j > L,則進(jìn)入結(jié) 束狀態(tài),否則進(jìn)入讀CM模型狀態(tài),準(zhǔn)備對(duì)下一列元素進(jìn)行計(jì)算;結(jié)束狀態(tài)PE控制狀態(tài)機(jī)將所有寄存器清O,回到開始狀態(tài),等待接收IO接口控制器轉(zhuǎn) 發(fā)主機(jī)發(fā)出的新的啟動(dòng)命令,開始下一輪計(jì)算。
6.如權(quán)利要求1所述的對(duì)基于隨機(jī)上下文無(wú)關(guān)文法的RNA二級(jí)結(jié)構(gòu)預(yù)測(cè)進(jìn)行加速的方 法,其特征在于所述對(duì)CM模型進(jìn)行格式化是指將CM模型文件中的數(shù)據(jù)按照狀態(tài)編號(hào)的升 序逐行順序地存放,為每個(gè)狀態(tài)分配存儲(chǔ)單元,并對(duì)不足一行的狀態(tài)數(shù)據(jù)信息進(jìn)行填充補(bǔ) 0,所述一行是指CM模型文件中的每個(gè)狀態(tài)對(duì)應(yīng)的數(shù)據(jù)量的最大長(zhǎng)度。
7. 如權(quán)利要求1所述的對(duì)基于隨機(jī)上下文無(wú)關(guān)文法的RNA二級(jí)結(jié)構(gòu)預(yù)測(cè)進(jìn)行加速的方 法,其特征在于所述啟動(dòng)命令由操作碼、RNA序列長(zhǎng)度、RNA序列在DRAM存放的基地址、CM 模型狀態(tài)數(shù)量、CM模型在DRAM存放的基地址、中間結(jié)果和最終計(jì)算結(jié)果在DRAM存放的基 地址組成。
8. 如權(quán)利要求1所述的對(duì)基于隨機(jī)上下文無(wú)關(guān)文法的RNA 二級(jí)結(jié)構(gòu)預(yù)測(cè)進(jìn)行加速的 方法,其特征在于所述PE對(duì)矩陣元素進(jìn)行計(jì)算時(shí),當(dāng)n = 1時(shí),沒有從PE,則如果當(dāng)前狀態(tài) k是分支狀態(tài),主PE按照從左至右的順序?qū)仃囋剡M(jìn)行逐列計(jì)算,在每一列內(nèi)部按照由 上至下的順序?qū)γ恳粋€(gè)元素進(jìn)行計(jì)算;如果當(dāng)前狀態(tài)k是非分支狀態(tài),主PE按照從左至右 的順序?qū)仃囋剡M(jìn)行逐列計(jì)算,在每一列內(nèi)部按照由下至上的順序?qū)γ恳粋€(gè)元素進(jìn)行計(jì) 算。
9. 如權(quán)利要求l所述的對(duì)基于隨機(jī)上下文無(wú)關(guān)文法的RNA二級(jí)結(jié)構(gòu)預(yù)測(cè)進(jìn)行加速的方 法,其特征在于PE將計(jì)算結(jié)果寫回DRAM的方法是PE完成本列元素的計(jì)算后向PE同步與 寫回控制器發(fā)數(shù)據(jù)寫回請(qǐng)求,隨后PE同步與寫回控制器將數(shù)據(jù)從PE的數(shù)據(jù)緩存區(qū)中讀出, 通過DRAM存儲(chǔ)控制器將數(shù)據(jù)寫回DRAM ;如果陣列中同時(shí)有多個(gè)PE發(fā)數(shù)據(jù)寫回請(qǐng)求,PE同 步與寫回控制器依次將各PE的數(shù)據(jù)寫回DRAM。
10. 如權(quán)利要求1所述的對(duì)基于隨機(jī)上下文無(wú)關(guān)文法的RNA 二級(jí)結(jié)構(gòu)預(yù)測(cè)進(jìn)行加速的 方法,其特征在于所述對(duì)各PE進(jìn)行同步的方法是當(dāng)陣列中的某個(gè)PE完成本列元素的計(jì)算 之后進(jìn)入同步等待狀態(tài),PE在同步等待狀態(tài)下收到第n-l從PE發(fā)出的當(dāng)前狀態(tài)層計(jì)算完 成信號(hào)后進(jìn)入緩存區(qū)數(shù)據(jù)替換狀態(tài);PE在緩存區(qū)數(shù)據(jù)替換狀態(tài)下判斷是否存在某個(gè)存儲(chǔ) 區(qū)域的父狀態(tài)寄存器P—cnt數(shù)值為O,若為0則釋放該狀態(tài)占用的數(shù)據(jù)緩存區(qū)。
全文摘要
本發(fā)明公開了一種對(duì)基于隨機(jī)上下文無(wú)關(guān)文法的RNA二級(jí)結(jié)構(gòu)預(yù)測(cè)進(jìn)行加速的方法,目的是加快使用SCFG進(jìn)行RNA二級(jí)結(jié)構(gòu)預(yù)測(cè)的速度。技術(shù)方案是先構(gòu)建由主機(jī)和可重構(gòu)算法加速器組成的異構(gòu)計(jì)算機(jī)系統(tǒng),接著主機(jī)將格式化后的CM模型和編碼后的RNA序列發(fā)送至可重構(gòu)算法加速器,可重構(gòu)算法加速器的PE陣列執(zhí)行無(wú)回溯CYK/inside算法計(jì)算,計(jì)算中采用“按區(qū)域分割”和“逐層按列并行處理”的任務(wù)劃分策略實(shí)現(xiàn)細(xì)粒度并行計(jì)算,且n個(gè)PE采用SPMD方式同時(shí)計(jì)算位于矩陣不同列的n個(gè)數(shù)據(jù),但計(jì)算時(shí)根據(jù)不同的狀態(tài)類型采用不同的計(jì)算順序;采用本發(fā)明實(shí)現(xiàn)了對(duì)基于SCFG模型的RNA序列二級(jí)結(jié)構(gòu)預(yù)測(cè)應(yīng)用加速,加速比高,成本低。
文檔編號(hào)G06F19/00GK101717817SQ20091004392
公開日2010年6月2日 申請(qǐng)日期2009年7月17日 優(yōu)先權(quán)日2009年7月17日
發(fā)明者周杰, 夏飛, 姜晶菲, 竇勇, 鄔貴明, 雷元武 申請(qǐng)人:中國(guó)人民解放軍國(guó)防科學(xué)技術(shù)大學(xué)