本發(fā)明涉及高密度計(jì)算與信號(hào)處理領(lǐng)域,具體的說(shuō),是一種用于粗粒度計(jì)算系統(tǒng)的兩級(jí)編程模型及其編程方法。
背景技術(shù):
多核技術(shù)因?yàn)榈凸β氏?、?qiáng)并行處理能力和優(yōu)異的計(jì)算性能已經(jīng)成為處理器設(shè)計(jì)的主流。然而,在多核計(jì)算系統(tǒng)上對(duì)算法進(jìn)行高效映射,以充分發(fā)揮系統(tǒng)并行能力,已經(jīng)成為制約多核計(jì)算系統(tǒng)運(yùn)算性能的重要瓶頸,被稱為“編程墻”。能否實(shí)現(xiàn)多核計(jì)算系統(tǒng)的高效映射,降低多核計(jì)算系統(tǒng)編程難度,直接關(guān)系到多核計(jì)算系統(tǒng)的運(yùn)算能力能否被發(fā)揮,已經(jīng)逐漸成為當(dāng)今多核計(jì)算系統(tǒng)面臨的主要問(wèn)題之一。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明為克服現(xiàn)有技術(shù)的不足之處,提出了一種用于粗粒度計(jì)算系統(tǒng)的兩級(jí)編程模型及其編程方法,以期能夠?yàn)槎嗪擞?jì)算系統(tǒng)的編程提供更強(qiáng)的靈活性,降低粗粒度多核計(jì)算系統(tǒng)的編程難度,同時(shí)實(shí)現(xiàn)任務(wù)指令的復(fù)用,減少指令存儲(chǔ)所占用可存儲(chǔ)空間;頂層任務(wù)指令的出現(xiàn)還為多核計(jì)算系統(tǒng)的任務(wù)指令動(dòng)態(tài)調(diào)度提供了基礎(chǔ)。
本發(fā)明為達(dá)到上述目的所采用的技術(shù)方案是:
本發(fā)明一種用于粗粒度多核計(jì)算系統(tǒng)的兩級(jí)編程模型的特點(diǎn)征是用于編寫面向異構(gòu)多核計(jì)算系統(tǒng)的任務(wù)指令,所述任務(wù)指令類型包括:運(yùn)算指令、通用寄存器修改指令、跳轉(zhuǎn)指令、分支指令、訪存指令和接口指令,并用于操作所述兩級(jí)編程模型中的若干體系寄存器、若干個(gè)通用寄存器;所述兩級(jí)編程模型中各種寄存器均通過(guò)寄存器編號(hào)進(jìn)行區(qū)分;
所述兩級(jí)編程模型將所述粗粒度多核計(jì)算系統(tǒng)的同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器SDRAM的存儲(chǔ)空間劃分為物理寄存器區(qū)域、頂層任務(wù)指令區(qū)域、底層功能指令區(qū)域和數(shù)據(jù)存儲(chǔ)區(qū)域;
所述物理寄存器區(qū)域作為若干個(gè)物理寄存器的存儲(chǔ)空間,并通過(guò)所述物理寄存器的編號(hào)能映射到相應(yīng)物理寄存器在SDRAM的存儲(chǔ)位置;
所述頂層任務(wù)指令區(qū)域用于連續(xù)存儲(chǔ)所述頂層任務(wù)指令;
所述底層功能指令區(qū)域用于連續(xù)存儲(chǔ)所述頂層任務(wù)指令所對(duì)應(yīng)的底層功能指令;
所述數(shù)據(jù)存儲(chǔ)區(qū)域作為所述兩級(jí)編程模型的存儲(chǔ)器,并用于保存數(shù)據(jù);
所述運(yùn)算指令用于從若干物理寄存器中讀取數(shù)據(jù),并發(fā)送到相應(yīng)的運(yùn)算單元中進(jìn)行運(yùn)算后,將運(yùn)算結(jié)果存到其他若干物理寄存器中,所述運(yùn)算指令包含:運(yùn)算頂層任務(wù)指令和運(yùn)算底層功能指令;
所述運(yùn)算頂層任務(wù)指令包含:任務(wù)編號(hào)、任務(wù)類型、任務(wù)的數(shù)據(jù)入口、數(shù)據(jù)出口、存儲(chǔ)通道數(shù)量、運(yùn)算單元類型及數(shù)量、對(duì)應(yīng)的運(yùn)算底層功能指令的存儲(chǔ)地址和運(yùn)算底層功能指令的長(zhǎng)度信息;所述運(yùn)算底層任務(wù)指令包含物理寄存器和運(yùn)算單元的配置信息;
所述通用寄存器修改指令用于修改所述粗粒度多核計(jì)算系統(tǒng)中主控制器的通用寄存器數(shù)值;所述通用寄存器修改指令僅包含寄存器頂層任務(wù)指令,所述寄存器頂層任務(wù)指令包含任務(wù)類型和通用寄存器修改信息;
所述跳轉(zhuǎn)指令根據(jù)兩個(gè)通用寄存器數(shù)值之間或通用寄存器與預(yù)設(shè)數(shù)值之間的大小關(guān)系,對(duì)程序指針進(jìn)行跳轉(zhuǎn)操作,使程序指針跳轉(zhuǎn)到預(yù)設(shè)的位置執(zhí)行操作;所述跳轉(zhuǎn)指令僅包含跳轉(zhuǎn)頂層任務(wù)指令;所述跳轉(zhuǎn)頂層任務(wù)指令包含任務(wù)類型、程序指針偏移量、參與比較的通用寄存器或預(yù)設(shè)數(shù)值信息;
所述分支指令是提供給主控制器,用于查詢運(yùn)算指令的計(jì)算結(jié)果并決定是否對(duì)程序指針進(jìn)行跳轉(zhuǎn)操作;所述分支指令令僅包分支頂層任務(wù)指令;所述分支頂層任務(wù)指令包含任務(wù)類型、程序指針偏移量、任務(wù)編號(hào)、程序指針和通用寄存器數(shù)值保存區(qū)域;
所述訪存指令包含讀取指令和存儲(chǔ)指令,并分別用于將SDRAM中數(shù)據(jù)存儲(chǔ)區(qū)域的數(shù)據(jù)讀取到物理寄存器中和將物理寄存器中的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)存儲(chǔ)區(qū)域中;所述訪存指令包含訪存頂層任務(wù)指令和訪存底層功能指令,所述訪存頂層任務(wù)指令是由任務(wù)類型、體系寄存器編號(hào)和存儲(chǔ)器地址構(gòu)成;所述訪存底層功能指令包含物理寄存器的配置信息;
所述接口指令包含輸出指令和輸入指令,并用于將SDRAM中數(shù)據(jù)存儲(chǔ)區(qū)域的數(shù)據(jù)與上位機(jī)或其他數(shù)據(jù)處理芯片進(jìn)行數(shù)據(jù)交換;所述接口指令包含接口頂層任務(wù)指令和接口底層功能指令,所述接口頂層任務(wù)指令包含任務(wù)類型、體系寄存器編號(hào)和接口類型;所述底層功能指令包括物理寄存器的配置信息和接口單元的配置信息;
以不同類型的任務(wù)指令分別完成不同的操作任務(wù),并通過(guò)各類任務(wù)指令的組合,共同實(shí)現(xiàn)所述粗粒度多核計(jì)算系統(tǒng)的面向異構(gòu)計(jì)算。
本發(fā)明一種用于粗粒度多核計(jì)算系統(tǒng)的兩級(jí)編程方法的特點(diǎn)是用于編寫面向異構(gòu)多核計(jì)算系統(tǒng)的任務(wù)指令,所述任務(wù)指令分為頂層任務(wù)指令和底層功能指令;所述頂層任務(wù)指令則用于維護(hù)計(jì)算任務(wù)之間的數(shù)據(jù)傳遞關(guān)系;所述底層功能指令用于在一個(gè)計(jì)算任務(wù)內(nèi)指導(dǎo)相應(yīng)的功能單元執(zhí)行具體的數(shù)據(jù)處理操作;所述任務(wù)指令類型包括:運(yùn)算指令、通用寄存器修改指令、跳轉(zhuǎn)指令、分支指令、訪存指令和接口指令;所述訪存指令包含讀取指令和存儲(chǔ)指令,所述接口指令包含輸出指令和輸入指令;將所述粗粒度多核計(jì)算系統(tǒng)的同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器SDRAM的存儲(chǔ)空間劃分為物理寄存器區(qū)域、頂層任務(wù)指令區(qū)域、底層功能指令區(qū)域和數(shù)據(jù)存儲(chǔ)區(qū)域;所述兩級(jí)編程方法是按以下步驟進(jìn)行:
步驟1:分析待映射算法,根據(jù)多核計(jì)算系統(tǒng)內(nèi)集成運(yùn)算簇的種類和數(shù)量,將所述待映射算法拆分成若干個(gè)計(jì)算任務(wù);
步驟2:將所述若干計(jì)算任務(wù)的粒度與粗粒度多核計(jì)算系統(tǒng)進(jìn)行匹配,如果計(jì)算任務(wù)的粒度大于所述粗粒度多核計(jì)算系統(tǒng)中物理寄存器的容量,則根據(jù)物理寄存器的容量將計(jì)算任務(wù)拆分成若干粒度小于所述物理寄存器容量的子計(jì)算任務(wù);
步驟3:對(duì)所述任意一種功能的子計(jì)算任務(wù)進(jìn)行算法映射,編寫相應(yīng)子計(jì)算任務(wù)中使用的每一個(gè)功能單元的配置信息,并將各個(gè)功能單元的配置信息順序排列起來(lái)后,使用占位指令字對(duì)排序后的配置信息進(jìn)行填充,使得配置信息的長(zhǎng)度滿足所述粗粒度多核計(jì)算系統(tǒng)的同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器SDRAM突發(fā)長(zhǎng)度的整數(shù)倍數(shù),從而組成一種功能的子計(jì)算任務(wù)的底層功能指令;
步驟4:使用編寫的腳本程序生成任意一種功能的子計(jì)算任務(wù)的頂層任務(wù)指令框架,所述頂層任務(wù)指令框架包含:任務(wù)類型、運(yùn)算單元的種類和數(shù)量、任務(wù)指令的數(shù)據(jù)入口和數(shù)據(jù)出口數(shù)量、底層功能指令長(zhǎng)度;
步驟5:當(dāng)所有不同功能的子計(jì)算任務(wù)的底層功能指令和頂層任務(wù)指令框架都已經(jīng)編寫完畢,則進(jìn)入步驟6;否則回到步驟3;
步驟6:將所有不同功能的子計(jì)算任務(wù)的底層功能指令依次收尾連接,并在連接的末端加入所述腳本程序提供的接口指令和訪存指令的底層功能指令模板,再提取每一個(gè)不同功能的底層功能指令的起始地址,并編入所述頂層任務(wù)指令框架中;
步驟7:按步驟1中拆分的待映射算法的計(jì)算任務(wù),將運(yùn)算指令、跳轉(zhuǎn)指令、分支指令的頂層任務(wù)指令按待映射算法的計(jì)算順序排列起來(lái),得到子計(jì)算任務(wù)序列;從而實(shí)現(xiàn)運(yùn)算功能和程序控制;
步驟8:在需要使用所述數(shù)據(jù)存儲(chǔ)區(qū)內(nèi)的數(shù)據(jù)作為源數(shù)據(jù)的運(yùn)算指令前加入所述讀取指令,在需要保存運(yùn)算結(jié)果到所述數(shù)據(jù)存儲(chǔ)區(qū)的運(yùn)算指令后加入所述存儲(chǔ)指令;
步驟9:在需要循環(huán)執(zhí)行的子計(jì)算任務(wù)序列前加入通用寄存器修改指令,在子計(jì)算任務(wù)序列后加入跳轉(zhuǎn)指令,得到子任務(wù)循環(huán)序列,用于控制循環(huán)變量和程序指針PC,以實(shí)現(xiàn)循環(huán)功能;
步驟10:在所述子任務(wù)循環(huán)序列后加入輸出指令,用于輸出運(yùn)算結(jié)果;
步驟11:在頂層任務(wù)指令中填充體系寄存器字段,得到計(jì)算任務(wù)序列;
步驟12:在所述計(jì)算任務(wù)序列前加入輸入指令,用于輸入源數(shù)據(jù),從而實(shí)現(xiàn)待映射算法的映射過(guò)程。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益技術(shù)效果體現(xiàn)在:
1、本發(fā)明兩級(jí)編程模型及其編程方法的引入,通過(guò)將任務(wù)指令分為頂層任務(wù)指令和底層功能指令,以及任務(wù)指令的類型劃分,提高了多核計(jì)算系統(tǒng)編程的靈活性,降低了多核計(jì)算系統(tǒng)的編程難度,方便了程序員在多核計(jì)算系統(tǒng)上的算法映射,大大提高了算法映射效率,在一定程度上緩解了“編程墻”的影響。
2、本發(fā)明通過(guò)在編程模型中包含若干體系寄存器和通用寄存器,并將粗粒度計(jì)算系統(tǒng)同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器SDRAM的一部分連續(xù)存儲(chǔ)空間作為物理寄存器,各種寄存器均通過(guò)寄存器編號(hào)進(jìn)行區(qū)分的方法,使底層程序的循環(huán)利用成為可能,避免了程序員為了實(shí)現(xiàn)程序的循環(huán)操作而多次復(fù)制底層功能指令,也避免了程序員在海量底層功能指令中修改循環(huán)體中需要變化的數(shù)值,大大提高了程序編寫效率,同時(shí)降低了程序出錯(cuò)的概率,提高了程序編寫的正確率。此外,將粗粒度計(jì)算系統(tǒng)同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器SDRAM的一部分連續(xù)存儲(chǔ)空間作為物理寄存器也為寄存器重命名技術(shù)的引入提供了可能,從而消除數(shù)據(jù)的偽相關(guān),維護(hù)數(shù)據(jù)真相關(guān),進(jìn)一步提高系統(tǒng)的發(fā)射效率,提高算力的利用率。
3、本發(fā)明粗粒度計(jì)算系統(tǒng)的任務(wù)指令分為頂層任務(wù)指令和底層功能指令兩級(jí),方便了程序員對(duì)底層程序的復(fù)用,避免了程序員多次編寫相同功能的底層程序,從而提高了程序員對(duì)算法的映射效率,縮短了編程時(shí)間;將頂層任務(wù)指令分為多種類型,為多核計(jì)算系統(tǒng)的亂序執(zhí)行提供了可能,在遇到接口指令時(shí),由于數(shù)據(jù)必須先通過(guò)存儲(chǔ)指令存放到SDRAM的數(shù)據(jù)存儲(chǔ)區(qū)域,使數(shù)據(jù)實(shí)現(xiàn)了順序整理,避免了亂序執(zhí)行時(shí)由于程序執(zhí)行順序的不確定性導(dǎo)致的亂序輸出,又不至于因?yàn)椴捎弥噶钭枞绞蕉档驼麄€(gè)系統(tǒng)的工作效率;訪存指令和接口指令的設(shè)置也為主控制器的分支預(yù)測(cè)提供了可能,由于對(duì)功能單元中的接口單元的操作具有不可撤銷性,當(dāng)分支預(yù)測(cè)錯(cuò)誤時(shí),無(wú)法撤銷接口單元的輸出,從而會(huì)導(dǎo)致錯(cuò)誤輸出,而存儲(chǔ)指令只有等任務(wù)被提交之后才會(huì)更新SDRAM中數(shù)據(jù)存儲(chǔ)區(qū)域的數(shù)值,被存儲(chǔ)到數(shù)據(jù)存儲(chǔ)區(qū)域的值均能夠保證其正確性,因此接口指令的執(zhí)行不會(huì)導(dǎo)致錯(cuò)誤輸出,所以可以引入分支預(yù)測(cè)機(jī)制,進(jìn)一步提高了多核計(jì)算系統(tǒng)的計(jì)算效率。
4、本發(fā)明兩級(jí)編程模型的程序編寫中,底層功能指令的編寫用于實(shí)現(xiàn)具體單個(gè)計(jì)算任務(wù)內(nèi)的數(shù)據(jù)處理操作過(guò)程,頂層任務(wù)指令的編寫用于維護(hù)計(jì)算任務(wù)之間的數(shù)據(jù)傳遞關(guān)系;將底層功能指令作為類似函數(shù)的數(shù)據(jù)處理方法提取出來(lái),使其與具體的待處理數(shù)據(jù)解耦,同時(shí)將頂層程序作為對(duì)底層功能指令的調(diào)用,降低了程序員對(duì)程序維護(hù)的難度;由于頂層任務(wù)指令和底層功能指令的分離,程序員在編寫程序時(shí)只需要分別保證底層功能指令和頂層任務(wù)指令的正確性,在遇到錯(cuò)誤需要調(diào)試時(shí),也可以分別檢查底層功能指令和頂層任務(wù)指令的正確性,方便了錯(cuò)誤定位和錯(cuò)誤排除,大大降低了程序的調(diào)試難度,極大地提高了編程效率。
附圖說(shuō)明
圖1為本發(fā)明所面向的粗粒度多核計(jì)算系統(tǒng)的結(jié)構(gòu)圖;
圖2為本發(fā)明SDRAM的存儲(chǔ)空間分配和物理寄存器機(jī)構(gòu)示意圖;
圖3為本發(fā)明運(yùn)算指令的頂層任務(wù)指令結(jié)構(gòu)模版;
圖4為本發(fā)明跳轉(zhuǎn)指令的頂層任務(wù)指令結(jié)構(gòu)模版;
圖5為本發(fā)明寄存器修改指令的頂層任務(wù)指令結(jié)構(gòu)模版;
圖6為本發(fā)明分支指令的頂層任務(wù)指令結(jié)構(gòu)模版;
圖7為本發(fā)明訪存指令的頂層任務(wù)指令結(jié)構(gòu)模版;
圖8為本發(fā)明接口指令的頂層任務(wù)指令結(jié)構(gòu)模版;
圖9為本發(fā)明底層功能指令的數(shù)據(jù)組織格式示意圖;
圖10為本發(fā)明子任務(wù)循環(huán)序列的格式示意圖;
圖11為使用本發(fā)明編寫示例任務(wù)程序時(shí)生成的底層功能指令和接口指令模板;
圖12為使用本發(fā)明編寫示例任務(wù)程序時(shí)最終得到的底層功能指令;
圖13為使用本發(fā)明編寫示例任務(wù)程序時(shí)編寫頂層任務(wù)指令的步驟示意圖。
具體實(shí)施方式
在本例實(shí)施中,一種用于粗粒度多核計(jì)算系統(tǒng)的兩級(jí)編程模型,是用于編寫面向異構(gòu)多核計(jì)算系統(tǒng)的任務(wù)指令,任務(wù)指令類型包括:運(yùn)算指令、通用寄存器修改指令、跳轉(zhuǎn)指令、分支指令、訪存指令和接口指令,并用于操作兩級(jí)編程模型中的若干體系寄存器、若干個(gè)通用寄存器;兩級(jí)編程模型中各種寄存器均通過(guò)寄存器編號(hào)進(jìn)行區(qū)分;
粗粒度異構(gòu)多核計(jì)算系統(tǒng)的結(jié)構(gòu)如圖1所示,包括存儲(chǔ)器MEM、片上網(wǎng)絡(luò)、主控制器MC和其他功能單元;主控制器負(fù)責(zé)任務(wù)指令的下發(fā),其他功能單元在主控制器的控制下根據(jù)接收到的配置信息協(xié)同完成各種計(jì)算任務(wù);
任務(wù)指令是指粗粒度操作系統(tǒng)中為了完成特定計(jì)算任務(wù),發(fā)送給各個(gè)功能單元的包含工作內(nèi)容的命令;
計(jì)算任務(wù)是指為了完成特定算法步驟而實(shí)施的一系列簡(jiǎn)單數(shù)據(jù)操作的集合;
如圖2所示,兩級(jí)編程模型將粗粒度多核計(jì)算系統(tǒng)的同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器SDRAM的存儲(chǔ)空間劃分為物理寄存器區(qū)域、頂層任務(wù)指令區(qū)域、底層功能指令區(qū)域和數(shù)據(jù)存儲(chǔ)區(qū)域;
物理寄存器區(qū)域作為若干個(gè)物理寄存器的存儲(chǔ)空間,并通過(guò)物理寄存器的編號(hào)能映射到相應(yīng)物理寄存器在SDRAM的存儲(chǔ)位置;
頂層任務(wù)指令區(qū)域用于連續(xù)存儲(chǔ)頂層任務(wù)指令;
底層功能指令區(qū)域用于連續(xù)存儲(chǔ)頂層任務(wù)指令所對(duì)應(yīng)的底層功能指令;
數(shù)據(jù)存儲(chǔ)區(qū)域作為兩級(jí)編程模型的存儲(chǔ)器,并用于保存數(shù)據(jù);
體系寄存器是程序員用于表示數(shù)據(jù)流向的寄存器,不分配實(shí)際存儲(chǔ)空間,但在計(jì)算任務(wù)執(zhí)行時(shí),體系寄存器會(huì)被映射到具體的物理寄存器,所以其存儲(chǔ)空間與所映射到的物理寄存器容量相等;體系寄存器與物理寄存器的映射關(guān)系不是固定的,而是由計(jì)算系統(tǒng)的主控制器根據(jù)當(dāng)前物理寄存器的狀態(tài)選擇空閑物理寄存器進(jìn)行分配的;
物理寄存器占用SDRAM中的存儲(chǔ)容量固定的連續(xù)存儲(chǔ)空間,用于粗粒度計(jì)算系統(tǒng)中計(jì)算任務(wù)間的數(shù)據(jù)存儲(chǔ);粗粒度計(jì)算系統(tǒng)中包含若干物理寄存器,并用物理寄存器編號(hào)區(qū)別不同的物理寄存器,物理寄存器編號(hào)映射到物理寄存器在SDRAM的存儲(chǔ)位置;
當(dāng)計(jì)算任務(wù)的數(shù)據(jù)量大于體系寄存器所對(duì)應(yīng)的物理寄存器容量時(shí),需要將該計(jì)算任務(wù)分成兩條或多條任務(wù)指令,占用多個(gè)體系寄存器,使每一條任務(wù)指令中數(shù)據(jù)量都不大于體系寄存器所對(duì)應(yīng)的物理寄存器容量,由多條任務(wù)指令共同完成該計(jì)算任務(wù);
當(dāng)體系寄存器作為任務(wù)指令的數(shù)據(jù)入口時(shí),功能單元從體系寄存器當(dāng)前所對(duì)應(yīng)的物理寄存器中讀取數(shù)據(jù),作為任務(wù)的源數(shù)據(jù);當(dāng)體系寄存器作為任務(wù)指令的數(shù)據(jù)出口時(shí),功能單元向體系寄存器當(dāng)前所對(duì)應(yīng)的物理寄存器中存入運(yùn)算結(jié)果,等待由其后的計(jì)算任務(wù)使用;
通用寄存器是指位于主控制器內(nèi)的、可以由程序員通過(guò)任務(wù)指令對(duì)其數(shù)值進(jìn)行操作的寄存器,通用寄存器可以作為循環(huán)變量使用,也可以在任務(wù)指令中作為體系寄存器編號(hào)使用;任務(wù)循環(huán)執(zhí)行時(shí),主控制器讀取該通用寄存器中的當(dāng)前數(shù)值作為體系寄存器的編號(hào),隨著通用寄存器數(shù)值的變化,作為任務(wù)指令數(shù)據(jù)出口和數(shù)據(jù)入口的體系寄存器編號(hào)也隨之變化,從而實(shí)現(xiàn)任務(wù)指令的循環(huán)使用;
運(yùn)算指令用于從若干物理寄存器中讀取數(shù)據(jù),并發(fā)送到相應(yīng)的運(yùn)算單元中進(jìn)行運(yùn)算后,將運(yùn)算結(jié)果存到其他若干物理寄存器中,運(yùn)算指令包含:運(yùn)算頂層任務(wù)指令和運(yùn)算底層功能指令;
如圖3所示,運(yùn)算頂層任務(wù)指令包含:任務(wù)編號(hào)、任務(wù)類型、任務(wù)的數(shù)據(jù)入口、數(shù)據(jù)出口、存儲(chǔ)通道數(shù)量、運(yùn)算單元類型及數(shù)量、對(duì)應(yīng)的運(yùn)算底層功能指令的存儲(chǔ)地址和運(yùn)算底層功能指令的長(zhǎng)度信息;運(yùn)算底層任務(wù)指令包含物理寄存器和運(yùn)算單元的配置信息;
通用寄存器修改指令用于修改粗粒度多核計(jì)算系統(tǒng)中主控制器的通用寄存器數(shù)值;如圖4所示,通用寄存器修改指令僅包含寄存器頂層任務(wù)指令,寄存器頂層任務(wù)指令包含任務(wù)類型和通用寄存器修改信息;
跳轉(zhuǎn)指令根據(jù)兩個(gè)通用寄存器數(shù)值之間或通用寄存器與預(yù)設(shè)數(shù)值之間的大小關(guān)系,對(duì)程序指針進(jìn)行跳轉(zhuǎn)操作,使程序指針跳轉(zhuǎn)到預(yù)設(shè)的位置執(zhí)行操作;跳轉(zhuǎn)指令僅包含跳轉(zhuǎn)頂層任務(wù)指令;如圖5所示,跳轉(zhuǎn)頂層任務(wù)指令包含任務(wù)類型、程序指針偏移量、參與比較的通用寄存器或預(yù)設(shè)數(shù)值信息;
分支指令是提供給主控制器,用于查詢運(yùn)算指令的計(jì)算結(jié)果并決定是否對(duì)程序指針進(jìn)行跳轉(zhuǎn)操作;分支指令令僅包分支頂層任務(wù)指令;如圖6所示,分支頂層任務(wù)指令包含任務(wù)類型、程序指針偏移量、任務(wù)編號(hào)、程序指針和通用寄存器數(shù)值保存區(qū)域;
訪存指令包含讀取指令和存儲(chǔ)指令,并分別用于將SDRAM中數(shù)據(jù)存儲(chǔ)區(qū)域的數(shù)據(jù)讀取到物理寄存器中和將物理寄存器中的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)存儲(chǔ)區(qū)域中;訪存指令包含訪存頂層任務(wù)指令和訪存底層功能指令,如圖7所示,訪存頂層任務(wù)指令是由任務(wù)類型、體系寄存器編號(hào)和存儲(chǔ)器地址構(gòu)成;訪存底層功能指令包含物理寄存器的配置信息;
接口指令包含輸出指令和輸入指令,并用于將SDRAM中數(shù)據(jù)存儲(chǔ)區(qū)域的數(shù)據(jù)與上位機(jī)或其他數(shù)據(jù)處理芯片進(jìn)行數(shù)據(jù)交換;接口指令包含接口頂層任務(wù)指令和接口底層功能指令,如圖8所示,接口頂層任務(wù)指令包含任務(wù)類型、體系寄存器編號(hào)和接口類型;底層功能指令包括物理寄存器的配置信息和接口單元的配置信息;
以不同類型的任務(wù)指令分別完成不同的操作任務(wù),并通過(guò)各類任務(wù)指令的組合,共同實(shí)現(xiàn)粗粒度多核計(jì)算系統(tǒng)的面向異構(gòu)計(jì)算。
在本例實(shí)施中,一種用于粗粒度多核計(jì)算系統(tǒng)的兩級(jí)編程方法,是用于編寫面向異構(gòu)多核計(jì)算系統(tǒng)的任務(wù)指令,任務(wù)指令分為頂層任務(wù)指令和底層功能指令;頂層任務(wù)指令則用于維護(hù)計(jì)算任務(wù)之間的數(shù)據(jù)傳遞關(guān)系;底層功能指令用于在一個(gè)計(jì)算任務(wù)內(nèi)指導(dǎo)相應(yīng)的功能單元執(zhí)行具體的數(shù)據(jù)處理操作;任務(wù)指令類型包括:運(yùn)算指令、通用寄存器修改指令、跳轉(zhuǎn)指令、分支指令、訪存指令和接口指令;訪存指令包含讀取指令和存儲(chǔ)指令,接口指令包含輸出指令和輸入指令;將粗粒度多核計(jì)算系統(tǒng)的同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器SDRAM的存儲(chǔ)空間劃分為物理寄存器區(qū)域、頂層任務(wù)指令區(qū)域、底層功能指令區(qū)域和數(shù)據(jù)存儲(chǔ)區(qū)域;兩級(jí)編程方法是按以下步驟進(jìn)行:
步驟1:分析待映射算法,根據(jù)多核計(jì)算系統(tǒng)內(nèi)集成運(yùn)算簇的種類和數(shù)量,將待映射算法拆分成若干個(gè)計(jì)算任務(wù);
步驟2:將若干計(jì)算任務(wù)的粒度與粗粒度多核計(jì)算系統(tǒng)進(jìn)行匹配,如果計(jì)算任務(wù)的粒度大于粗粒度多核計(jì)算系統(tǒng)中物理寄存器的容量,則根據(jù)物理寄存器的容量將計(jì)算任務(wù)拆分成若干粒度小于物理寄存器容量的子計(jì)算任務(wù);
步驟3:對(duì)任意一種功能的子計(jì)算任務(wù)進(jìn)行算法映射,編寫相應(yīng)子計(jì)算任務(wù)中使用的每一個(gè)功能單元的配置信息,并將各個(gè)功能單元的配置信息順序排列起來(lái)后,使用占位指令字對(duì)排序后的配置信息進(jìn)行填充,使得配置信息的長(zhǎng)度滿足粗粒度多核計(jì)算系統(tǒng)的同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器SDRAM突發(fā)長(zhǎng)度的整數(shù)倍數(shù),從而組成一種功能的子計(jì)算任務(wù)的底層功能指令,形成如圖9所示結(jié)構(gòu);
步驟4:使用編寫的腳本程序生成任意一種功能的子計(jì)算任務(wù)的頂層任務(wù)指令框架,頂層任務(wù)指令框架包含:任務(wù)類型、運(yùn)算單元的種類和數(shù)量、任務(wù)指令的數(shù)據(jù)入口和數(shù)據(jù)出口數(shù)量、底層功能指令長(zhǎng)度;
步驟5:當(dāng)所有不同功能的子計(jì)算任務(wù)的底層功能指令和頂層任務(wù)指令框架都已經(jīng)編寫完畢,則進(jìn)入步驟6;否則回到步驟3;
步驟6:將所有不同功能的子計(jì)算任務(wù)的底層功能指令依次收尾連接,并在連接的末端加入腳本程序提供的接口指令和訪存指令的底層功能指令模板,再提取每一個(gè)不同功能的底層功能指令的起始地址,并編入頂層任務(wù)指令框架中;
步驟7:按步驟1中拆分的待映射算法的計(jì)算任務(wù),將運(yùn)算指令、跳轉(zhuǎn)指令、分支指令的頂層任務(wù)指令按待映射算法的計(jì)算順序排列起來(lái),得到子計(jì)算任務(wù)序列;從而實(shí)現(xiàn)運(yùn)算功能和程序控制;
步驟8:在需要使用數(shù)據(jù)存儲(chǔ)區(qū)內(nèi)的數(shù)據(jù)作為源數(shù)據(jù)的運(yùn)算指令前加入讀取指令,在需要保存運(yùn)算結(jié)果到數(shù)據(jù)存儲(chǔ)區(qū)的運(yùn)算指令后加入存儲(chǔ)指令;如果算法中存在數(shù)據(jù)縮減指令,如累加、乘累加運(yùn)算,可以通過(guò)嵌入一對(duì)存儲(chǔ)指令和讀取指令,來(lái)維護(hù)系統(tǒng)的運(yùn)算粒度,從而使計(jì)算任務(wù)的數(shù)據(jù)粒度適合所述粗粒度多核計(jì)算系統(tǒng),更好地發(fā)揮所述粗粒度多核計(jì)算系統(tǒng)的計(jì)算能力;
步驟9:在需要循環(huán)執(zhí)行的子計(jì)算任務(wù)序列前加入通用寄存器修改指令,在子計(jì)算任務(wù)序列后加入跳轉(zhuǎn)指令,得到子任務(wù)循環(huán)序列,用于控制循環(huán)變量和程序指針PC,以實(shí)現(xiàn)循環(huán)功能,如圖10所示;
步驟10:在子任務(wù)循環(huán)序列后加入輸出指令,用于輸出運(yùn)算結(jié)果;
步驟11:在頂層任務(wù)指令中填充體系寄存器字段,得到計(jì)算任務(wù)序列;
步驟12:在計(jì)算任務(wù)序列前加入輸入指令,用于輸入源數(shù)據(jù),從而實(shí)現(xiàn)待映射算法的映射過(guò)程。
此處以完成以下簡(jiǎn)單計(jì)算任務(wù)為例,示例性地簡(jiǎn)述編程過(guò)程:
計(jì)算任務(wù):數(shù)組A數(shù)據(jù)量32M,數(shù)組B數(shù)據(jù)量32M,數(shù)組C數(shù)據(jù)量2M,按順序組成一個(gè)66M數(shù)據(jù)量的數(shù)據(jù)塊;數(shù)組A和數(shù)組B按順序每16個(gè)數(shù)進(jìn)行乘累加運(yùn)算,得到2M中間運(yùn)算結(jié)果,再同數(shù)組C依序做加法運(yùn)算,得到2M運(yùn)算結(jié)果,最后將運(yùn)算結(jié)果輸出。
下面給出該計(jì)算任務(wù)的算法模型:
在進(jìn)行任務(wù)指令編寫時(shí),首先編寫底層功能指令,本例中包括兩部分運(yùn)算過(guò)程,在目標(biāo)系統(tǒng)中均可由功能節(jié)點(diǎn)中的可重構(gòu)運(yùn)算單元RCU完成,操作分別為16點(diǎn)乘累加和加法,分別生成其配置信息,并取得接口指令的程序模板,如圖11所示;
將已經(jīng)獲得的配置信息順次連接,組成底層功能指令,其結(jié)構(gòu)如圖12所示;
如圖13所示,逐步完成頂層任務(wù)指令的編寫,圖中的子圖分別對(duì)應(yīng)之前所述的步驟7到步驟12;其中RCU(T,A,B,…)代表在某一類稱作RCU的運(yùn)算單元中執(zhí)行操作,T表示操作的類型,A,B,…表示數(shù)據(jù)出口和數(shù)據(jù)入口;LOAD(A,B)代表將存儲(chǔ)器區(qū)域中以B為起始地址處的數(shù)據(jù)讀取到體系寄存器A中;STORE(A,B)代表將體系寄存器A中的數(shù)據(jù)存儲(chǔ)到存儲(chǔ)器區(qū)域中以B為起始地址處;GREG(A=x,B=y(tǒng),…)代表將通用寄存器A的數(shù)值修改為x,將通用寄存器B的數(shù)值修改為y,…;JUMP(A,B)代表當(dāng)循環(huán)計(jì)數(shù)器沒(méi)有達(dá)到A的數(shù)值時(shí),程序指針跳轉(zhuǎn)B項(xiàng);IN(A,B)指向存儲(chǔ)器區(qū)域地址A的位置輸入數(shù)據(jù)量為B的數(shù)據(jù);OUT(A,B)指從存儲(chǔ)器區(qū)域地址A的位置輸出數(shù)據(jù)量為B的數(shù)據(jù)。