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