專利名稱:并行simd結(jié)構(gòu)中條件數(shù)據(jù)路由方法
技術(shù)領(lǐng)域:
本發(fā)明主要涉及到并行處理器中路由方法的設(shè)計領(lǐng)域,特指一種并行SIMD結(jié)構(gòu)中條件數(shù)據(jù)路由方法。
背景技術(shù):
隨著多媒體技術(shù)中數(shù)據(jù)并行程序的出現(xiàn),涌現(xiàn)出了很多針對數(shù)據(jù)并行的并行微處理器。這些并行處理器能夠捕獲程序中大量的數(shù)據(jù)并行性和局部性,具有很高的性能,但對于帶有控制相關(guān)的程序,其性能會大打折扣。條件執(zhí)行,能夠?qū)⒖刂葡嚓P(guān)轉(zhuǎn)化成為數(shù)據(jù)路由,極大擴(kuò)展了數(shù)據(jù)并行應(yīng)用程序的范圍。相對于傳統(tǒng)的數(shù)據(jù)并行處理器,帶條件流處理機(jī)制的流處理器能夠獲得極高的性能加速比。將條件流技術(shù)應(yīng)用于流體系結(jié)構(gòu),能夠以較少的代價獲得很高的性能,是處理控制相關(guān)的非常有效技術(shù)。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題就在于針對現(xiàn)有技術(shù)存在的技術(shù)問題,本發(fā)明提供一種擴(kuò)展了數(shù)據(jù)并行應(yīng)用程序的范圍,使得并行微處理器能夠更有效的執(zhí)行帶控制相關(guān)應(yīng)用程序的并行SIMD結(jié)構(gòu)中條件數(shù)據(jù)路由方法。
為解決上述技術(shù)問題,本發(fā)明提出的解決方案為一種并行SIMD結(jié)構(gòu)中條件數(shù)據(jù)路由方法,其特征在于條件處理時將每個運算群根據(jù)自身條件值的不同對流記錄進(jìn)行重組和篩選,使重組后的流滿足執(zhí)行某一相同的執(zhí)行條件,條件操作可以發(fā)生在進(jìn)行流數(shù)據(jù)計算之前,這叫條件輸入流,或發(fā)生在流數(shù)據(jù)計算之后,為條件輸出流;(1)、對于條件輸入流第一步,首先要進(jìn)行條件流狀態(tài)的初始化,初始化的過程由控制部件JB完成;第二步,每次循環(huán)處理時,要根據(jù)當(dāng)前循環(huán)的條件碼進(jìn)行條件狀態(tài)的更新;JB更新狀態(tài)時,要讀取上一次循環(huán)的條件狀態(tài)以及當(dāng)前循環(huán)的條件碼;JB部件更新完狀態(tài)位之后要將ready位發(fā)給控制器,由控制器根據(jù)ready位是否有效,如果ready位有效,控制輸入輸出單元進(jìn)行一次條件輸入操作,輸入的數(shù)據(jù)寫入數(shù)據(jù)緩沖SP中,向SP寫入數(shù)據(jù)的時候,SP根據(jù)JB發(fā)來的write_wrap位控制數(shù)據(jù)寫入到雙緩沖的哪一半;若ready為0,輸入輸出單元不進(jìn)行條件輸入操作,相應(yīng)SP的寫操作也不發(fā)生;第三步,數(shù)據(jù)緩沖部件SP根據(jù)JB發(fā)過來的read_wrap位對相應(yīng)的項進(jìn)行一次條件讀操作,并將讀出來的數(shù)據(jù)由通信部件COMM發(fā)送到群間總線上,同時COMM從群間總線上選取本地需要的數(shù)據(jù),并傳到群內(nèi)總線上;每一次條件輸入循環(huán)從更新狀態(tài)開始,至此一次條件循環(huán)完畢;(2)、對于條件輸出流第一步,首先要進(jìn)行條件流狀態(tài)的初始化,初始化的過程由控制部件JB完成,其次每次循環(huán)處理時,要根據(jù)當(dāng)前循環(huán)的條件碼進(jìn)行條件狀態(tài)的更新;第二步,每次循環(huán)處理時,要根據(jù)當(dāng)前循環(huán)的條件碼進(jìn)行條件狀態(tài)的更新;JB更新狀態(tài)時,要讀取上一次循環(huán)的條件狀態(tài)以及當(dāng)前循環(huán)的條件碼;第三步,數(shù)據(jù)緩沖部件SP將數(shù)據(jù)緩存,向SP寫入數(shù)據(jù)的時候,SP根據(jù)JB發(fā)來的write_wrap位控制數(shù)據(jù)寫入到雙緩沖的哪一半;之后,由控制器根據(jù)ready位是否有效,如果ready位有效,控制輸入輸出單元進(jìn)行一次條件輸出操作,數(shù)據(jù)首先從緩沖SP中讀出,并寫入流buffer中;若ready為0,輸入輸出單元不進(jìn)行條件輸入操作,相應(yīng)SP的寫操作也不發(fā)生。
所述JB部件用來保存和更新條件流狀態(tài),包括ready_bit、start_cs、read_wrap_bit、write_wrap_bit、stream_id、my_cc和new_data,在每次流記錄的傳輸之前都要從JBRF讀入條件流的狀態(tài)位,對其進(jìn)行更新并進(jìn)行存儲,這7個狀態(tài)要同時供UC、SP、VAL和JB四個部件同時使用,以滿足三部件協(xié)同處理條件流的要求;所述JB部件除了保存和更新條件流的狀態(tài),還根據(jù)所有運算群的條件碼以及條件流狀態(tài),計算COMM單元通信所需要的PERM值。
所述JB部件中7個狀態(tài)位的表示為(1)、ready_bit1位狀態(tài)位,供微控使用,用于標(biāo)志處理單元是否進(jìn)行有效的數(shù)據(jù)傳輸,將數(shù)據(jù)寫入外部存儲或者從外部存儲讀入數(shù)據(jù);(2)、start_cslog2n(n為處理單元的個數(shù))位指針,供SP使用,表示每次條件處理時從數(shù)據(jù)緩沖的那一項開始讀或者寫操作;(3)、read_wrap_bit1位標(biāo)志位,供SP使用,表示每次條件處理時從數(shù)據(jù)緩沖的哪個半緩沖讀取數(shù)據(jù);(4)、write_wrap_bit1位標(biāo)志位,供SP使用,表示每次條件處理時向數(shù)據(jù)緩沖的哪個半緩沖寫入數(shù)據(jù);(5)、stream_idlog2k(k為能處理的最大流的個數(shù))位標(biāo)志位,供JB和VAL部件使用,標(biāo)識本次條件處理的數(shù)據(jù)流的id號;
(6)、my_cc1位標(biāo)志位,供VAL部件使用,表示本次條件處理中本處理單元的條件碼值;(7)、new_data1位標(biāo)志位,供VAL使用,表示運算群需要處理的數(shù)據(jù)是否已經(jīng)在SP中存儲。new_data為1,表示運算群需要的數(shù)據(jù)在SB中;否則,表示運算群需要的數(shù)據(jù)在SP中。
所述VAL部件用來追蹤流何時結(jié)束;SP部件作為一個可動態(tài)尋址的存儲器使用,從JB獲得輸入以處理條件讀寫;每個運算群中的通信部件與群間總線相連,負(fù)責(zé)不同運算群之間的數(shù)據(jù)通信,每個運算群的JB部件和條件碼總線相連,每個運算群的JB部件為條件碼總線提供一位條件碼,供其它運算群使用;條件執(zhí)行機(jī)制的各功能部件都具有各自的本地寄存器文件,在運算群內(nèi)部,LRF的輸入數(shù)據(jù)與功能部件的輸出通過交叉開關(guān)與運算群內(nèi)部互聯(lián)總線連接,功能部件的運算結(jié)果送到內(nèi)部互聯(lián)總線,然后通過該總線送到指定的內(nèi)部寄存器文件中。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點就在于1、本發(fā)明能夠解決并行微處理器,尤其是SIMD結(jié)構(gòu)的數(shù)據(jù)并行處理器,執(zhí)行帶控制相關(guān)的數(shù)據(jù)并行程序時,性能嚴(yán)重下降問題;2、條件數(shù)據(jù)路由方法能夠?qū)⒖刂葡嚓P(guān)轉(zhuǎn)化為數(shù)據(jù)路由,這樣就擴(kuò)展了數(shù)據(jù)并行應(yīng)用程序的范圍,使得并行微處理器能夠更有效的執(zhí)行帶控制相關(guān)的應(yīng)用程序。
3、條件處理時,每個運算群可以根據(jù)自身條件值的不同對流記錄進(jìn)行重組和篩選,使重組后的流滿足執(zhí)行某一相同的執(zhí)行條件,從而避免了計算過程中根據(jù)數(shù)據(jù)選擇執(zhí)行不同的操作而產(chǎn)生分支。條件執(zhí)行機(jī)制實際上是將控制相關(guān)轉(zhuǎn)變成了數(shù)據(jù)路由操作。
4、條件處理時各個運算群不必為了等待其他運算群的處理完成而進(jìn)行不必要的空轉(zhuǎn),每個運算群可以連續(xù)的進(jìn)行條件處理,減少了由于條件的引入而導(dǎo)致的運算群空轉(zhuǎn),節(jié)省了功耗。
5、條件處理可以在各個運算群之間進(jìn)行負(fù)載平衡控制,減少了由于SIMD結(jié)構(gòu)的處理器之間任務(wù)分配不均而導(dǎo)致的資源浪費。
圖1是條件輸入流和輸出流的處理流程圖;圖2是運算群中條件執(zhí)行機(jī)制各個部件的詳細(xì)連接關(guān)系;圖3是條件執(zhí)行機(jī)制的關(guān)鍵指令的形式化描述;圖4是包含四個運算群的流處理器中的條件路由實例。
具體實施例方式
以下將結(jié)合附圖和具體實施例對本發(fā)明做進(jìn)一步詳細(xì)說明。
本發(fā)明已應(yīng)用在國防科技大學(xué)自行研制的YHFT64-2流處理器中。
本發(fā)明在條件處理時將每個運算群根據(jù)自身條件值的不同對流記錄進(jìn)行重組和篩選,使重組后的流滿足執(zhí)行某一相同的執(zhí)行條件,條件操作可以發(fā)生在進(jìn)行流數(shù)據(jù)計算之前,為條件輸入流,或發(fā)生在流數(shù)據(jù)計算之后,為條件輸出流。
如圖1所示,對于條件輸入流第一步,首先要進(jìn)行條件流狀態(tài)的初始化,初始化的過程由控制部件JB完成,初始化的指令為INIT_CISTATE,初始化的內(nèi)容包括將ready位置0,將start_cs設(shè)為0,將read_wrap置為0,將write_wrap置為1,并將stream_id初始化。
第二步,每次循環(huán)處理時,要根據(jù)當(dāng)前循環(huán)的條件碼進(jìn)行條件狀態(tài)的更新。JB更新狀態(tài)時,要讀取上一次循環(huán)的條件狀態(tài)以及當(dāng)前循環(huán)的條件碼,更新狀態(tài)的指令是GEN_CISTATE,更新的具體內(nèi)容如圖3中指令偽碼所示。JB部件更新完狀態(tài)位之后要將ready位發(fā)給控制器,由控制器根據(jù)ready位是否有效,如果ready位有效,控制輸入輸出單元進(jìn)行一次條件輸入操作,輸入的數(shù)據(jù)寫入數(shù)據(jù)緩沖SP中,向SP寫入數(shù)據(jù)的時候,SP根據(jù)JB發(fā)來的write_wrap位控制數(shù)據(jù)寫入到雙緩沖的哪一半。若ready為0,輸入輸出單元不進(jìn)行條件輸入操作,相應(yīng)SP的寫操作也不發(fā)生。
第三步,數(shù)據(jù)緩沖部件SP根據(jù)JB發(fā)過來的read_wrap位對相應(yīng)的項進(jìn)行一次條件讀操作,并將讀出來的數(shù)據(jù)由通信部件COMM發(fā)送到群間總線上,同時COMM從群間總線上選取本地需要的數(shù)據(jù),并傳到群內(nèi)總線上。每一次條件輸入循環(huán)從更新狀態(tài)開始,至此一次條件循環(huán)完畢。
對于條件輸出流第一步,首先要進(jìn)行條件流狀態(tài)的初始化,初始化的過程由控制部件JB完成,初始化的指令為INIT_COSTATE,初始化的內(nèi)容包括將ready位置0,將start_cs設(shè)為0,將read_wrap置為1,將write_wrap置為0,并將stream_id初始化。其次每次循環(huán)處理時,要根據(jù)當(dāng)前循環(huán)的條件碼進(jìn)行條件狀態(tài)的更新。
第二步,每次循環(huán)處理時,要根據(jù)當(dāng)前循環(huán)的條件碼進(jìn)行條件狀態(tài)的更新。JB更新狀態(tài)時,要讀取上一次循環(huán)的條件狀態(tài)以及當(dāng)前循環(huán)的條件碼,更新狀態(tài)的指令是GEN_COSTATE,更新的具體內(nèi)容如圖3中指令偽碼所示。與條件輸入流不同的是,條件輸入流在JB部件更新完狀態(tài)位之后,通信部件COMM首先根據(jù)JB發(fā)來的perm從群間總線上選取一路數(shù)據(jù)送到群內(nèi)的總線上。
第三步,數(shù)據(jù)緩沖部件SP將數(shù)據(jù)緩存,向SP寫入數(shù)據(jù)的時候,SP根據(jù)JB發(fā)來的write_wrap位控制數(shù)據(jù)寫入到雙緩沖的哪一半。之后,由控制器根據(jù)ready位是否有效,如果ready位有效,控制輸入輸出單元進(jìn)行一次條件輸出操作,數(shù)據(jù)首先從緩沖SP中讀出,并寫入流buffer中。若ready為0,輸入輸出單元不進(jìn)行條件輸入操作,相應(yīng)SP的寫操作也不發(fā)生。
圖2是運算群中條件執(zhí)行機(jī)制各個部件的詳細(xì)連接關(guān)系。完成圖2所述的整個條件流的處理過程需要以下幾個功能塊狀態(tài)控制模塊(JB)、有效數(shù)據(jù)控制模塊(VAL)、數(shù)據(jù)緩沖模塊(SP)和通信模塊(COMM),在條件流的處理過程中,各個模塊完成的功能是1.JB模塊JB部件用來保存和更新條件流狀態(tài),包括ready_bit、start_cs、read_wrap_bit、write_wrap_bit、stream_id、my_cc和new_data,在每次流記錄的傳輸之前都要從JBRF讀入條件流的狀態(tài)位,對其進(jìn)行更新并進(jìn)行存儲。這7個狀態(tài)要同時供UC、SP、VAL和JB四個部件同時使用,以滿足三部件協(xié)同處理條件流的要求。
這7個狀態(tài)的含義是√ready_bit1位狀態(tài)位,供微控使用,用于標(biāo)志處理單元是否進(jìn)行有效的數(shù)據(jù)傳輸,將數(shù)據(jù)寫入外部存儲或者從外部存儲讀入數(shù)據(jù)。
√start_cslog2n(n為處理單元的個數(shù))位指針,供SP使用,表示每次條件處理時從數(shù)據(jù)緩沖的那一項開始讀或者寫操作。
√read_wrap_bit1位標(biāo)志位,供SP使用,表示每次條件處理時從數(shù)據(jù)緩沖的哪個半緩沖讀取數(shù)據(jù)。
√write_wrap_bit1位標(biāo)志位,供SP使用,表示每次條件處理時向數(shù)據(jù)緩沖的哪個半緩沖寫入數(shù)據(jù)。
√stream_idlog2k(k為能處理的最大流的個數(shù))位標(biāo)志位,供JB和VAL部件使用,標(biāo)識本次條件處理的數(shù)據(jù)流的id號。
√my_cc1位標(biāo)志位,供VAL部件使用,表示本次條件處理中本處理單元的條件碼值。
√new_data1位標(biāo)志位,供VAL使用,表示運算群需要處理的數(shù)據(jù)是否已經(jīng)在SP中存儲。new_data為1,表示運算群需要的數(shù)據(jù)在SB中;否則,表示運算群需要的數(shù)據(jù)在SP中。
JB部件除了保存和更新條件流的狀態(tài),還根據(jù)所有運算群的條件碼以及條件流狀態(tài),計算COMM單元通信所需要的PERM值。
2.VAL模塊VAL追蹤流何時結(jié)束。這在條件流中當(dāng)輸出的有效數(shù)據(jù)總數(shù)不是運算群個數(shù)的倍數(shù)要填充流的時候非常必要。
VAL更新的條件流的狀態(tài)標(biāo)志包括valid、ccend和ccflush。valid和ccend用于條件輸入流,來處理流結(jié)束后仍然有數(shù)據(jù)請求的情況;ccflush用于條件輸出流,來處理輸出流末尾記錄個數(shù)不夠運算群個數(shù)的整數(shù)倍的清空問題。這三個狀態(tài)標(biāo)志的具體含義是√valid1位標(biāo)示位,當(dāng)運算群的SP的雙buffer中還有有效數(shù)據(jù)(條件流中的有效數(shù)據(jù))的時候,valid置true。一旦所有運算群的SP中所有有效數(shù)據(jù)都被讀出,則valid被置為false。這個valid標(biāo)志位在所有運算群中的值是一致的。
√ccend1位標(biāo)示位,只有在條件輸入流的時候有效。每個運算群都有一位,用于給每個運算群指示它們從條件輸入流中讀入的數(shù)據(jù)是否是有效的。由于條件輸入流的長度不一定是運算群數(shù)目的整數(shù)倍,因此當(dāng)接近條件輸入流末尾時,運算群接受到的數(shù)據(jù)可能是無效的。接受無效數(shù)據(jù)的運算群的ccend被置為false。舉例那么當(dāng)輸入流已經(jīng)到了末尾(EOS)時,現(xiàn)在所有的運算群的SP的雙buffer中還剩下3個有效數(shù)據(jù),而卻有5個運算群請求數(shù)據(jù),那么就有兩個運算群中的ccend被置為false。
√ccflush1位標(biāo)示位,只有在條件輸出流的時候有效。在清空輸出流時,對末尾不滿n(運算群數(shù)目)的情況,用于控制當(dāng)前運算群填充有效數(shù)據(jù)還是NULL值。如果ccflush為true則填充的是有效數(shù)據(jù),如果是false則填充的是NULL值。
ccflush在條件輸出流的末尾,由程序員指定更新或者固定更新,更新的過程是首先讀取條件流狀態(tài),根據(jù)條件流狀態(tài)更新ccflush,在更新ccflush的同時還要更新ready_bit狀態(tài)位,供最后一次輸出使用。
3.數(shù)據(jù)緩沖模塊(SP)運算群內(nèi)部,SP作為一個可動態(tài)尋址的存儲器使用。它可以從JB獲得輸入以處理條件讀寫。SP為一讀一寫雙端口寄存器文件??梢灾С謱懘┩?。SP支持基變址尋址方式,其中偏移地址由指令指定,基地址由LRF給出。
條件流在輸入輸出的時候都經(jīng)過SP緩存,條件輸入指令從SP獲得數(shù)據(jù),條件輸出指令將數(shù)據(jù)輸出到SP。條件操作將從SP獲得的有效數(shù)據(jù)廣播到由條件選擇碼指定的運算群。條件輸出操作將由條件碼指定的運算群的有效輸出數(shù)據(jù)輸出到SP。條件輸入好比是一個解包過程,條件輸出好比是一個打包過程。
條件執(zhí)行部件從外部存儲器送到SP的數(shù)據(jù)或者SP要發(fā)送到外部存儲器的數(shù)據(jù)都要通過輸入輸出單元進(jìn)行鎖存。輸入輸出單元負(fù)責(zé)從流緩沖(SB)中獲得流數(shù)據(jù)以及將運算群的結(jié)果送回SB。
4.通信模塊每個運算群中的通信部件(COMM)與群間總線相連,負(fù)責(zé)不同運算群之間的數(shù)據(jù)通信。每個運算群的JB部件和條件碼總線相連,每個運算群的JB部件為條件碼總線提供一位條件碼,供其它運算群使用。n個運算群合起來使條件碼總線共有n位條件碼。
COMM單元控制運算群處理條件流的接口。輸入來自permutation寄存器、數(shù)據(jù)寄存器和運算群間總線。
在kernel不能完全數(shù)據(jù)并行的時候,COMM單元用來在運算群之間進(jìn)行數(shù)據(jù)交換。COMM用多個數(shù)據(jù)bus實現(xiàn),接收來自運算群和微控制器的數(shù)據(jù)并進(jìn)行廣播。每個COMM包含一個多選一開關(guān),選擇一路bus輸入。
5.局部寄存器文件(LRF)條件執(zhí)行機(jī)制的各功能部件都具有各自的本地寄存器文件(LRF)。在運算群內(nèi)部,LRF的輸入數(shù)據(jù)與功能部件的輸出通過交叉開關(guān)與運算群內(nèi)部互聯(lián)總線連接。功能部件的運算結(jié)果送到內(nèi)部互聯(lián)總線,然后通過該總線送到指定的內(nèi)部寄存器文件中。
JB部件是整個條件執(zhí)行機(jī)制的核心,每次條件處理時負(fù)責(zé)更新條件狀態(tài),并將條件狀態(tài)存儲到JBRF。從JBRF讀出的條件狀態(tài)同時供SP、VAL和JB三個部件使用,SP從JBRF讀取的狀態(tài)包括read_wrap_bit和write_wrap_bit。VAL從JBRF讀取的狀態(tài)包括new_data、my_cc、ready_bit和start_cs。JB從JBRF讀取所有的條件狀態(tài)信息,同時,JB部件也負(fù)責(zé)為COM部件產(chǎn)生通信序列,每次條件流狀態(tài)更新時,JB讀取各個運算群的條件碼,并根據(jù)條件碼計算本運算群的置換序列。CCRF部件存儲本運算群的條件碼值,每次條件處理時將本運算群的條件碼送到條件碼總線上,并在條件處理結(jié)束時存儲VAL的更新結(jié)果。SP緩沖數(shù)據(jù)除了要讀取read_wrap_bit和write_wrap_bit,還要從運算群內(nèi)總線接收微控的讀寫偏移地址、運算單元計算出來的讀寫基地址以及要緩沖的數(shù)據(jù)。VAL部件除了從JBRF讀取的數(shù)據(jù),還要從VALRF讀取valid值,并查詢正在處理的條件流的結(jié)束信號。COM部件從群內(nèi)總線選取數(shù)據(jù)送到群間總線供其他運算群使用,并根據(jù)PERM值從群間總線上選取相應(yīng)的數(shù)據(jù)送到群內(nèi)總線上。
圖3是條件流關(guān)鍵指令的形式化描述偽碼。條件流傳輸指令COND_IN和COND_OUT需要一個就緒標(biāo)志位(ready_bit),此位保存在UC的ready_bit FIFO中,對于每一個流都有一個FIFO,因此實際有8個寬度為1的ready_bit FIFO。由于流數(shù)據(jù)可以按記錄組織,即一個記錄可以包含多個數(shù)據(jù),因此條件流數(shù)據(jù)的輸入輸出分為兩種對記錄末尾數(shù)據(jù)的輸入輸出和對非末尾數(shù)據(jù)的輸入輸出。因此COND_IN指令包含COND_IN_R和COND_IN_D兩條指令,COND_OUT指令包含COND_OUT_R和COND_OUT_D兩條指令,COND_IN_R和COND_OUT_R指令只是從ready_bit FIFO中讀取ready_bit,不會改變ready_bit FIFO的狀態(tài),而COND_IN D和COND_OUT_D指令會在讀出ready_bit的值后將其從FIFO隊列的頭移出,并且COND_IN_D還負(fù)責(zé)判斷流結(jié)束信號。COMM單元執(zhí)行的通信操作還包括其他類型的通信,功能類似。
運算群中的JB需要用到ready_bit,運算群將它存儲到JBRF中,便于以后的操作訪問。當(dāng)SP中的雙緩沖中的數(shù)據(jù)沒有準(zhǔn)備好時,為了指示是否撤銷(squash)流緩沖的訪問,微碼控制器也需要用到ready_bit。為了實現(xiàn)這種功能,還要將ready_bit存儲到與JBRF相似的ready_bit FIFO中,ready_bit FIFO位于微碼控制器中。為了簡化代碼維護(hù),將運算群結(jié)構(gòu)控制的完全一樣,8個運算群同時輸出ready_bit到ready_bit FIFO,由于8個運算群的ready_bit值是一樣的,所以微碼控制器將接收到的8個ready_bit簡單的進(jìn)行位或操作之后存入ready_bit FIFO。
運算群的CC條件碼在運算群中產(chǎn)生,并保存在專門的CCRF中,供運算群和微控(實現(xiàn)CHECK_NAY和CHECK_ALL指令)使用,因此CC碼必須對所有的運算群和微控可見,用一組群間CC碼總線實現(xiàn)。JB執(zhí)行GEN_CISTATE和GEN_COSTATE指令時從運算群的CCRF中將其讀出并將其送到群間的CC碼總線上。
GEN_CISTATE指令將產(chǎn)生的my_cc狀態(tài)存儲在JBRF,是存儲在JBRF中的條件流狀態(tài)的一部分,供稍后的GEN_CCEND指令使用。
start_cs由GEN_CISTATE和GEN_COSTATE指令產(chǎn)生,它由INIT_CISTATE和INIT_COSTATE指令初始化,是存儲在JBRF中的條件流狀態(tài)的一部分。
一個叫做PERMRF的專用寄存器文件用來驅(qū)動通信單元的輸入,該寄存器文件保存著JB產(chǎn)生的PERM,這個值通過GEN_CISTATE和GEN_COSTATE指令產(chǎn)生,在COMMCLPERM指令中當(dāng)作輸入?yún)?shù)用到。
GEN_CISTATE和GEN_COSTATE指令還將產(chǎn)生的read_wrap和write_wrap,它們也保存在JBRF中,供JB和SP使用。實際實現(xiàn)的時候是為SP單獨做了一個端口,JB在更新read_wrap和write_wrap后,寫入JBRF,SP使用的時候直接從專有端口讀取。
valid位保存在VALIDRF中,用來判斷運算群的條件輸入流是否含有有效數(shù)據(jù)。當(dāng)?shù)竭_(dá)流的最后一個數(shù)據(jù)時,該位將在SP的雙buffer中最后一批有效數(shù)據(jù)被傳輸后重新置位。
eos位標(biāo)志了微碼控制器的內(nèi)部狀態(tài),會被JB用到,因此,在傳輸條件碼的運算群CC總線旁邊還有另外一組eos信號總線,用于將eos從微碼控制器傳到JB,其數(shù)據(jù)寬度為8bit,每位可以指示一個流。
ccend位由GEN_CCEND指令產(chǎn)生,保存在CCRF中。
為了實現(xiàn)輸出流的清空(flush),必須在每個運算群中產(chǎn)生一個用于清空的條件碼,每個運算群使用它在NULL輸出值和實際有效數(shù)據(jù)之間作操作。這個1位的條件值就是ccflush,它由GEN_CCFLUSH指令產(chǎn)生,保存在CCRF中。
圖4是包含四個運算群的條件執(zhí)行部件的處理實例。如圖(a)所示的kernel程序,對一個輸入流的每個元素首先進(jìn)行Compter_1()計算,然后只對對流中的circle元素進(jìn)行computer_circle()計算。圖(b)是該程序在沒有任何條件處理機(jī)制的只含有四個運算群的流處理器上的執(zhí)行過程。在沒有任何條件處理機(jī)制的情況下,四個運算群進(jìn)行computer_circle()計算時,四個運算群的工作量產(chǎn)生了不平衡的狀況,運算群1要處理四個數(shù)據(jù)元素,而運算群0和運算群3只要處理1個數(shù)據(jù)元素,因此,由于SIMD的特性運算群0和運算群3在處理完自己的數(shù)據(jù)之后必須等待運算群1,直到運算群1計算完成,四個運算群才能同時進(jìn)行下一步的運算。在SIMD的控制機(jī)制下,由于相關(guān)控制引起的這種負(fù)載不平衡的問題在X流處理器中會導(dǎo)致資源的極大浪費,最先完成計算任務(wù)的運算群必須進(jìn)行空轉(zhuǎn)等待其他的運算群,所有的運算群都完成一個計算任務(wù)之后,才能進(jìn)行下一個計算任務(wù),并且進(jìn)入后續(xù)運算的數(shù)據(jù)在各個運算群之間仍舊存在不平衡的問題,因此負(fù)載不平衡的問題在整個kernel的運算過程中都是存在的,kernel的運算過程越多,這種負(fù)載不平衡導(dǎo)致的資源浪費的情況就越嚴(yán)重。
圖(c)是圖(a)程序在YHFT64-2條件執(zhí)行的過程。條件機(jī)制首先將引起負(fù)載不平衡的數(shù)據(jù)流中的數(shù)據(jù)進(jìn)行篩選,形成一個只包含相同數(shù)據(jù)類型的流,然后將這個數(shù)據(jù)流平均分給各個運算群進(jìn)行運算,使得各個運算群同時處理同種類型的數(shù)據(jù)元素,就不會產(chǎn)生有的運算群必須空閑以等待其它運算群完成計算,避免了負(fù)載不平衡的問題。
權(quán)利要求
1.一種并行SIMD結(jié)構(gòu)中條件數(shù)據(jù)路由方法,其特征在于條件處理時將每個運算群根據(jù)自身條件值的不同對流記錄進(jìn)行重組和篩選,使重組后的流滿足執(zhí)行某一相同的執(zhí)行條件,條件操作可以發(fā)生在進(jìn)行流數(shù)據(jù)計算之前,為條件輸入流,或發(fā)生在流數(shù)據(jù)計算之后,為條件輸出流;(1)、對于條件輸入流第一步,首先要進(jìn)行條件流狀態(tài)的初始化,初始化的過程由控制部件JB完成;第二步,每次循環(huán)處理時,要根據(jù)當(dāng)前循環(huán)的條件碼進(jìn)行條件狀態(tài)的更新;JB更新狀態(tài)時,要讀取上一次循環(huán)的條件狀態(tài)以及當(dāng)前循環(huán)的條件碼;JB部件更新完狀態(tài)位之后要將ready位發(fā)給控制器,由控制器根據(jù)ready位是否有效,如果ready位有效,控制輸入輸出單元進(jìn)行一次條件輸入操作,輸入的數(shù)據(jù)寫入數(shù)據(jù)緩沖SP中,向SP寫入數(shù)據(jù)的時候,SP根據(jù)JB發(fā)來的write_wrap位控制數(shù)據(jù)寫入到雙緩沖的哪一半;若ready為0,輸入輸出單元不進(jìn)行條件輸入操作,相應(yīng)SP的寫操作也不發(fā)生;第三步,數(shù)據(jù)緩沖部件SP根據(jù)JB發(fā)過來的read_wrap位對相應(yīng)的項進(jìn)行一次條件讀操作,并將讀出來的數(shù)據(jù)由通信部件COMM發(fā)送到群間總線上,同時COMM從群間總線上選取本地需要的數(shù)據(jù),并傳到群內(nèi)總線上;每一次條件輸入循環(huán)從更新狀態(tài)開始,至此一次條件循環(huán)完畢;(2)、對于條件輸出流第一步,首先要進(jìn)行條件流狀態(tài)的初始化,初始化的過程由控制部件JB完成,其次每次循環(huán)處理時,要根據(jù)當(dāng)前循環(huán)的條件碼進(jìn)行條件狀態(tài)的更新;第二步,每次循環(huán)處理時,要根據(jù)當(dāng)前循環(huán)的條件碼進(jìn)行條件狀態(tài)的更新;JB更新狀態(tài)時,要讀取上一次循環(huán)的條件狀態(tài)以及當(dāng)前循環(huán)的條件碼;第三步,數(shù)據(jù)緩沖部件SP將數(shù)據(jù)緩存,向SP寫入數(shù)據(jù)的時候,SP根據(jù)JB發(fā)來的write_wrap位控制數(shù)據(jù)寫入到雙緩沖的哪一半;之后,由控制器根據(jù)ready位是否有效,如果ready位有效,控制輸入輸出單元進(jìn)行一次條件輸出操作,數(shù)據(jù)首先從緩沖SP中讀出,并寫入流buffer中;若ready為0,輸入輸出單元不進(jìn)行條件輸入操作,相應(yīng)SP的寫操作也不發(fā)生。
2.根據(jù)權(quán)利要求1所述的并行SIMD結(jié)構(gòu)中條件數(shù)據(jù)路由方法,其特征在于所述JB部件用來保存和更新條件流狀態(tài),包括ready_bit、start_cs、read_wrap_bit、write_wrap _bit、stream_id、my_cc和new_data,在每次流記錄的傳輸之前都要從JBRF讀入條件流的狀態(tài)位,對其進(jìn)行更新并進(jìn)行存儲,這7個狀態(tài)要同時供UC、SP、VAL和JB四個部件同時使用,以滿足三部件協(xié)同處理條件流的要求;所述JB部件除了保存和更新條件流的狀態(tài),還根據(jù)所有運算群的條件碼以及條件流狀態(tài),計算COMM單元通信所需要的PERM值。
3.根據(jù)權(quán)利要求2所述的并行SIMD結(jié)構(gòu)中條件數(shù)據(jù)路由方法,其特征在于所述JB部件中7個狀態(tài)位的表示為(1)、ready_bit1位狀態(tài)位,供微控使用,用于標(biāo)志處理單元是否進(jìn)行有效的數(shù)據(jù)傳輸,將數(shù)據(jù)寫入外部存儲或者從外部存儲讀入數(shù)據(jù);(2)、start_cslog2n(n為處理單元的個數(shù))位指針,供SP使用,表示每次條件處理時從數(shù)據(jù)緩沖的那一項開始讀或者寫操作;(3)、read_wrap_bit1位標(biāo)志位,供SP使用,表示每次條件處理時從數(shù)據(jù)緩沖的哪個半緩沖讀取數(shù)據(jù);(4)、write_wrap_bit1位標(biāo)志位,供SP使用,表示每次條件處理時向數(shù)據(jù)緩沖的哪個半緩沖寫入數(shù)據(jù);(5)、stream_idlog2k(k為能處理的最大流的個數(shù))位標(biāo)志位,供JB和VAL部件使用,標(biāo)識本次條件處理的數(shù)據(jù)流的id號;(6)、my_cc1位標(biāo)志位,供VAL部件使用,表示本次條件處理中本處理單元的條件碼值;(7)、new_data1位標(biāo)志位,供VAL使用,表示運算群需要處理的數(shù)據(jù)是否已經(jīng)在SP中存儲,new_data為1,表示運算群需要的數(shù)據(jù)在SB中;否則,表示運算群需要的數(shù)據(jù)在SP中。
4.根據(jù)權(quán)利要求2或3所述的并行SIMD結(jié)構(gòu)中條件數(shù)據(jù)路由方法,其特征在于所述VAL部件用來追蹤流何時結(jié)束;SP部件作為一個可動態(tài)尋址的存儲器使用,從JB獲得輸入以處理條件讀寫;每個運算群中的通信部件與群間總線相連,負(fù)責(zé)不同運算群之間的數(shù)據(jù)通信,每個運算群的JB部件和條件碼總線相連,每個運算群的JB部件為條件碼總線提供一位條件碼,供其它運算群使用;條件執(zhí)行機(jī)制的各功能部件都具有各自的本地寄存器文件,在運算群內(nèi)部,LRF的輸入數(shù)據(jù)與功能部件的輸出通過交叉開關(guān)與運算群內(nèi)部互聯(lián)總線連接,功能部件的運算結(jié)果送到內(nèi)部互聯(lián)總線,然后通過該總線送到指定的內(nèi)部寄存器文件中。
全文摘要
本發(fā)明公開了一種并行SIMD結(jié)構(gòu)中條件數(shù)據(jù)路由方法,條件處理時將每個運算群根據(jù)自身條件值的不同對流記錄進(jìn)行重組和篩選,使重組后的流滿足執(zhí)行某一相同的執(zhí)行條件,條件操作可以發(fā)生在進(jìn)行流數(shù)據(jù)計算之前,為條件輸入流,或發(fā)生在流數(shù)據(jù)計算之后,為條件輸出流,對條件輸入流和條件輸出流分別控制。本發(fā)明是一種擴(kuò)展了數(shù)據(jù)并行應(yīng)用程序的范圍,使得并行微處理器能夠更有效的執(zhí)行帶控制相關(guān)應(yīng)用程序的并行SIMD結(jié)構(gòu)中條件數(shù)據(jù)路由方法。
文檔編號H04L29/02GK101035071SQ20071003474
公開日2007年9月12日 申請日期2007年4月16日 優(yōu)先權(quán)日2007年4月16日
發(fā)明者李勇, 曾獻(xiàn)君, 邢座程, 隋兵才, 張明, 穆長富, 陽柳, 馬馳遠(yuǎn), 陳海燕, 高軍, 李晉文, 衣曉飛, 倪曉強(qiáng), 唐遇星, 張承義, 楊學(xué)軍, 張民選, 蔣江 申請人:中國人民解放軍國防科學(xué)技術(shù)大學(xué)