微處理器和多處理器片上系統(tǒng)MPSOC設(shè)計(jì)的新紀(jì)元
應(yīng)用程序中的許多循環(huán)語句對(duì)一個(gè)數(shù)據(jù)陣列執(zhí)行相同的操作,XPRES編譯器可以將這些循環(huán)語句進(jìn)行向量化,建立一條由多個(gè)相同執(zhí)行部件并行執(zhí)行多個(gè)數(shù)據(jù)項(xiàng)的指令。對(duì)Xtensa處理器增加單指令流多數(shù)據(jù)流SIMD指令與Tensilica的XCC C/C++編譯器是一致的,該編譯器能夠?qū)?yīng)用程序代碼中的內(nèi)循環(huán)展開并且進(jìn)行向量化。通過向量化可以加速循環(huán)語句的執(zhí)行,這通常和增強(qiáng)型指令內(nèi)部SIMD運(yùn)算部件的序號(hào)有關(guān)。
XPRES編譯器采用的第三種加速程序代碼執(zhí)行的技術(shù)是Tensilica的FLIX(可變長度指令擴(kuò)展)技術(shù)。FLIX指令是一種類似于融合和單指令流多數(shù)據(jù)流SIMD指令的多操作指令。然而,F(xiàn)LIX指令包括多個(gè)獨(dú)立的操作,而融合和單指令流多數(shù)據(jù)流SIMD指令則均為相關(guān)多操作。FLIX指令中的每一個(gè)操作都是和其它操作互相獨(dú)立的,XCC C/C++編譯器將彼此獨(dú)立的操作壓縮成一條FLIX格式的指令,而這種壓縮后的指令能夠顯著加速程序代碼的執(zhí)行速度。
采用可配置處理器進(jìn)行多處理器SOC設(shè)計(jì)
在當(dāng)今的應(yīng)用中,很少只用一個(gè)處理器就能滿足系統(tǒng)的性能指標(biāo),即使采用面向目標(biāo)應(yīng)用的可配置處理器也很難做到。然而,多處理器MP指令集、高帶寬接口和小面積使得在一個(gè)片上系統(tǒng)SOC設(shè)計(jì)中可以集成多個(gè)可配置處理器。
片上系統(tǒng)SOC中處理器模塊之間硬件互連機(jī)制的選擇對(duì)系統(tǒng)性能和硅片成本產(chǎn)生很大影響,而且這些硬件互連機(jī)制必須直接支持多處理器MP系統(tǒng)設(shè)計(jì)的互連要求。消息傳遞軟件通信機(jī)制直接影響到數(shù)據(jù)隊(duì)列。類似地,共享存儲(chǔ)器軟件通信模式也影響到基于總線的硬件系統(tǒng)??膳渲锰幚砥骺梢蕴峁┫到y(tǒng)以很大的靈活性,提供對(duì)共享設(shè)備和存儲(chǔ)器進(jìn)行訪問所需的仲裁機(jī)制。共享存儲(chǔ)器總線的基本拓?fù)浣Y(jié)構(gòu)有如下幾種:
1. 通過通用處理器總線訪問系統(tǒng)全局存儲(chǔ)器:微處理器設(shè)計(jì)一個(gè)通用接口以便實(shí)現(xiàn)多種總線事務(wù)處理。在讀操作時(shí),如果處理器認(rèn)為相應(yīng)的數(shù)據(jù)不在本地局部存儲(chǔ)器(根據(jù)地址或者高速緩存CACHE缺失進(jìn)行判斷),那么處理器必須要進(jìn)行全局存儲(chǔ)器訪問。處理器請(qǐng)求總線控制權(quán),當(dāng)控制權(quán)得到應(yīng)答后,處理器通過總線發(fā)送讀操作的目標(biāo)地址。相應(yīng)的設(shè)備(例如,存儲(chǔ)器或者輸入/輸出接口)對(duì)地址進(jìn)行譯碼,然后通過總線對(duì)處理器所需要的數(shù)據(jù)進(jìn)行傳送,如圖3所示。
圖 3: 兩個(gè)處理器通過總線共享存儲(chǔ)器
當(dāng)兩個(gè)處理器通過總線對(duì)全局共享存儲(chǔ)器進(jìn)行訪問時(shí),一個(gè)處理器獲得總線控制權(quán)對(duì)數(shù)據(jù)進(jìn)行寫操作,另一個(gè)處理器就必須稍后才能獲得總線控制權(quán)以便進(jìn)行讀操作。按照這種方式,每個(gè)字傳輸需要兩個(gè)總線操作事務(wù)周期才能完成。該方法需要適度的硬件支持,并且具有較高的靈活性,因?yàn)槿执鎯?chǔ)器和輸入/輸出接口通過公共總線進(jìn)行訪問。然而,對(duì)全局存儲(chǔ)器的使用卻不好根據(jù)處理器和設(shè)備的數(shù)量進(jìn)行度量,因?yàn)榭偩€擁塞會(huì)使得訪問時(shí)間變長和不可預(yù)測(cè)。
2. 通過通用處理器總線對(duì)處理器本地局部存儲(chǔ)器進(jìn)行訪問:可配置處理器可以允許局部數(shù)據(jù)存儲(chǔ)器參與通用總線事務(wù)處理。這些處理器基本上是由本地的處理器使用,并且二者是緊密耦合的。然而,控制局部數(shù)據(jù)存儲(chǔ)器的處理器可以按照總線從設(shè)備的方式進(jìn)行操作,如圖4所示。
圖4: 一個(gè)處理器通過總線訪問第二個(gè)處理器的局部數(shù)據(jù)存儲(chǔ)器
第一個(gè)處理器和第二個(gè)處理器之間訪問時(shí)間的不對(duì)稱性可以保證push 通信,即當(dāng)?shù)谝粋€(gè)處理器向第二個(gè)處理器發(fā)送數(shù)據(jù)時(shí),它將數(shù)據(jù)通過總線寫到第二個(gè)處理器的本地局部存儲(chǔ)器。如果寫操作經(jīng)過緩沖器,那么第一個(gè)處理器不必等到寫操作完成就可以繼續(xù)執(zhí)行后面的操作。因此,到第二個(gè)處理器數(shù)據(jù)傳輸?shù)拈L時(shí)間延時(shí)就被隱藏了。
3. 通過局部總線訪問多口局部存儲(chǔ)器:當(dāng)數(shù)據(jù)流在處理器之間雙向傳輸且對(duì)時(shí)延要求比較嚴(yán)格時(shí),那么對(duì)任務(wù)間通信而言,采用本地共享數(shù)據(jù)存儲(chǔ)器通常是最好的選擇。每個(gè)處理器使用自己的本地?cái)?shù)據(jù)存儲(chǔ)器接口來訪問共享存儲(chǔ)器,如圖5所示。存儲(chǔ)器可以有兩個(gè)物理訪問端口(每個(gè)時(shí)鐘周期可以訪問兩次存儲(chǔ)器),或者通過一個(gè)簡單的仲裁器來控制。
圖5:兩個(gè)處理器共享局部數(shù)據(jù)存儲(chǔ)器
直接互連的數(shù)據(jù)端口
處理器直接相連可以減少通信開銷和時(shí)間。這種連接方式將數(shù)據(jù)從一個(gè)處理器的寄存器傳送到另一個(gè)處理器的寄存器和執(zhí)行功能部件。直接互連的一個(gè)簡單例子如圖6所示。當(dāng)?shù)谝粋€(gè)處理器向輸出寄存器寫一個(gè)數(shù)值(通常作為計(jì)算的一部分)時(shí),該值將自動(dòng)出現(xiàn)在處理器的輸出端口上。同樣的數(shù)值可以立即輸入到第二個(gè)處理器進(jìn)行相應(yīng)的數(shù)據(jù)操作。
圖 6:處理器到處理器之間通過端口直接進(jìn)行訪問
數(shù)據(jù)隊(duì)列
任務(wù)之間通信的最高帶寬機(jī)制是數(shù)據(jù)隊(duì)列的硬件實(shí)現(xiàn)。一個(gè)數(shù)據(jù)隊(duì)列可以使系統(tǒng)獲得每個(gè)時(shí)鐘周期傳輸一次的數(shù)據(jù)速率,或者在寬操作數(shù)位數(shù)的情況下可以達(dá)到每秒10GB的傳輸速率(每個(gè)操作數(shù)幾十個(gè)字節(jié),時(shí)鐘速率幾百兆赫MHz)。生產(chǎn)者和消費(fèi)者之間的握手信號(hào)隱含在處理器之間的接口和數(shù)據(jù)隊(duì)列的頭信息和尾信息之中。
專用處理器允許數(shù)據(jù)隊(duì)列作為指令集擴(kuò)展的一部分直接進(jìn)行硬件實(shí)現(xiàn)。數(shù)據(jù)隊(duì)列可以通過一條專門指令來說明,隊(duì)列可以作為結(jié)果值的目的或者使用輸入隊(duì)列值作為源。這種形式的隊(duì)列接口方式如圖7所示,該隊(duì)列允許用戶建立一個(gè)新的數(shù)據(jù)值,或者每個(gè)隊(duì)列接口使用一個(gè)時(shí)鐘周期。
評(píng)論