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