本實(shí)用新型涉及一種微處理器設(shè)備,具體為一種基于分布式功能單元的微處理器架構(gòu),屬于微處理器架構(gòu)設(shè)備領(lǐng)域。
背景技術(shù):
傳統(tǒng)微處理器的開(kāi)發(fā)是一項(xiàng)非常繁瑣浩大的工程,需要投入海量的資源和時(shí)間,導(dǎo)致一款處理器的開(kāi)發(fā)成本極其高昂。因此,如果一款處理器在其架構(gòu)定型之后無(wú)法進(jìn)行大量流片的話,勢(shì)必引發(fā)巨大的成本黑洞,從而給芯片設(shè)計(jì)開(kāi)發(fā)帶來(lái)難以估量的巨大風(fēng)險(xiǎn)。可是,由于應(yīng)用軟件種類繁多,傳統(tǒng)處理器很難保證對(duì)不同領(lǐng)域的所有應(yīng)用程序都能做到執(zhí)行性能最優(yōu)。造成這種現(xiàn)象的主要原因在于,傳統(tǒng)處理器的性能優(yōu)化全部集中于機(jī)器碼(machine code)層面,而對(duì)于來(lái)自高級(jí)語(yǔ)言層面的,和特定應(yīng)用相關(guān)的信息則完全忽略。因此,建立一種軟件和硬件之間的信息交換機(jī)制,從而使底層的硬件可以動(dòng)態(tài)地適應(yīng)不同應(yīng)用程序的結(jié)構(gòu),以保證對(duì)任何應(yīng)用程序都達(dá)到最佳運(yùn)行性能,就變得非常必要。
為此,提供一種基于分布式功能單元的微處理器架構(gòu)。
技術(shù)實(shí)現(xiàn)要素:
本實(shí)用新型的目的就在于為了解決上述問(wèn)題而提供一種基于分布式功能單元的微處理器架構(gòu)。
本實(shí)用新型通過(guò)以下技術(shù)方案來(lái)實(shí)現(xiàn)上述目的:一種基于分布式功能單元的微處理器架構(gòu),包括:
指令譯碼器,能夠把當(dāng)前需要執(zhí)行的機(jī)器指令解碼成若干微指令,并將微指令發(fā)送到對(duì)應(yīng)的功能單元;
功能單元,包括獨(dú)立的硬件模塊,完整的控制邏輯和數(shù)據(jù)路徑,并提供完全基于硬件實(shí)現(xiàn)的各種操作;
數(shù)據(jù)互聯(lián)模塊,能夠使不同功能單元之間的數(shù)據(jù)交換;
微指令分發(fā)網(wǎng)絡(luò),將所述微指令從所述指令譯碼器中分發(fā)到對(duì)應(yīng)的功能單元中。
進(jìn)一步,所述微指令包括:
執(zhí)行單元,執(zhí)行微指令的功能單元;
操作編碼,執(zhí)行時(shí)的具體操作;
目標(biāo)單元,當(dāng)前的操作結(jié)果應(yīng)被傳送到的功能單元;
目標(biāo)單元輸入端口,目標(biāo)單元負(fù)責(zé)接收該微指令結(jié)果的具體端口;
微指令編號(hào),所述微指令及其操作數(shù)使用的配對(duì)編號(hào);
微指令編號(hào)處理標(biāo)識(shí),指示功能單元是否將當(dāng)前操作結(jié)果的編號(hào)加一。
進(jìn)一步,所述指令譯碼器內(nèi)部設(shè)有能夠?qū)C(jī)器指令編碼的微指令存儲(chǔ)器。
進(jìn)一步,每一個(gè)所述功能單元包括兩個(gè)輸入端口:
微指令端口,面向指令譯碼器,用來(lái)接收微指令的端口;
數(shù)據(jù)端口,面向數(shù)據(jù)互聯(lián)模塊,用來(lái)接收其他功能單元發(fā)送的操作數(shù)。
進(jìn)一步,每一個(gè)所述功能單元包括能夠與外接設(shè)備互聯(lián)的專屬端口。
進(jìn)一步,所述數(shù)據(jù)互聯(lián)模塊包括兩種互聯(lián)結(jié)構(gòu):
共享總線結(jié)構(gòu),由一條總線連接全部功能單元,并且每次只能由一對(duì)功能單元獨(dú)占該總線;
交叉互聯(lián)結(jié)構(gòu),若干對(duì)功能單元并行互聯(lián),不必等待總線的空閑周期。
本實(shí)用新型的有益效果是:與傳統(tǒng)處理器架構(gòu)相比,以分布式獨(dú)立功能單元為基礎(chǔ)的處理器架構(gòu)能夠不使用流水線連接處理器各個(gè)部分,而是通過(guò)數(shù)據(jù)互聯(lián)模塊將各個(gè)功能單元互聯(lián),可以無(wú)縫隙添加硬件加速模塊(accelerator)。
該微處理架構(gòu)基于任何需要耗費(fèi)大量運(yùn)算時(shí)間的軟件算法,理論上其均可由相應(yīng)的硬件模塊來(lái)實(shí)現(xiàn),并作為一個(gè)獨(dú)立功能單元添加到一個(gè)處理器里 來(lái)。當(dāng)實(shí)現(xiàn)基于此架構(gòu)的ASIC處理器時(shí),功能單元設(shè)計(jì)者可以盡可能多地添加通用硬件加速器(例如圖形圖像處理及加密解密算法等等),從而滿足盡可能多的應(yīng)用的需求(注意,由于ASIC處理器結(jié)構(gòu)一旦確定即無(wú)法修改,所以不應(yīng)該將某個(gè)應(yīng)用的專屬算法作為硬件加速器來(lái)使用)。而當(dāng)使用FPGA當(dāng)作硬件實(shí)現(xiàn)平臺(tái)的時(shí)候,則可以采取更加靈活的加速器添加模式。
附圖說(shuō)明
圖1:本實(shí)用新型基于分布式功能單元的微處理器架構(gòu)示意圖;
圖2:本實(shí)用新型基于共享總線的數(shù)據(jù)互聯(lián)模塊結(jié)構(gòu)示意圖;
圖3:本實(shí)用新型基于交叉互聯(lián)的數(shù)據(jù)互聯(lián)模塊結(jié)構(gòu)示意圖;
圖4:本實(shí)用新型動(dòng)態(tài)生成加速器功能單元的流程結(jié)構(gòu)示意圖;
圖5:本實(shí)用新型動(dòng)態(tài)進(jìn)行微指令重新調(diào)度的流程結(jié)構(gòu)示意圖;
具體實(shí)施方式
下面將結(jié)合本實(shí)用新型實(shí)施例中的附圖,對(duì)本實(shí)用新型實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本實(shí)用新型一部分實(shí)施例,而不是全部的實(shí)施例?;诒緦?shí)用新型中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本實(shí)用新型保護(hù)的范圍。
如圖1所示:一種基于分布式功能單元的微處理器架構(gòu),包括:
指令譯碼器(instruction decoder),能夠把當(dāng)前需要執(zhí)行的機(jī)器指令解碼成若干微指令(microinstruction),并將微指令發(fā)送到對(duì)應(yīng)的功能單元。
其中,這里每一個(gè)微指令都對(duì)應(yīng)著某個(gè)功能單元提供的一項(xiàng)具體操作(operation)。一個(gè)功能單元提供的操作種類及數(shù)量由該功能單元的設(shè)計(jì)者定義并實(shí)現(xiàn)。但為了保持結(jié)構(gòu)清晰,應(yīng)將相關(guān)或相似的操作集成于同一個(gè)功能單元。這樣也便于對(duì)機(jī)器指令進(jìn)行編碼,例如,應(yīng)將所有浮點(diǎn)數(shù)運(yùn)算集成 到一個(gè)獨(dú)立浮點(diǎn)數(shù)處理單元(FPU)。一個(gè)功能單元A在完成當(dāng)前操作之后,會(huì)將運(yùn)算結(jié)果傳送到另一個(gè)功能單元B作為B執(zhí)行下一個(gè)操作的操作數(shù)(operand)。同理,A執(zhí)行當(dāng)前操作所用到的所有操作數(shù)均是提前由其他的功能單元提供的運(yùn)算結(jié)果。由于某個(gè)操作的多個(gè)操作數(shù)可能會(huì)由若干不同功能單元提供,而每個(gè)功能單元又會(huì)連續(xù)接收到若干的微指令,所以為了讓功能單元能夠正確區(qū)分哪些操作數(shù)是被哪個(gè)微指令需要,必須要為每一個(gè)微指令極其所需的操作數(shù)進(jìn)行編號(hào)。功能單元會(huì)將微指令隊(duì)列(microinstruction queue)里的第一個(gè)微指令取出,然后將其編號(hào)和自己的某個(gè)輸入端口接收到的數(shù)據(jù)所攜帶的編號(hào)進(jìn)行對(duì)比,如果相等,則說(shuō)明該操作數(shù)和當(dāng)前微指令匹配,應(yīng)該接收;否則必須等待編號(hào)正確的操作數(shù)到達(dá)。當(dāng)所需的操作數(shù)全部到達(dá)時(shí),功能單元即可執(zhí)行當(dāng)前微指令。
每一條微指令由六個(gè)部分組成:
執(zhí)行單元,即執(zhí)行該微指令的功能單元;
操作編碼(opcode),即執(zhí)行的具體操作(功能單元設(shè)計(jì)者必須為每一個(gè)操作設(shè)計(jì)具體的操作流程以及所需要的操作數(shù));
目標(biāo)單元,即當(dāng)前操作的結(jié)果應(yīng)被傳送到的功能單元;
目標(biāo)單元輸入端口,即目標(biāo)單元負(fù)責(zé)接收該微指令結(jié)果的具體端口(當(dāng)某個(gè)功能單元僅有一個(gè)端口時(shí),此數(shù)據(jù)可被忽略);
微指令編號(hào)(opid),即該微指令及其操作數(shù)使用的配對(duì)編號(hào)(一個(gè)整數(shù)即可,其寬度可以根據(jù)實(shí)際需要進(jìn)行調(diào)整);
微指令編號(hào)處理標(biāo)識(shí),指示功能單元是否將當(dāng)前操作的結(jié)果的編號(hào)加一。
指令譯碼器內(nèi)部需提供一個(gè)微指令存儲(chǔ)器,用來(lái)對(duì)機(jī)器指令進(jìn)行編碼。注意,此微指令存儲(chǔ)器須為可隨機(jī)讀寫(xiě)的RAM,而并非只讀的ROM,原因?qū)⒃诤竺嬗枰躁U明。每一條機(jī)器指令將會(huì)被編碼成至少一個(gè)微指令。理論上,一個(gè)機(jī)器指令對(duì)應(yīng)的微指令的數(shù)量沒(méi)有上限。在一條機(jī)器指令被解碼的時(shí)候, 指令譯碼器會(huì)將對(duì)應(yīng)的微指令集從微指令存儲(chǔ)器讀出,并給據(jù)微指令里給出的執(zhí)行單元,將微指令發(fā)送至對(duì)應(yīng)的功能單元。
功能單元(functional unit),包括獨(dú)立的硬件模塊,完整的控制邏輯(control logic)和數(shù)據(jù)路徑(data path),并提供完全基于硬件實(shí)現(xiàn)的各種操作。
一個(gè)功能單元所提供的操作理論應(yīng)該是在邏輯上相關(guān)或相似的,這樣可以保持處理器整體結(jié)構(gòu)的清晰明了。但是,一個(gè)處理器設(shè)計(jì)者完全可以根據(jù)實(shí)際的需求來(lái)拆分和整合各個(gè)功能單元,以達(dá)到使性能最大化的目的。例如,可以設(shè)計(jì)一個(gè)同時(shí)提供了快速傅里葉變換(FFT)和逆離散余弦變換(IDCT)的功能單元。但是,如果在實(shí)際應(yīng)用時(shí)發(fā)現(xiàn),兩個(gè)變換經(jīng)常需要被并行使用,那么便可以考慮將這兩個(gè)變換拆分成兩個(gè)獨(dú)立的功能單元,用以提高整個(gè)系統(tǒng)的并行性。一個(gè)功能單元必須要提供下面兩個(gè)標(biāo)準(zhǔn)輸入端口:
微指令端口,即面向指令譯碼器,用來(lái)接收微指令的端口;
數(shù)據(jù)端口,即面向數(shù)據(jù)互聯(lián)模塊,用來(lái)接收由其他功能單元發(fā)送的操作數(shù)。
一條微指令及其所需操作數(shù)需要根據(jù)一個(gè)編號(hào)來(lái)確定其所屬關(guān)系,因此,在上面兩個(gè)端口上要實(shí)現(xiàn)編號(hào)比對(duì)邏輯。除了上述兩個(gè)標(biāo)準(zhǔn)端口以外,一個(gè)功能單元也可以具有專屬端口,用來(lái)完成和外接設(shè)備(peripherals)的互聯(lián),比方說(shuō)外部存儲(chǔ)器(DRAM)控制接口。專屬端口應(yīng)由功能單元設(shè)計(jì)者根據(jù)實(shí)際需要進(jìn)行添加。
一個(gè)功能單元既可使用處理器的主時(shí)鐘信號(hào),亦可使用獨(dú)立的本地時(shí)鐘信號(hào)。本處理器的核心思想即為:全局非同步,而局部同步(globally asynchronous locally synchronous)。這為一款處理器的開(kāi)發(fā)提供了最大的靈活度。因?yàn)?,一個(gè)功能單元設(shè)計(jì)者及其團(tuán)隊(duì)可以完全獨(dú)立的開(kāi)發(fā)一個(gè)功能單元而無(wú)須考慮其他功能單元的具體實(shí)現(xiàn)。功能單元之間的互聯(lián)只通過(guò)數(shù) 據(jù)互聯(lián)模塊實(shí)現(xiàn)。當(dāng)某個(gè)功能單元需要在性能上進(jìn)行改進(jìn)時(shí),其設(shè)計(jì)團(tuán)隊(duì)可以直接將現(xiàn)有版本用改進(jìn)后的優(yōu)化版本(例如通過(guò)增加該功能單元內(nèi)部流水線長(zhǎng)度)替代,而無(wú)需對(duì)處理器其他部分進(jìn)行任何修改。
數(shù)據(jù)互聯(lián)模塊(data interconnection),能夠使不同功能單元之間的數(shù)據(jù)交換。
這里可以使用兩種不同的互聯(lián)結(jié)構(gòu):
共享總線結(jié)構(gòu)(shared bus):即由一條總線連接全部功能單元,并且每次只能由一對(duì)功能單元(master和slave)獨(dú)占該總線;如果使用多條共享總線時(shí),每一條總線不一定要連接全部功能單元,即,可以選出特定的,經(jīng)常需要交互數(shù)據(jù)的功能單元來(lái)單獨(dú)連接的一條共享總線上。這樣可以將總線的數(shù)據(jù)吞吐量(throughput)最優(yōu)化。
交叉互聯(lián)結(jié)構(gòu)(crossbar):即若干對(duì)功能單元可以并行互聯(lián),不必等待總線的空閑周期。
共享總線結(jié)構(gòu)的優(yōu)點(diǎn)是節(jié)省資源,缺點(diǎn)是效率相對(duì)較差,因?yàn)橐坏┮粭l總線被占用,其他功能單元必須等待當(dāng)前傳輸結(jié)束才可能獲得總線使用權(quán)。解決辦法是根據(jù)需要增加額外的共享總線,以保證讓更多的功能單元間可以并行通訊,如圖2所示。
交叉互聯(lián)結(jié)構(gòu)的優(yōu)點(diǎn)是效率高,可以隨時(shí)實(shí)現(xiàn)任意兩點(diǎn)間的互聯(lián)通訊。缺點(diǎn)是消耗較多硬件資源,用以實(shí)現(xiàn)內(nèi)部路由通道,因此,交叉互聯(lián)結(jié)構(gòu)一般對(duì)可連接的功能單元總數(shù)有限制(一般是不可以超過(guò)16個(gè))。解決辦法是減少路由通道數(shù)量,并為需要經(jīng)常互聯(lián)通訊的功能單元建立固定的靜態(tài)路由通道,如圖3所示。一款處理器到底應(yīng)該使用哪種互聯(lián)結(jié)構(gòu),必須由處理器設(shè)計(jì)者根據(jù)實(shí)際需要來(lái)靈活判斷。
微指令分發(fā)網(wǎng)絡(luò)(microinstruction distribution network),將所述微指令從所述指令譯碼器中分發(fā)到對(duì)應(yīng)的功能單元中。
實(shí)施例
假設(shè),某個(gè)處理器將浮點(diǎn)數(shù)處理運(yùn)算單元(floating point unit,以下簡(jiǎn)稱FPU)和寄存器堆(register file,以下簡(jiǎn)稱RF)分別做為一個(gè)獨(dú)立的功能單元。其中,除法器功能單元提供了32位精度的浮點(diǎn)除法運(yùn)算,而寄存器堆提供了隨機(jī)尋址存取功能。那么,浮點(diǎn)數(shù)除法機(jī)器指令:
fdiv r01 r02 r03
將會(huì)被編碼成下面的微指令集:
MI_0(RF,READ_01,FPU,PORT_0,ID,0);
MI_1(RF,READ_02,FPU,PORT_1,ID,0);
MI_2(FPU,DIV,RF,PORT_0,ID,1);
MI_3(RF,WRITE_03,-,-,ID+1,-);
其中微指令MI_0到MI_3的具體含義如下:
MI_0:將RF的地址01內(nèi)的數(shù)據(jù)發(fā)送到FPU的輸入端口0。該數(shù)據(jù)在發(fā)送時(shí)直接使用當(dāng)前可用的ID編號(hào)。末尾的0的意思是直接使用該ID不做任何修改;
MI_1:和MI_0的含義基本相同。區(qū)別是,將RF的地址02內(nèi)的數(shù)據(jù)發(fā)送到FPU的端口1;
MI_2:當(dāng)FPU分別在端口0和1上接收到編號(hào)為ID的操作數(shù)之后,由FPU執(zhí)行除法操作,所得結(jié)果發(fā)送給RF的端口0。發(fā)送結(jié)果使用的編號(hào)必須要進(jìn)行自加一操作,即ID+1;
MI_3:將接收到的編號(hào)為ID+1的數(shù)值寫(xiě)入回RF的地址03。由于,寫(xiě)入操作并不產(chǎn)生結(jié)果,所以,目標(biāo)單元,目標(biāo)單元輸入端口以及微指令編號(hào)處理標(biāo)識(shí)均未設(shè)置。
處理器架構(gòu)針對(duì)不同的硬件實(shí)現(xiàn)(FPGA和ASIC)提供了不同的動(dòng)態(tài)加速的方法。如圖4所示,以FPGA為平臺(tái)的處理器實(shí)現(xiàn)可以采用動(dòng)態(tài)添加硬件加 速器的方法。在性能分析(profiling)階段,可以將一個(gè)特定應(yīng)用里面最常使用并且耗時(shí)最多的程序段(hot traces)予以標(biāo)記,然后,將這些程序段作為高層綜合的輸入來(lái)動(dòng)態(tài)生成功能單元。當(dāng)前,主流的FPGA都支持在運(yùn)行時(shí)對(duì)當(dāng)前系統(tǒng)的某些模塊的動(dòng)態(tài)替換和添加(reconfiguration),因此新生成的功能單元可以動(dòng)態(tài)地添加到一個(gè)正在運(yùn)行的系統(tǒng)中去,從而達(dá)到動(dòng)態(tài)加速的效果。從目前模擬實(shí)驗(yàn)的數(shù)據(jù)來(lái)看,通過(guò)動(dòng)態(tài)添加硬件加速器可以使應(yīng)用的平均運(yùn)行速度提高10倍。
在一個(gè)ASIC處理器上并無(wú)法實(shí)現(xiàn)運(yùn)行時(shí)動(dòng)態(tài)添加加速器,但是,本處理器結(jié)構(gòu)支持另外一種動(dòng)態(tài)加速方式。如圖5所示,該方式的基礎(chǔ)依然是性能分析(profiling),然后,常用程序段(hot traces)會(huì)被在各個(gè)功能單元上進(jìn)行重新調(diào)度(rescheduling),從而為一整個(gè)程序段而非一個(gè)單一的機(jī)器指令來(lái)生成微指令集。重新調(diào)度的過(guò)程就是對(duì)功能單元支持的微指令的一次重新編程。這個(gè)新生成的微指令集會(huì)在運(yùn)行時(shí)動(dòng)態(tài)地寫(xiě)入微指令存儲(chǔ)器。當(dāng)這個(gè)程序段再次需要被執(zhí)行時(shí),指令譯碼器將不再逐條執(zhí)行機(jī)器指令,而是直接執(zhí)行新生成的微指令集。這種動(dòng)態(tài)生成的微指令集省略了幾乎所有冗余的中間步驟,因此,可以極大地提高對(duì)應(yīng)程序段的運(yùn)行速度。一個(gè)簡(jiǎn)單例子便是對(duì)循環(huán)條件的檢查和更新。通常一個(gè)循環(huán)在執(zhí)行過(guò)程中要周期性地檢查一個(gè)步進(jìn)變量的當(dāng)前值。按照正常的執(zhí)行順序,每次該步進(jìn)變量都必須先從寄存器堆里讀出,然后執(zhí)行檢查和更新,最后將更新后的數(shù)值再次寫(xiě)入寄存器堆。而重新調(diào)度之后,可以將對(duì)該步進(jìn)變量的檢查和更新放到一個(gè)專屬的運(yùn)算邏輯單元(ALU)上來(lái)進(jìn)行。這個(gè)變量只需從寄存器堆里被讀出一次,然后在執(zhí)行完一次檢查和更新后,將該變量的值重新發(fā)送到同一個(gè)運(yùn)算邏輯單元的同一個(gè)輸入端口上,而不是寫(xiě)回到寄存器堆。這樣反復(fù)執(zhí)行,直到該步進(jìn)變量達(dá)到某個(gè)臨界值后,將其一次性寫(xiě)回到寄存器堆內(nèi)。通過(guò)這種調(diào)度方式,幾乎省略了運(yùn)算邏輯單元和寄存器堆之間全部的數(shù)據(jù)交換過(guò)程,從而 大大提高了運(yùn)行效率。目前的模擬試驗(yàn)結(jié)果顯示,通過(guò)這種動(dòng)態(tài)重新調(diào)度的方式,可以使應(yīng)用的平均運(yùn)行速度提高3倍。當(dāng)然,此加速方式也適用于以FPGA為硬件平臺(tái)的處理器。
綜上所述,一個(gè)基于本結(jié)構(gòu)的處理器,無(wú)論是采用ASIC還是FPGA作為硬件實(shí)現(xiàn)平臺(tái),均可以做到對(duì)特定應(yīng)用程序的動(dòng)態(tài)加速。這種動(dòng)態(tài)適應(yīng)的能力在高性能運(yùn)算領(lǐng)域,比方說(shuō)圖形圖像加工,人工智能,深度學(xué)習(xí)等領(lǐng)域均可以發(fā)揮無(wú)可比擬的巨大優(yōu)勢(shì)。
對(duì)于本領(lǐng)域技術(shù)人員而言,顯然本實(shí)用新型不限于上述示范性實(shí)施例的細(xì)節(jié),而且在不背離本實(shí)用新型的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現(xiàn)本實(shí)用新型。因此,無(wú)論從哪一點(diǎn)來(lái)看,均應(yīng)將實(shí)施例看作是示范性的,而且是非限制性的,本實(shí)用新型的范圍由所附權(quán)利要求而不是上述說(shuō)明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化囊括在本實(shí)用新型內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。
此外,應(yīng)當(dāng)理解,雖然本說(shuō)明書(shū)按照實(shí)施方式加以描述,但并非每個(gè)實(shí)施方式僅包含一個(gè)獨(dú)立的技術(shù)方案,說(shuō)明書(shū)的這種敘述方式僅僅是為清楚起見(jiàn),本領(lǐng)域技術(shù)人員應(yīng)當(dāng)將說(shuō)明書(shū)作為一個(gè)整體,各實(shí)施例中的技術(shù)方案也可以經(jīng)適當(dāng)組合,形成本領(lǐng)域技術(shù)人員可以理解的其他實(shí)施方式。