專利名稱:一種應(yīng)用于粗粒度可重構(gòu)陣列的配置方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式可重構(gòu)設(shè)計(jì)領(lǐng)域,具體涉及一種為粗粒度可重構(gòu)計(jì)算陣列提出的配置方法。
背景技術(shù):
可重構(gòu)計(jì)算是目前高性能并行計(jì)算領(lǐng)域的一個(gè)研究熱點(diǎn),它能夠在性能、功耗及靈活性三個(gè)方面取得一個(gè)很好的權(quán)衡,粗粒度可重構(gòu)計(jì)算陣列是可重構(gòu)系統(tǒng)的運(yùn)算部件, 擁有海量的計(jì)算資源和充足的路由資源,通過(guò)對(duì)其運(yùn)算單元的功能和路由進(jìn)行合理配置, 可以充分的發(fā)掘計(jì)算的并行性。相對(duì)于通用處理器來(lái)說(shuō),可重構(gòu)計(jì)算陣列的運(yùn)算效率有了極大的提高,因而特別適合計(jì)算密集型和數(shù)據(jù)密集型的應(yīng)用,尤其是圖形和視頻解碼應(yīng)用。根據(jù)重構(gòu)方式的不同,可重構(gòu)系統(tǒng)可以分為靜態(tài)可重構(gòu)系統(tǒng)和動(dòng)態(tài)可重構(gòu)系統(tǒng)。 靜態(tài)可重構(gòu)系統(tǒng)是指可重構(gòu)部分的邏輯功能靜態(tài)重載。相對(duì)于靜態(tài)可重構(gòu)系統(tǒng),動(dòng)態(tài)可重構(gòu)系統(tǒng)能夠在系統(tǒng)運(yùn)行時(shí)改變其配置,從而減少了配置重構(gòu)的開(kāi)銷,提高了系統(tǒng)運(yùn)行的效率。但由于陣列規(guī)模的不斷擴(kuò)大和配置文件的不斷增加,在可重構(gòu)系統(tǒng)處理視頻編解碼等高性能并行計(jì)算的應(yīng)用過(guò)程中,配置切換的開(kāi)銷往往是制約其性能提高的瓶頸,并且這一開(kāi)銷在可重構(gòu)多媒體系統(tǒng)的功耗開(kāi)銷中占主要地位。進(jìn)一步的縮短配置切換的時(shí)間并減少配置頻繁切換所帶來(lái)的功耗開(kāi)銷對(duì)粗粒度可重構(gòu)陣列的配置設(shè)計(jì)及重構(gòu)方法提出了更高的要求。然而,配置切換的時(shí)間與配置的定義方案緊密相關(guān),好的配置定義方案有利于減少配置切換時(shí)的信息量,進(jìn)而能夠減少配置切換所帶來(lái)的時(shí)間和功耗開(kāi)銷。目前在粗粒度可重構(gòu)系統(tǒng)研究領(lǐng)域,常見(jiàn)的配置定義方案是每一條配置對(duì)應(yīng)一個(gè)RC ( Reconfigurable Cell,可重構(gòu)單元)。這種配置定義的方式意味著配置切換的對(duì)象是每一個(gè)RC,而每一條配置所包括的內(nèi)容及格式上的定義又都是一致的,因此在重新配置的過(guò)程中配置和配置之間存在很多的重復(fù)信息。然而,在粗粒度可重構(gòu)陣列進(jìn)行配置映射的過(guò)程中,配置切換時(shí)通常是多個(gè)RC同時(shí)進(jìn)行配置的切換,而很少針對(duì)單個(gè)RC進(jìn)行配置切換,因而,RC間的重復(fù)配置信息可以通過(guò)設(shè)計(jì)配置定義方案及相應(yīng)的配置切換方法來(lái)壓縮和減少。綜上可知,一種新的配置設(shè)計(jì)的方案顯得很有必要,它不是以RC為配置對(duì)象,而是以一條由多個(gè)數(shù)據(jù)相互依賴的RC組成的數(shù)據(jù)鏈路為配置對(duì)象,重構(gòu)的對(duì)象是數(shù)據(jù)鏈路而不是RC,相對(duì)于傳統(tǒng)以 RC為配置對(duì)象的配置設(shè)計(jì)方法,它利用了多個(gè)RC之間存在的配置大量重復(fù)并以及配置切換通常是多個(gè)RC同時(shí)進(jìn)行切換的特點(diǎn),而這些特點(diǎn)意味著較大的配置壓縮空間,因而在對(duì)配置信息進(jìn)行合理的格式定義后,可以有效減少配置切換的配置信息量,降低配置切換的時(shí)間開(kāi)銷。
發(fā)明內(nèi)容
技術(shù)問(wèn)題本發(fā)明提供一種可以壓縮配置信息量、降低配置切換過(guò)程中的功耗開(kāi)銷、減少配置切換時(shí)間的應(yīng)用于粗粒度可重構(gòu)陣列的配置方法。技術(shù)方案本發(fā)明的一種應(yīng)用于粗粒度可重構(gòu)陣列的配置方法,在以數(shù)據(jù)鏈路為基本描述對(duì)象的配置定義基礎(chǔ)上,首先對(duì)粗粒度可重構(gòu)陣列上執(zhí)行的程序所對(duì)應(yīng)的每條配置進(jìn)行配置生成,所述的程序是采用C源代碼進(jìn)行描述的應(yīng)用對(duì)象,然后根據(jù)所述程序的C源代碼的執(zhí)行順序?qū)λ信渲脤?duì)應(yīng)的數(shù)據(jù)鏈路進(jìn)行配置映射;
所述的配置定義為編譯器讀取程序的C源代碼后經(jīng)過(guò)編譯生成多條配置,一條配置對(duì)應(yīng)一條數(shù)據(jù)鏈路,該數(shù)據(jù)鏈路的定義為每一條數(shù)據(jù)鏈路由多個(gè)存在數(shù)據(jù)依賴關(guān)系的節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)可重構(gòu)單元RC,且每一條數(shù)據(jù)鏈路都能夠一次性映射于粗粒度可重構(gòu)陣列CGRA之上;所述的數(shù)據(jù)依賴關(guān)系是指數(shù)據(jù)鏈路中除第一個(gè)節(jié)點(diǎn)以外的每一個(gè)節(jié)點(diǎn)的輸入都依賴于前一個(gè)節(jié)點(diǎn)的輸出,第一個(gè)節(jié)點(diǎn)的輸入來(lái)自于全局存儲(chǔ)資源;所述的能夠一次性映射于粗粒度可重構(gòu)陣列CGRA之上是指數(shù)據(jù)鏈路中所包括的節(jié)點(diǎn)的個(gè)數(shù)不多于粗粒度可重構(gòu)陣列CGRA實(shí)際所擁有的可重構(gòu)單元RC的數(shù)量;
并且,一條配置由一條路由及功能配置和一條或多條數(shù)據(jù)配置組成,多條數(shù)據(jù)配置共用一條路由及功能配置,即配置的切換過(guò)程中只切換新的數(shù)據(jù)配置,而保留原來(lái)己加載的路由及功能配置的內(nèi)容不變;
所述的配置生成包括以下步驟
步驟1,將所述程序的c源代碼輸入編譯器前端,生成數(shù)據(jù)流圖Dre ; 步驟2,將數(shù)據(jù)流圖Dre輸入編譯器后端,編譯器后端基于硬件資源的約束,將輸入的每一張數(shù)據(jù)流圖Dre切割為多張數(shù)據(jù)流圖Dre子圖,這些數(shù)據(jù)流圖Dre子圖都能夠一次性映射到粗粒度可重構(gòu)陣列CGRA之上;所述的基于硬件資源的約束包括可重構(gòu)單元RC的個(gè)數(shù),局部存儲(chǔ)資源的大小,全局存儲(chǔ)資源的大?。?br>
步驟3,編譯器后端按照配置定義中所述的數(shù)據(jù)鏈路定義,將每一張數(shù)據(jù)流圖Dre子圖切分為多條數(shù)據(jù)鏈路;
步驟4,編譯器后端將每一條數(shù)據(jù)鏈路分割為兩部分,即一部分對(duì)應(yīng)一條路由及功能配置,另一部分對(duì)應(yīng)一條數(shù)據(jù)配置,路由及功能配置和數(shù)據(jù)配置的內(nèi)容如配置定義中所述;編譯器后端根據(jù)路由及功能配置和數(shù)據(jù)配置的內(nèi)容,按照所述對(duì)應(yīng)關(guān)系對(duì)數(shù)據(jù)鏈路分割而成的兩部分分別進(jìn)行配置編碼,從而生成配置的二進(jìn)制碼;
所述的配置映射要求在粗粒度可重構(gòu)陣列CGRA上采用一塊片上存儲(chǔ)器來(lái)存放數(shù)據(jù)配置,即數(shù)據(jù)配置存儲(chǔ)器,一塊片上存儲(chǔ)器來(lái)存放路由及功能配置,即路由及功能配置存儲(chǔ)器;配置映射具體包括以下步驟
1)當(dāng)可重構(gòu)處理單元RPU開(kāi)始啟動(dòng)時(shí),由配置總線接口初始化路由及功能配置存儲(chǔ)器和數(shù)據(jù)配置存儲(chǔ)器;
2)粗粒度可重構(gòu)陣列CGRA從路由及功能配置存儲(chǔ)器中讀出一條新的路由及功能配置并將該配置加載到多個(gè)可重構(gòu)單元RC上;
3)粗粒度可重構(gòu)陣列CGRA從數(shù)據(jù)配置存儲(chǔ)器中讀出一條新的數(shù)據(jù)配置并將該配置加載到上一步驟中剛加載了路由及功能配置的可重構(gòu)單元RC上;
4)粗粒度可重構(gòu)陣列CGRA基于加載的配置進(jìn)行計(jì)算,當(dāng)計(jì)算開(kāi)始后即進(jìn)入步驟5);
5)當(dāng)粗粒度可重構(gòu)陣列CGRA檢測(cè)到在所有己加載配置的可重構(gòu)單元RC中,有一條數(shù)據(jù)鏈路的最后一個(gè)節(jié)點(diǎn)所對(duì)應(yīng)的可重構(gòu)單元RC完成計(jì)算時(shí),則判斷有一個(gè)配置完成計(jì)算, 并進(jìn)入下一步,同時(shí)粗粒度可重構(gòu)陣列CGRA記錄當(dāng)前檢測(cè)到的己完成計(jì)算的配置的地址信息;否則粗粒度可重構(gòu)陣列CGRA等待一個(gè)系統(tǒng)時(shí)鐘周期結(jié)束后,進(jìn)入步驟7);
6)如果己完成計(jì)算的配置中,己加載過(guò)的數(shù)據(jù)配置的個(gè)數(shù)小于該配置的數(shù)據(jù)配置個(gè)數(shù),則粗粒度可重構(gòu)陣列CGRA判斷需要切換新的一條數(shù)據(jù)配置,并回到步驟3),否則進(jìn)入到步驟7);
7)如果己完成加載的配置的個(gè)數(shù)小于粗粒度可重構(gòu)陣列上執(zhí)行的程序所對(duì)應(yīng)的配置的個(gè)數(shù),則粗粒度可重構(gòu)陣列CGRA判斷需要切換新的一條路由及功能配置,并進(jìn)入步驟 8),否則進(jìn)入到步驟9);
8)如果尚未加載新配置且己完成上一條己加載配置的運(yùn)算的可重構(gòu)單元RC的個(gè)數(shù)大于或等于下一條將要加載的配置所對(duì)應(yīng)的可重構(gòu)單元RC的個(gè)數(shù),則粗粒度可重構(gòu)陣列 CGRA判定可以切換新的一條路由及功能配置,并回到步驟2),否則回到步驟5);
9)配置映射結(jié)束,粗粒度可重構(gòu)陣列CGRA輸出計(jì)算結(jié)果。本發(fā)明中,所述的配置定義中,每一條所述路由及功能配置包括以下內(nèi)容 計(jì)算資源的個(gè)數(shù),即該條配置所需要的可重構(gòu)單元RC個(gè)數(shù);
對(duì)操作數(shù)的本地資源描述,即操作數(shù)來(lái)自或?qū)懭肽囊粋€(gè)可重構(gòu)單元RC,或者操作數(shù)來(lái)自或?qū)懭胗谀囊粋€(gè)局部存儲(chǔ)資源;
對(duì)條件輸入位的描述,即條件輸入位來(lái)自于哪一個(gè)可重構(gòu)單元RC,或者條件輸入位來(lái)自于哪一個(gè)局部存儲(chǔ)資源;
對(duì)操作碼的描述,即可重構(gòu)單元RC具體要作哪一種運(yùn)算;
每一條所述數(shù)據(jù)配置包括對(duì)操作數(shù)的全局資源描述,即操作數(shù)來(lái)自或?qū)懭肽囊粋€(gè)全局存儲(chǔ)資源。本發(fā)明的配置定義方案中,粗粒度可重構(gòu)陣列上執(zhí)行的程序?qū)?yīng)多條配置,每條配置對(duì)應(yīng)一條數(shù)據(jù)鏈路,數(shù)據(jù)鏈路由多個(gè)存在數(shù)據(jù)依賴關(guān)系的RC (Reconfigurable Cell, 可重構(gòu)單元)組成。此外,一條描述數(shù)據(jù)鏈路的配置由一條路由及功能配置和一條或多條數(shù)據(jù)配置組成,多條數(shù)據(jù)配置共用一條路由及功能配置信息,一條配置的切換包括一次路由及功能配置的切換后一次或多次數(shù)據(jù)配置的切換。該配置方法實(shí)現(xiàn)的平臺(tái)是粗粒度可重構(gòu)系統(tǒng)架構(gòu)模板RESarch (Reconfigurable System Architecture).該模板具有傳統(tǒng)粗粒度可重構(gòu)系統(tǒng)的基本特點(diǎn),即架構(gòu)由主控核加粗粒度可重構(gòu)陣列組成。RE&irch 包括可剪裁的若干個(gè) RPU (ReconfigurabIe Processing Unit,可重構(gòu)處理單元)。每個(gè) RPU 包括四個(gè)部分,分別為 CGRA(Coarse-Grained Reconfigurable Array, 粗粒度可重構(gòu)陣列),DFC (Data Flow Controller,數(shù)據(jù)流控制單元),CFC (Context Flow Controller,控制流處理單元),和SCN (System Connect Matrix,系統(tǒng)互連矩陣),一塊路由及功能配置片上存儲(chǔ)器,一塊數(shù)據(jù)配置片上存儲(chǔ)器;。每個(gè)CGRA陣列內(nèi)包括多個(gè)RC (Reconfigurable Cell,可重構(gòu)單元),RC間通過(guò)陣列內(nèi)路由資源實(shí)現(xiàn)互連。此外,RESarch 還包括一個(gè)CPU (Central Processing Unit,中央處理器單元)來(lái)作為主控核。CGRA是一個(gè)動(dòng)態(tài)可重構(gòu)的硬件運(yùn)算單元陣列,它具有近似ASICXApplication Specific Integrated Circuit,專用集成電路)的性能,對(duì)于各種數(shù)據(jù)密集型的算法方便配置重構(gòu)。對(duì)比ASIC,它大大拓寬了應(yīng)用,減小了硬件面積開(kāi)銷。傳統(tǒng)的粗粒度可重構(gòu)陣列配置設(shè)計(jì)格式是每一條配置描述一個(gè)RC (Reconfigurable Cell,可重構(gòu)單元),并且每一條配置的格式基本一致。然而系統(tǒng)重構(gòu)的過(guò)程中往往是針對(duì)多個(gè)RC或整個(gè)陣列來(lái)統(tǒng)一切換和加載配置,而多個(gè)RC之間的配置信息存在大量重復(fù),因而,這意味著通過(guò)重新設(shè)計(jì)配置定義方案可以有效利用重復(fù)配置。此外,根據(jù)二進(jìn)制編碼的原理,針對(duì)一條包括多個(gè)RC的數(shù)據(jù)鏈路進(jìn)行配置和編碼,其編碼效率遠(yuǎn)高于針對(duì)一個(gè)RC來(lái)進(jìn)行配置編碼,也就是說(shuō)前一方法編碼后的配置信息量要遠(yuǎn)小于后者。因此,本文提出了一種新的配置設(shè)計(jì)方案,該方案重構(gòu)的對(duì)象是數(shù)據(jù)鏈路而不是 RC,數(shù)據(jù)鏈路由一系列存在數(shù)據(jù)間依賴關(guān)系的RC組成,它是配置定義的基本單元。此外,在傳統(tǒng)粗粒度可重構(gòu)陣列中,根據(jù)所配置硬件資源的不同,相應(yīng)的配置信息主要可分為兩類一類為路由及功能配置,即該信息主要用于配置陣列中的RC的計(jì)算功能,RC之間的互連,及RC與局部存儲(chǔ)資源之間的互連;一類為數(shù)據(jù)配置,即該信息主要用于配置陣列中RC的全局操作數(shù)。在許多算法映射的過(guò)程中,往往存在第一類配置信息多次重復(fù)使用的特點(diǎn),比如在循環(huán)算法映射過(guò)程中,重復(fù)利用路由及功能配置并只切換數(shù)據(jù)配置則可以大大減少配置切換的信息量和時(shí)間開(kāi)銷。相應(yīng)的,本發(fā)明將一條描述數(shù)據(jù)鏈路的配置分離為兩部分路由及功能配置,數(shù)據(jù)配置,如圖2所示。本發(fā)明中,RC意為可重構(gòu)單元(Reconfigurable Cell),CGRA意為粗粒度可重構(gòu)陣列(Coarse-Grained Reconfigurable Array),DFG 意為數(shù)據(jù)流圖(Data Flow Graph), RPU 意為可重構(gòu)處理單元(Reconfigurable Processing Unit)。有益效果本文明的配置定義方案不是以RC為配置對(duì)象,而是以一條由多個(gè)數(shù)據(jù)相互依賴的RC組成的數(shù)據(jù)鏈路為配置對(duì)象。傳統(tǒng)的配置定義方案所配置的對(duì)象是每一個(gè) RC,而每一條配置所包括的內(nèi)容及定義又都是一致的,因此在重新配置的過(guò)程中配置和配置之間存在很多的重復(fù)信息。然而,在粗粒度可重構(gòu)陣列進(jìn)行配置映射的過(guò)程中,配置切換時(shí)又通常是多個(gè)RC同時(shí)進(jìn)行配置的切換,而很少針對(duì)單個(gè)RC進(jìn)行配置切換。因而,本方法利用多個(gè)RC之間存在的配置大量重復(fù)并以及配置切換通常是多個(gè)RC同時(shí)進(jìn)行切換的特點(diǎn),對(duì)配置信息進(jìn)行了進(jìn)一步的壓縮處理,即將不同的RC配置間存在信息重復(fù)的部分進(jìn)行統(tǒng)一編碼。假定對(duì)一個(gè)RC的配置進(jìn)行單獨(dú)二進(jìn)制編碼的信息量為2X,則配置位長(zhǎng)為X,那么對(duì)2"個(gè)RC的配置分別進(jìn)行單獨(dú)二進(jìn)制編碼的信息量為2x+n,配置信息的總位長(zhǎng)為抖2", 然而,若是對(duì)這2"個(gè)RC的配置進(jìn)行統(tǒng)一二進(jìn)制編碼,那么若需編碼的信息量仍為2x+n,則配置信息的總位長(zhǎng)只需要大于或等于x+n。相比較而言,前一種方案的配置信息的總位長(zhǎng)為 x*2n,后一種方案的配置信息的總位長(zhǎng)則為x+n,而配置信息的位長(zhǎng)決定了配置信息所占存儲(chǔ)空間的大小,因此,前一種方案中配置所占存儲(chǔ)空間隨著RC的個(gè)數(shù)呈指數(shù)級(jí)增長(zhǎng),而后一種方案中配置所占存儲(chǔ)空間隨著RC的個(gè)數(shù)呈線性增長(zhǎng),前后比較發(fā)現(xiàn)配置所占存儲(chǔ)空間有了巨大的壓縮。所以,綜上可知,本配置定義方案能夠有效減少配置所占存儲(chǔ)空間的大小,降低了配置切換的時(shí)間開(kāi)銷,并且數(shù)據(jù)鏈路中所包括的RC數(shù)目越多,配置信息的壓縮量也就越大。此外,為進(jìn)一步重復(fù)利用配置,本方案基于循環(huán)算法中一次迭代多次運(yùn)算的特點(diǎn), 將一條配置分離為一條路由及功能配置和一條或多條數(shù)據(jù)配置兩部分,這樣在進(jìn)行多次迭代計(jì)算的過(guò)程中,多條數(shù)據(jù)配置可以共用一條路由及功能配置,即配置的切換過(guò)程中可以只切換新的數(shù)據(jù)配置,而保留原來(lái)己加載的路由及功能配置的內(nèi)容不變,這樣配置切換時(shí)所需更新的信息量就只包括了數(shù)據(jù)配置的部分,這時(shí)CGRA也就只需要通過(guò)訪問(wèn)數(shù)據(jù)配置存儲(chǔ)器來(lái)更新數(shù)據(jù)配置,而不需要訪問(wèn)路由及功能配置存儲(chǔ)器。然而,配置切換時(shí)的信息量決定了配置切換所需要的時(shí)間,即決定了 CGRA訪問(wèn)配置存儲(chǔ)器的時(shí)間。并且,在CGRA的功耗開(kāi)銷中,對(duì)配置存儲(chǔ)器的訪問(wèn)所帶來(lái)的功耗開(kāi)銷占主要地位。因此,通過(guò)以上這一方案, 就能夠較大減少配置切換時(shí)的信息量,減少對(duì)路由及功能配置存儲(chǔ)器的訪問(wèn)次數(shù),進(jìn)而降低配置切換所帶來(lái)的時(shí)間和功耗開(kāi)銷。
圖1是本發(fā)明所述的數(shù)據(jù)鏈路結(jié)構(gòu)示意圖2是本發(fā)明所述的數(shù)據(jù)鏈路的配置信息組成的示意圖;圖中,A為路由及功能配置, 它包括RC間互連配置,RC對(duì)局部存儲(chǔ)資源的讀寫配置,RC的功能配置;B0、B1、…&ι分別為數(shù)據(jù)配置,一條數(shù)據(jù)配置的信息包括RC對(duì)全局存儲(chǔ)資源讀寫的全部?jī)?nèi)容; 圖3是本發(fā)明粗粒度可重構(gòu)陣列配置方法的總流程圖; 圖4是本發(fā)明粗粒度可重構(gòu)陣列配置方法的配置生成流程圖; 圖5是本發(fā)明粗粒度可重構(gòu)陣列配置方法的配置映射流程圖。
具體實(shí)施例方式本發(fā)明的一種應(yīng)用于粗粒度可重構(gòu)陣列的配置方法,在以數(shù)據(jù)鏈路為基本描述對(duì)象的配置定義基礎(chǔ)上,首先對(duì)粗粒度可重構(gòu)陣列上執(zhí)行的程序所對(duì)應(yīng)的每條配置進(jìn)行配置生成,所述的程序是采用C源代碼進(jìn)行描述的應(yīng)用對(duì)象,然后根據(jù)所述程序的C源代碼的執(zhí)行順序?qū)λ信渲脤?duì)應(yīng)的數(shù)據(jù)鏈路進(jìn)行配置映射;
所述的配置定義為編譯器讀取程序的C源代碼后經(jīng)過(guò)編譯生成多條配置,一條配置對(duì)應(yīng)一條數(shù)據(jù)鏈路,該數(shù)據(jù)鏈路的定義為每一條數(shù)據(jù)鏈路由多個(gè)存在數(shù)據(jù)依賴關(guān)系的節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)可重構(gòu)單元RC,且每一條數(shù)據(jù)鏈路都能夠一次性映射于粗粒度可重構(gòu)陣列CGRA之上;所述的數(shù)據(jù)依賴關(guān)系是指數(shù)據(jù)鏈路中除第一個(gè)節(jié)點(diǎn)以外的每一個(gè)節(jié)點(diǎn)的輸入都依賴于前一個(gè)節(jié)點(diǎn)的輸出,第一個(gè)節(jié)點(diǎn)的輸入來(lái)自于全局存儲(chǔ)資源;所述的能夠一次性映射于粗粒度可重構(gòu)陣列CGRA之上是指數(shù)據(jù)鏈路中所包括的節(jié)點(diǎn)的個(gè)數(shù)不多于粗粒度可重構(gòu)陣列CGRA實(shí)際所擁有的可重構(gòu)單元RC的數(shù)量;
并且,一條配置由一條路由及功能配置和一條或多條數(shù)據(jù)配置組成,多條數(shù)據(jù)配置共用一條路由及功能配置,即配置的切換過(guò)程中只切換新的數(shù)據(jù)配置,而保留原來(lái)己加載的路由及功能配置的內(nèi)容不變;
所述的配置生成包括以下步驟
步驟1,將所述程序的c源代碼輸入編譯器前端,生成數(shù)據(jù)流圖Dre ; 步驟2,將數(shù)據(jù)流圖Dre輸入編譯器后端,編譯器后端基于硬件資源的約束,將輸入的每一張數(shù)據(jù)流圖Dre切割為多張數(shù)據(jù)流圖Dre子圖,這些數(shù)據(jù)流圖Dre子圖都能夠一次性映射到粗粒度可重構(gòu)陣列CGRA之上;所述的基于硬件資源的約束包括可重構(gòu)單元RC的個(gè)數(shù),局部存儲(chǔ)資源的大小,全局存儲(chǔ)資源的大??;
步驟3,編譯器后端按照配置定義中所述的數(shù)據(jù)鏈路定義,將每一張數(shù)據(jù)流圖Dre子圖切分為多條數(shù)據(jù)鏈路;步驟4,編譯器后端將每一條數(shù)據(jù)鏈路分割為兩部分,即一部分對(duì)應(yīng)一條路由及功能配置,另一部分對(duì)應(yīng)一條數(shù)據(jù)配置,路由及功能配置和數(shù)據(jù)配置的內(nèi)容如配置定義中所述;編譯器后端根據(jù)路由及功能配置和數(shù)據(jù)配置的內(nèi)容,按照所述對(duì)應(yīng)關(guān)系對(duì)數(shù)據(jù)鏈路分割而成的兩部分分別進(jìn)行配置編碼,從而生成配置的二進(jìn)制碼;
所述的配置映射要求在粗粒度可重構(gòu)陣列CGRA上采用一塊片上存儲(chǔ)器來(lái)存放數(shù)據(jù)配置,即數(shù)據(jù)配置存儲(chǔ)器,一塊片上存儲(chǔ)器來(lái)存放路由及功能配置,即路由及功能配置存儲(chǔ)器;配置映射具體包括以下步驟
1)當(dāng)可重構(gòu)處理單元RPU開(kāi)始啟動(dòng)時(shí),由配置總線接口初始化路由及功能配置存儲(chǔ)器和數(shù)據(jù)配置存儲(chǔ)器;
2)粗粒度可重構(gòu)陣列CGRA從路由及功能配置存儲(chǔ)器中讀出一條新的路由及功能配置并將該配置加載到多個(gè)可重構(gòu)單元RC上;
3)粗粒度可重構(gòu)陣列CGRA從數(shù)據(jù)配置存儲(chǔ)器中讀出一條新的數(shù)據(jù)配置并將該配置加載到上一步驟中剛加載了路由及功能配置的可重構(gòu)單元RC上;
4)粗粒度可重構(gòu)陣列CGRA基于加載的配置進(jìn)行計(jì)算,當(dāng)計(jì)算開(kāi)始后即進(jìn)入步驟5);
5)當(dāng)粗粒度可重構(gòu)陣列CGRA檢測(cè)到在所有己加載配置的可重構(gòu)單元RC中,有一條數(shù)據(jù)鏈路的最后一個(gè)節(jié)點(diǎn)所對(duì)應(yīng)的可重構(gòu)單元RC完成計(jì)算時(shí),則判斷有一個(gè)配置完成計(jì)算, 并進(jìn)入下一步,同時(shí)粗粒度可重構(gòu)陣列CGRA記錄當(dāng)前檢測(cè)到的己完成計(jì)算的配置的地址信息;否則粗粒度可重構(gòu)陣列CGRA等待一個(gè)系統(tǒng)時(shí)鐘周期結(jié)束后,進(jìn)入步驟7);
6)如果己完成計(jì)算的配置中,己加載過(guò)的數(shù)據(jù)配置的個(gè)數(shù)小于該配置的數(shù)據(jù)配置個(gè)數(shù),則粗粒度可重構(gòu)陣列CGRA判斷需要切換新的一條數(shù)據(jù)配置,并回到步驟3),否則進(jìn)入到步驟7);
7)如果己完成加載的配置的個(gè)數(shù)小于粗粒度可重構(gòu)陣列上執(zhí)行的程序所對(duì)應(yīng)的配置的個(gè)數(shù),則粗粒度可重構(gòu)陣列CGRA判斷需要切換新的一條路由及功能配置,并進(jìn)入步驟 8),否則進(jìn)入到步驟9);
8)如果尚未加載新配置且己完成上一條己加載配置的運(yùn)算的可重構(gòu)單元RC的個(gè)數(shù)大于或等于下一條將要加載的配置所對(duì)應(yīng)的可重構(gòu)單元RC的個(gè)數(shù),則粗粒度可重構(gòu)陣列 CGRA判定可以切換新的一條路由及功能配置,并回到步驟2),否則回到步驟5);
9)配置映射結(jié)束,粗粒度可重構(gòu)陣列CGRA輸出計(jì)算結(jié)果。本發(fā)明中,所述的配置定義中,每一條所述路由及功能配置包括以下內(nèi)容 計(jì)算資源的個(gè)數(shù),即該條配置所需要的可重構(gòu)單元RC個(gè)數(shù);
對(duì)操作數(shù)的本地資源描述,即操作數(shù)來(lái)自或?qū)懭肽囊粋€(gè)可重構(gòu)單元RC,或者操作數(shù)來(lái)自或?qū)懭胗谀囊粋€(gè)局部存儲(chǔ)資源;
對(duì)條件輸入位的描述,即條件輸入位來(lái)自于哪一個(gè)可重構(gòu)單元RC,或者條件輸入位來(lái)自于哪一個(gè)局部存儲(chǔ)資源;
對(duì)操作碼的描述,即可重構(gòu)單元RC具體要作哪一種運(yùn)算;
每一條所述數(shù)據(jù)配置包括對(duì)操作數(shù)的全局資源描述,即操作數(shù)來(lái)自或?qū)懭肽囊粋€(gè)全局存儲(chǔ)資源。下面對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。本發(fā)明的配置定義中,路由及功能配置主要負(fù)責(zé)RC與RC之間的路由配置,RC與局部存儲(chǔ)資源之間的路由配置,以及RC的功能配置。數(shù)據(jù)配置主要負(fù)責(zé)全局?jǐn)?shù)據(jù)的搬運(yùn)。本發(fā)明的配置生成中,如圖4所示,編譯器讀取粗粒度可重構(gòu)陣列上執(zhí)行的程序的C源代碼后,經(jīng)過(guò)一系列編譯過(guò)程生成多條配置,一條配置對(duì)應(yīng)一條數(shù)據(jù)鏈路?;谝陨纤龅膶?duì)數(shù)據(jù)鏈路的定義、路由及功能配置的內(nèi)容、數(shù)據(jù)配置的內(nèi)容,配置生成包括以下步驟
步驟1,將粗粒度可重構(gòu)陣列上執(zhí)行的程序的C源代碼輸入編譯器前端,生成Dre ;編譯器前端首先需要基于己有的編譯技術(shù)生成抽象語(yǔ)法樹(shù),這些編譯技術(shù)包括詞法分析技術(shù)、 語(yǔ)法分析技術(shù),然后基于抽象語(yǔ)法樹(shù)生成Dre,DFG的內(nèi)容與結(jié)構(gòu)和傳統(tǒng)編譯技術(shù)中的Dre 是一致的;
步驟2,將Dre輸入編譯器后端,編譯器后端基于硬件資源的約束,將輸入的每一張Dre 切割為多張Dre子圖,這些Dre子圖都能夠一次性映射到粗粒度可重構(gòu)陣列之上;所述的基于硬件資源的約束包括Rc的個(gè)數(shù),局部存儲(chǔ)資源的大小,全局存儲(chǔ)資源的大??;所生成的 DFG子圖的內(nèi)容與結(jié)構(gòu)和Dre的內(nèi)容與結(jié)構(gòu)是一致的;
步驟3,編譯器后端按照配置定義中所述的數(shù)據(jù)鏈路定義,將每一張Dre子圖切分為多條數(shù)據(jù)鏈路;這些數(shù)據(jù)鏈路的內(nèi)容與結(jié)構(gòu)和Dre的內(nèi)容與結(jié)構(gòu)也是相一致的。具體切分的過(guò)程中,則根據(jù)以上所述的數(shù)據(jù)鏈路的定義來(lái)對(duì)Dre子圖進(jìn)行切分;
步驟4,編譯器后端將每一條數(shù)據(jù)鏈路分割為兩部分,即一部分對(duì)應(yīng)一條路由及功能配置,另一部分對(duì)應(yīng)一條數(shù)據(jù)配置,路由及功能配置和數(shù)據(jù)配置的內(nèi)容如配置定義中所述;編譯器后端根據(jù)路由及功能配置和數(shù)據(jù)配置的內(nèi)容,按照所述對(duì)應(yīng)關(guān)系對(duì)數(shù)據(jù)鏈路分割而成的兩部分分別進(jìn)行配置編碼,從而生成配置的二進(jìn)制碼;編譯器后端在處理每一條數(shù)據(jù)鏈路后最終生成了兩部分的二進(jìn)制碼;所有數(shù)據(jù)鏈路所對(duì)應(yīng)的二進(jìn)制碼最終將由RPU寫入到配置存儲(chǔ)器當(dāng)中,二進(jìn)制碼的存放順序由所對(duì)應(yīng)數(shù)據(jù)鏈路的執(zhí)行順序決定,而數(shù)據(jù)鏈路的執(zhí)行順序則與粗粒度可重構(gòu)陣列上執(zhí)行的程序的C源代碼中代碼的執(zhí)行順序相一致。本發(fā)明的配置映射如圖5所示,包括以下步驟
1)當(dāng)RPU開(kāi)始啟動(dòng)時(shí),由配置總線接口初始化配置存儲(chǔ)器。在初始化配置存儲(chǔ)器過(guò)程中,配置的二進(jìn)制碼根據(jù)程序的C源代碼執(zhí)行順序依次存放在配置存儲(chǔ)器當(dāng)中;配置存儲(chǔ)器由兩塊片上存儲(chǔ)器組成,其中一塊片上存儲(chǔ)器存放路由及功能配置,即路由及功能配置存儲(chǔ)器,另一塊片上存儲(chǔ)器則存放數(shù)據(jù)配置,即數(shù)據(jù)配置存儲(chǔ)器;
2)CGRA從路由及功能配置存儲(chǔ)器中讀出一條新的路由及功能配置并將該配置加載到多個(gè)RC之上;具體配置CGRA中的哪些RC由路由及功能配置信息決定,同時(shí)CGRA會(huì)記錄當(dāng)前所加載的路由及功能配置在路由及功能配置存儲(chǔ)器當(dāng)中的存放地址;
3)CGRA從數(shù)據(jù)配置存儲(chǔ)器中讀出一條新的數(shù)據(jù)配置并將該數(shù)據(jù)配置加載到上一步中剛加載了路由及功能配置的RC上;
4)CGRA基于加載的配置進(jìn)行計(jì)算,即CGRA中已加載配置的RC開(kāi)始進(jìn)行計(jì)算,計(jì)算開(kāi)始后即進(jìn)入第五步;
5)CGRA檢查是否有配置完成計(jì)算。CGRA檢測(cè)到在所有己加載配置的RC中,其中有一條數(shù)據(jù)鏈路的最后一個(gè)節(jié)點(diǎn)所對(duì)應(yīng)的RC計(jì)算完成時(shí),則判定在己加載的多條配置中,有配置完成計(jì)算,并進(jìn)入下一步,同時(shí)CGRA記錄當(dāng)前檢測(cè)到的己完成計(jì)算的配置的地址信息; 否則CGRA等待一個(gè)系統(tǒng)時(shí)鐘周期結(jié)束后,進(jìn)入第七步;6)CGRA判斷是否需要切換數(shù)據(jù)配置。CGRA根據(jù)第五步檢測(cè)到的己完成計(jì)算的配置中, 己加載過(guò)數(shù)據(jù)配置個(gè)數(shù)是否小于該配置所包含的數(shù)據(jù)配置個(gè)數(shù)來(lái)判斷是否需要切換新的一條數(shù)據(jù)配置,如果己完成加載的數(shù)據(jù)配置的個(gè)數(shù)小于配置中的數(shù)據(jù)配置個(gè)數(shù),則判定為需要切換,并回到第三步,反之則判定為不需要切換,并進(jìn)入到下一步;
7)CGRA判斷是否需要切換新的一條路由及功能配置。即CGRA會(huì)先根據(jù)粗粒度可重構(gòu)陣列上執(zhí)行的程序的配置個(gè)數(shù)來(lái)檢查是否還有新的路由及功能配置需要加載,如果己完成加載的配置的個(gè)數(shù)小于程序所對(duì)應(yīng)的配置的個(gè)數(shù),則判定為是,并進(jìn)入第八步,反之則判定為否,并進(jìn)入第九步;此處的己完成加載的配置,是指該配置的路由及功能配置和全部數(shù)據(jù)配置均已進(jìn)行了加載;
8)CGRA判斷是否能夠切換新的一條路由及功能配置。CGRA檢查尚未加載新配置且己完成上一條己加載配置的運(yùn)算的RC的個(gè)數(shù)是否大于或等于下一條將要加載的配置所對(duì)應(yīng)的RC的個(gè)數(shù),若是,則判斷可以切換新的一條路由及功能配置,并回到第二步,否則回到第五步;本步驟中的下一條將要加載的配置是指下一條將要加載的路由及功能配置所屬的配置,而下一條將要加載的路由及功能配置是根據(jù)程序中的執(zhí)行順序來(lái)確定的將要加載的路由及功能配置。9)配置映射結(jié)束,CGRA輸出計(jì)算結(jié)果。本發(fā)明提出的一種應(yīng)用粗粒度可重構(gòu)系統(tǒng)的配置方法雖然以RESarch為其實(shí)現(xiàn)平臺(tái),然而并非以此限定本發(fā)明的保護(hù)范圍,在不脫離本發(fā)明范圍所做的修改,均應(yīng)包含在本發(fā)明的保護(hù)范圍內(nèi)。
權(quán)利要求
1. 一種應(yīng)用于粗粒度可重構(gòu)陣列的配置方法,其特征在于,該方法在以數(shù)據(jù)鏈路為基本描述對(duì)象的配置定義基礎(chǔ)上,首先對(duì)粗粒度可重構(gòu)陣列上執(zhí)行的程序所對(duì)應(yīng)的每條配置進(jìn)行配置生成,所述的程序是采用C源代碼進(jìn)行描述的應(yīng)用對(duì)象,然后根據(jù)所述程序的C源代碼的執(zhí)行順序?qū)λ信渲脤?duì)應(yīng)的數(shù)據(jù)鏈路進(jìn)行配置映射;所述的配置定義為編譯器讀取程序的C源代碼后經(jīng)過(guò)編譯生成多條配置,一條配置對(duì)應(yīng)一條數(shù)據(jù)鏈路,該數(shù)據(jù)鏈路的定義為每一條數(shù)據(jù)鏈路由多個(gè)存在數(shù)據(jù)依賴關(guān)系的節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)可重構(gòu)單元RC,且每一條數(shù)據(jù)鏈路都能夠一次性映射于粗粒度可重構(gòu)陣列CGRA之上;所述的數(shù)據(jù)依賴關(guān)系是指數(shù)據(jù)鏈路中除第一個(gè)節(jié)點(diǎn)以外的每一個(gè)節(jié)點(diǎn)的輸入都依賴于前一個(gè)節(jié)點(diǎn)的輸出,第一個(gè)節(jié)點(diǎn)的輸入來(lái)自于全局存儲(chǔ)資源;所述的能夠一次性映射于粗粒度可重構(gòu)陣列CGRA之上是指數(shù)據(jù)鏈路中所包括的節(jié)點(diǎn)的個(gè)數(shù)不多于粗粒度可重構(gòu)陣列CGRA實(shí)際所擁有的可重構(gòu)單元RC的數(shù)量;并且,一條配置由一條路由及功能配置和一條或多條數(shù)據(jù)配置組成,多條數(shù)據(jù)配置共用一條路由及功能配置,即配置的切換過(guò)程中只切換新的數(shù)據(jù)配置,而保留原來(lái)己加載的路由及功能配置的內(nèi)容不變;所述的配置生成包括以下步驟步驟1,將所述程序的c源代碼輸入編譯器前端,生成數(shù)據(jù)流圖Dre ; 步驟2,將數(shù)據(jù)流圖Dre輸入編譯器后端,編譯器后端基于硬件資源的約束,將輸入的每一張數(shù)據(jù)流圖Dre切割為多張數(shù)據(jù)流圖Dre子圖,這些數(shù)據(jù)流圖Dre子圖都能夠一次性映射到粗粒度可重構(gòu)陣列CGRA之上;所述的基于硬件資源的約束包括可重構(gòu)單元RC的個(gè)數(shù),局部存儲(chǔ)資源的大小,全局存儲(chǔ)資源的大小;步驟3,編譯器后端按照配置定義中所述的數(shù)據(jù)鏈路定義,將每一張數(shù)據(jù)流圖Dre子圖切分為多條數(shù)據(jù)鏈路;步驟4,編譯器后端將每一條數(shù)據(jù)鏈路分割為兩部分,即一部分對(duì)應(yīng)一條路由及功能配置,另一部分對(duì)應(yīng)一條數(shù)據(jù)配置,路由及功能配置和數(shù)據(jù)配置的內(nèi)容如配置定義中所述;編譯器后端根據(jù)路由及功能配置和數(shù)據(jù)配置的內(nèi)容,按照所述對(duì)應(yīng)關(guān)系對(duì)數(shù)據(jù)鏈路分割而成的兩部分分別進(jìn)行配置編碼,從而生成配置的二進(jìn)制碼;所述的配置映射要求在粗粒度可重構(gòu)陣列CGRA上采用一塊片上存儲(chǔ)器來(lái)存放數(shù)據(jù)配置,即數(shù)據(jù)配置存儲(chǔ)器,一塊片上存儲(chǔ)器來(lái)存放路由及功能配置,即路由及功能配置存儲(chǔ)器;配置映射具體包括以下步驟1)當(dāng)可重構(gòu)處理單元RPU開(kāi)始啟動(dòng)時(shí),由配置總線接口初始化路由及功能配置存儲(chǔ)器和數(shù)據(jù)配置存儲(chǔ)器;2)粗粒度可重構(gòu)陣列CGRA從路由及功能配置存儲(chǔ)器中讀出一條新的路由及功能配置并將該配置加載到多個(gè)可重構(gòu)單元RC上;3)粗粒度可重構(gòu)陣列CGRA從數(shù)據(jù)配置存儲(chǔ)器中讀出一條新的數(shù)據(jù)配置并將該配置加載到上一步驟中剛加載了路由及功能配置的可重構(gòu)單元RC上;4)粗粒度可重構(gòu)陣列CGRA基于加載的配置進(jìn)行計(jì)算,當(dāng)計(jì)算開(kāi)始后即進(jìn)入步驟5);5)當(dāng)粗粒度可重構(gòu)陣列CGRA檢測(cè)到在所有己加載配置的可重構(gòu)單元RC中,有一條數(shù)據(jù)鏈路的最后一個(gè)節(jié)點(diǎn)所對(duì)應(yīng)的可重構(gòu)單元RC完成計(jì)算時(shí),則判斷有一個(gè)配置完成計(jì)算, 并進(jìn)入下一步,同時(shí)粗粒度可重構(gòu)陣列CGRA記錄當(dāng)前檢測(cè)到的己完成計(jì)算的配置的地址信息;否則粗粒度可重構(gòu)陣列CGRA等待一個(gè)系統(tǒng)時(shí)鐘周期結(jié)束后,進(jìn)入步驟7);6)如果己完成計(jì)算的配置中,己加載過(guò)的數(shù)據(jù)配置的個(gè)數(shù)小于該配置的數(shù)據(jù)配置個(gè)數(shù),則粗粒度可重構(gòu)陣列CGRA判斷需要切換新的一條數(shù)據(jù)配置,并回到步驟3),否則進(jìn)入到步驟7);7)如果己完成加載的配置的個(gè)數(shù)小于粗粒度可重構(gòu)陣列上執(zhí)行的程序所對(duì)應(yīng)的配置的個(gè)數(shù),則粗粒度可重構(gòu)陣列CGRA判斷需要切換新的一條路由及功能配置,并進(jìn)入步驟 8),否則進(jìn)入到步驟9);8)如果尚未加載新配置且己完成上一條己加載配置的運(yùn)算的可重構(gòu)單元RC的個(gè)數(shù)大于或等于下一條將要加載的配置所對(duì)應(yīng)的可重構(gòu)單元RC的個(gè)數(shù),則粗粒度可重構(gòu)陣列 CGRA判定可以切換新的一條路由及功能配置,并回到步驟2),否則回到步驟5);9)配置映射結(jié)束,粗粒度可重構(gòu)陣列CGRA輸出計(jì)算結(jié)果。
2.根據(jù)權(quán)利要求1所述的應(yīng)用于粗粒度可重構(gòu)陣列的配置方法,其特征在于,所述的配置定義中,每一條所述路由及功能配置包括以下內(nèi)容計(jì)算資源的個(gè)數(shù),即該條配置所需要的可重構(gòu)單元RC個(gè)數(shù);對(duì)操作數(shù)的本地資源描述,即操作數(shù)來(lái)自或?qū)懭肽囊粋€(gè)可重構(gòu)單元RC,或者操作數(shù)來(lái)自或?qū)懭胗谀囊粋€(gè)局部存儲(chǔ)資源;對(duì)條件輸入位的描述,即條件輸入位來(lái)自于哪一個(gè)可重構(gòu)單元RC,或者條件輸入位來(lái)自于哪一個(gè)局部存儲(chǔ)資源;對(duì)操作碼的描述,即可重構(gòu)單元RC具體要作哪一種運(yùn)算;每一條所述數(shù)據(jù)配置包括對(duì)操作數(shù)的全局資源描述,即操作數(shù)來(lái)自或?qū)懭肽囊粋€(gè)全局存儲(chǔ)資源。
全文摘要
本發(fā)明的應(yīng)用于粗粒度可重構(gòu)陣列的配置方法,針對(duì)一定規(guī)模的粗粒度可重構(gòu)陣列,包括以數(shù)據(jù)鏈路為基本描述對(duì)象的配置定義方案及相應(yīng)的配置生成和配置映射方案。該配置定義方案中,一個(gè)程序?qū)?yīng)多條配置,一條配置對(duì)應(yīng)一條數(shù)據(jù)鏈路,每條數(shù)據(jù)鏈路由多個(gè)存在數(shù)據(jù)依賴關(guān)系的可重構(gòu)單元組成。與傳統(tǒng)的以RC為基本描述對(duì)象的方案相比,它可以隱藏這些RC間的互連信息、提供更大的配置信息壓縮空間,因而有利于減少配置總量和配置切換的時(shí)間。此外,一條描述數(shù)據(jù)鏈路的配置由一條路由及功能配置和一條或多條數(shù)據(jù)配置組成,多條數(shù)據(jù)配置共用一條路由及功能配置信息,一條配置的切換包括一次路由及功能配置的切換后一次或多次數(shù)據(jù)配置的切換。
文檔編號(hào)G06F9/45GK102508816SQ201110360639
公開(kāi)日2012年6月20日 申請(qǐng)日期2011年11月15日 優(yōu)先權(quán)日2011年11月15日
發(fā)明者時(shí)龍興, 曹鵬, 陸生禮, 陳人, 齊志 申請(qǐng)人:東南大學(xué)