<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單芯片的一致多處理(圖)

單芯片的一致多處理(圖)

作者: 時(shí)間:2008-05-20 來(lái)源:網(wǎng)絡(luò ) 收藏

隨著(zhù)SoC設計元件的出現,如MIPS32 1004K系統(CPS),單操作系統條件下的片上對稱(chēng)多(SMP)已經(jīng)成為了一種真正的設計選擇,而系統架構師也需要了解其優(yōu)點(diǎn)和局限性。

任務(wù)越多,越需要并行


復雜的模塊化多任務(wù)嵌入式軟件系統經(jīng)常表現出“偶然發(fā)現的”并發(fā),如圖1所示。該系統的總任務(wù)可能包括多任務(wù)操作,每個(gè)操作都有不同的職責,可滿(mǎn)足一系列不同的輸入需求。如果沒(méi)有分時(shí)操作系統,這些任務(wù)中的每個(gè)都必須在獨立的處理器上運行。在一個(gè)分時(shí)單處理器(uniprocessor)上,任務(wù)可以在交替的時(shí)間片段上運行。在一個(gè)采用SMP操作系統的多處理器上,任務(wù)可以并行地在許多可供使用的處理器上運行。

圖1 并行的多任務(wù)處理

分布式處理


另一種形式的并行處理已經(jīng)成為司空見(jiàn)慣的事情,以至于有時(shí)甚至不被認為是“并行”的,這就是分布式計算,它的網(wǎng)絡(luò )客戶(hù)機/服務(wù)器模型是迄今為止最常見(jiàn)的范例??蛻?hù)機/服務(wù)器編程基本上是一種控制流分解的形式。一個(gè)程序任務(wù)將工作請求連接和發(fā)送給系統中的一個(gè)或多個(gè)專(zhuān)門(mén)任務(wù),該系統被指定執行具體的工作,而不是由這個(gè)程序任務(wù)本身執行所有計算??蛻?hù)機/服務(wù)器編程通常是在LAN和WAN上實(shí)現的,SMP SoC內的任務(wù)之間的通信也是遵循同一個(gè)范例。人們可以利用片上或無(wú)效“環(huán)回”網(wǎng)絡(luò )接口通過(guò)TCP/IP進(jìn)行未經(jīng)修改的客戶(hù)機/服務(wù)器的二進(jìn)制通信,或者更加有效地利用在存儲器中傳遞數據緩存的本地通信協(xié)議。


實(shí)際上,此類(lèi)技術(shù)都可以單獨使用,或者結合使用,以利用給定應用的基于SMP平臺的能力。人們甚至可以構建一種分布式SMP服務(wù)器的數據并行陣列,其中每個(gè)陣列都可以執行一條控制流的流水線(xiàn)。但是,為了有效地實(shí)現這個(gè)方案,可能需要非常大的工作量和數據集。


系統軟件的支持非常關(guān)鍵


在有些SoC系統中,有可能實(shí)現處理器靜態(tài)物理分解任務(wù)的并行性(例如每個(gè)輸入端口有一個(gè)處理器內核),在這樣的SoC系統中,把并行的多個(gè)任務(wù)分配到不同的處理器去處理可以在硬件中完成。這將降低軟件開(kāi)銷(xiāo)和占位面積,但是不能提供靈活性。


同樣,如果嵌入式應用可以被靜態(tài)地分解成客戶(hù)端和服務(wù)器端程序,這些程序通過(guò)片上互連進(jìn)行通信,那末系統連接所需的唯一的系統軟件就是執行處理器間共用協(xié)議的信息傳遞代碼。信息傳遞協(xié)議可提供某些抽象層,可以用來(lái)配置更多或更少的處理器來(lái)運行共用基礎的應用代碼,但是對于任何給定的配置,處理器間的負載平衡就像硬件分區一樣無(wú)聲無(wú)息。為了實(shí)現更加靈活的并行系統編程,需要在一個(gè)共享資源的多處理器系統上完成軟件分布的任務(wù)。

SMP系統的靈活性和適應性


顧名思義,SMP操作系統有一個(gè)對系統“對稱(chēng)”的含義。所有處理器都可以發(fā)現相同的存儲器、相同的I/O器件以及相同的全局操作系統的狀態(tài)。這將使從一個(gè)處理器到另一個(gè)處理器的程序移植變得極其簡(jiǎn)單而有效,如圖2所示的簡(jiǎn)單例子,也將使負載均衡更加容易。無(wú)須額外的編程或系統管理,一套采用時(shí)間分割的單個(gè)CPU上的多任務(wù)程序,將同時(shí)運行于一個(gè)SMP系統的可用CPU之上。如Linux調度程序的SMP調度程序將打開(kāi)和關(guān)閉處理器的程序,一切都以一種公平的方式進(jìn)行。


作為多處理運行的Linux應用不必為了發(fā)揮SMP的并行性而進(jìn)行修改。在大多數情況下,無(wú)須重新進(jìn)行編譯;一個(gè)例外則是與非線(xiàn)程安全庫靜態(tài)連接的二進(jìn)制碼。


SMP Linux環(huán)境可以提供許多工具,有助于系統設計人員調節可用處理器的任務(wù)共享方式。這些任務(wù)可以讓它們的優(yōu)先級上升和下降,可以由運行在處理器上的任意子集加以限制。利用適當核的支持,它們可以請求使用不同的實(shí)時(shí)調度狀態(tài)。


類(lèi)UNIX操作系統總是允許應用程序對任務(wù)的相對調度優(yōu)先級進(jìn)行控制,即使是單處理器分時(shí)系統也是這樣。隨著(zhù)能夠對任務(wù)、任務(wù)組或系統具體用戶(hù)的優(yōu)先級進(jìn)行操作的更復雜機制的出現,傳統上優(yōu)良的外殼命令(shell command)和系統調用已經(jīng)增加到Linux當中,這對評判該操作系統的優(yōu)劣應該是十分必要的。


此外,在多處理器配置方面,所有的Linux任務(wù)都有一個(gè)參數,定義了哪些處理器組(set of processor)可以對任務(wù)進(jìn)行調度。根據默認,這個(gè)參數存在于系統中的整組處理器當中,但是,像優(yōu)先級一樣,這種CPU親合力可以由taskset外殼命令,或者由顯式(explicit system)調用來(lái)操作任務(wù)的“CPU親合力”。

圖2 多處理器資源上的SMP任務(wù)分布

實(shí)現SMP


一個(gè)SMP系統范例要求所有處理器在同一個(gè)地址看到所有的存儲器。對于簡(jiǎn)單而低性能的處理器,這不是太難完成的事情。人們只要在一個(gè)共用存儲器和I/O總線(xiàn)上放置所有處理器的指令提取和裝載/存儲流量就可以了。隨著(zhù)總線(xiàn)很快成為了一個(gè)性能瓶頸,這個(gè)非常簡(jiǎn)單的模型利用增加的處理器迅速而漂亮地解決了這個(gè)問(wèn)題。甚至在單處理器系統中,高性能的嵌入式內核指令和數據的帶寬需求要求在主存儲器及處理器之間使用高速緩存。


采用獨立每個(gè)處理器高速緩存的系統不再只是一個(gè)自然而然的SMP。當一個(gè)處理器的高速緩存包含了存儲器中某一位置的最近保持值(most recent value)的唯一備份時(shí),就會(huì )出現一種基本而危險的不對稱(chēng)。系統必須增加高速緩存協(xié)議以恢復這種對稱(chēng)性。在一個(gè)非常簡(jiǎn)單的系統中,所有處理器都連接到一條共用總線(xiàn),它足以使所有高速緩存控制器監控總線(xiàn),以發(fā)現哪個(gè)高速緩存擁有給定存儲器位置的最新版本。在更先進(jìn)的系統中,如MIPS32 1004K CPS,處理器與存儲器的連接是采用點(diǎn)對點(diǎn)方式連接一個(gè)交換結構,而不是連接到一條總線(xiàn)。因此,高速緩存性需要更加復雜的支持。1004K一致管理器在存儲器處理上加入了一個(gè)全局順序(global order),并生成必要的干預信號,以保持多個(gè)1004K處理器內核的高速緩存的一致性。


因此,1004K處理器可以看到一個(gè)對稱(chēng)的存儲器。像Linux的SMP操作系統可以自由地遷移任務(wù)并動(dòng)態(tài)地平衡處理器負載。


在一個(gè)嵌入式SoC中,整個(gè)計算的大部分時(shí)間可能花在中斷服務(wù)方面。這意味著(zhù)需要控制良好的負載均衡和性能調節,這不僅有助于控制程序任務(wù)的運行地點(diǎn),而且還可以控制執行中斷服務(wù)的地點(diǎn)。Linux操作系統有一個(gè)“IRQ親合力”控制界面,這個(gè)界面允許用戶(hù)和程序指定哪個(gè)處理器用來(lái)服務(wù)一個(gè)給定的中斷。為了便于使用,這個(gè)界面需要底層的系統硬件提供一種方法將中斷有選擇地發(fā)送給處理器。1004K全局中斷控制器為1004K CPS提供了這種能力。


高速緩存一致基礎架構非常有用,不僅是在對稱(chēng)多處理的處理器之間,而且在處理器和I/O DMA通道之間也是如此。雖然如MIPS32的RISC架構有支持基于軟件的I/O一致的特性,但還是需要CPU在每個(gè)I/O DMA操作之前或之后對DMA緩沖器進(jìn)行處理。該處理功能對I/O密集應用的性能有著(zhù)顯著(zhù)的影響。在1004K CPS中,通過(guò)一個(gè)I/O一致單元將I/O DMA連接到存儲器,有助于DMA流量的條理化和與一致裝載/存儲流的整合,從而消除了軟件開(kāi)銷(xiāo)。

采用管道,得到回報


由于1004K處理器VPE對于軟件來(lái)說(shuō)看起來(lái)像成熟的處理器,大到有獨立的中斷輸入,所以,管理多個(gè)內核的同一個(gè)SMP操作系統邏輯可以用來(lái)管理其構成VPE。在最高水平的系統管理方面,全部VPE功能都在運行的雙核1004K系統是一個(gè)4路SMP系統的樣子。為了利用SMP而編寫(xiě)或配置的軟件能夠自然而然地利用多線(xiàn)程,反之亦然。


雖然系統資源的想法仍然是對稱(chēng)的,但事實(shí)上,雙線(xiàn)程爭用一條處理器流水線(xiàn)將比雙線(xiàn)程運行于獨立的內核實(shí)現的性能更低。這種情況在服務(wù)器系統中已經(jīng)存在了許多年,其多線(xiàn)程CPU的一致集群十分常見(jiàn),而1004K的SMP Linux核的配備可以實(shí)現必要的負載平衡的優(yōu)化。如果要優(yōu)化功耗,調度程序可以每次在一個(gè)內核的虛擬處理器上加載運行(load work),從而使其他內核能夠停留在一種低功耗狀態(tài)。

如果是為了優(yōu)化性能,可以首先在不同的內核上展開(kāi)運行(spread work),一旦所有內核都有一個(gè)要運行的動(dòng)態(tài)任務(wù),只需在每個(gè)內核上加載多個(gè)VPE就可以了。

結語(yǔ)


片上多處理可以多種方式進(jìn)行開(kāi)發(fā),從而實(shí)現高性能的SoC。通過(guò)輸入數據或處理功能,可以實(shí)現非常高效的工作靜態(tài)分解,但這也是非常不靈活的。SMP平臺和軟件可以提供一個(gè)非常靈活的高性能計算平臺,以實(shí)現比單處理器更加顯著(zhù)的加速,通常這需要很少的甚至不需任何應用代碼的修改。多線(xiàn)程是對SMP并行性的最好補充,可以最大限度地利用每個(gè)處理器中的流水線(xiàn)資源。MIPS32 1004K一致處理系統在一個(gè)單IP塊中整合了MIPS多線(xiàn)程和一致SMP,以提供可擴展、高密度的嵌入式計算能力。



關(guān)鍵詞: 處理 一致 單芯片

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>