<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ù)

處理器設計下一步——單芯片同步多處理技術(shù)

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

在指定的組織管理技術(shù)下,要將個(gè)別性能發(fā)揮到極限非但不容易,也沒(méi)有效率。更快的時(shí)脈、更深的管線(xiàn)和更大的緩沖存儲器會(huì )占用更大的芯片面積同時(shí)增加功耗成本,削弱了原本可提升10%性能的效益。有時(shí)候在沒(méi)有選擇的情況下,不得不將時(shí)脈速度提高并將電源和冷卻子系統升級;倘若使用將負載劃分到多個(gè)的方式,不但可以增加最大整體性能限制,也可簡(jiǎn)化設計使其更有效率。

目前有許多系統級芯片(SoC)設計利用器的優(yōu)勢,但它們均針對特定應用或采用松散耦合方式。直到最近,針對軟件方案的SoC設計選項依然受到限制。但MIPS32 1004K同步處理系統(CPS) SoC組件的推出,意味著(zhù)可在單一操作系統環(huán)境下實(shí)現芯片上對稱(chēng)式多重處理(SMP)。

雖然平行編程很容易讓軟件工程師理解,但并非所有現今的程序代碼都是針對平行處理平臺所編寫(xiě),業(yè)界已有許多針對平行軟件的范例,其中有一些對軟件設計人員來(lái)說(shuō)也相當熟悉。

數據平行算法

數據平行算法(Data-parallel algorithm)將數據組劃分到器,甚至到若干個(gè)CPU中。在教科書(shū)中,可將大型資料組看作一個(gè)大量輸入文件或數據數組;但在嵌入式系統中,它可能意味著(zhù)高I/O和事件服務(wù)頻寬。在某些SoC架構中,多個(gè)輸入數據來(lái)源(如網(wǎng)絡(luò )接口端口)可以被靜態(tài)地分配到針對自然平行數據、執行相同驅動(dòng)程序/路由程序代碼的多個(gè)處理器中。

當在單一資料數組或輸入流中利用多處理器性能時(shí),用于分割并管理資料的平行算法就很常見(jiàn)。這種算法對于單處理器來(lái)說(shuō)通常不是最理想的,但由于具備了更靈活的頻寬運算特性,因此可提供效率補償。這些針對平行運算算法均具備靈活性,但要是將一個(gè)工作程序轉換成一個(gè)平行資料算法也許不具任何意義,甚至是相當困難或是不可能實(shí)現的,而這完全取決于程序相依性這類(lèi)因素。如果絕大部分的應用程序運算都僅采用很少的常規運算循環(huán)來(lái)實(shí)現,那么,為提高性能,系統設計師也許要明確地建置資料平行算法。

隨著(zhù)用于PC、工作站和服務(wù)器的多核心X86芯片問(wèn)世,新的數據庫和工具套件應運而生,使得平行算法得以輕易地在少量的處理器上實(shí)現。許多用于嵌入式架構的數據庫和工具套件都是開(kāi)放且可攜的,如MIPS為GCC所做的C/C++以及Fortran擴展,也正逐漸成為標準GNU編譯器的一部分。

平行控制編程

平行控制編程(Control-parallel programming)并非根據輸入,而是根據任務(wù)分割工作。若將一個(gè)以100人制造一臺汽車(chē)為單位的汽車(chē)制造工廠(chǎng)比喻為一個(gè)100信道平行數據算法,并將平行控制程序比喻為一個(gè)具有100人的組裝線(xiàn)工作站,各工作站負責百分之一的工作量,通常組裝線(xiàn)的效率會(huì )比較高,但組裝一臺車(chē)的工作量就只有這么多,這樣的限制在科學(xué)程序代碼擴充到幾千個(gè)處理器時(shí)非常顯著(zhù),然而對于平行SoC架構而言這并不是個(gè)問(wèn)題。

軟件工程師通常將程序劃分成若干個(gè)階段以易于編碼、除錯和維護,并減少指令內存和快取的工作量。通常,平行控制分解早已設在可見(jiàn)的操作系統(OS)任務(wù)層。在類(lèi)似于Unix的系統中,單一命令‘cc’會(huì )依序呼叫C語(yǔ)言前置處理器、編譯器、組譯器和連結程序。它們之中的幾個(gè)可以同時(shí)執行,每個(gè)連續程序利用前一個(gè)階段的輸出作為輸入,在類(lèi)似于Unix這樣的OS內使用檔案或軟件管線(xiàn)。

當獨立分解的執行任務(wù)尚未完成時(shí),需進(jìn)行一些軟件工程,使應用程序在OS和底層硬件上是可見(jiàn)的,并能在任務(wù)間明確地傳遞資料。但是不應該需要對階段算法進(jìn)行重寫(xiě)。粗粒度的任務(wù)分解可透過(guò)檔案、網(wǎng)絡(luò )應用程序(socket)或管線(xiàn)的進(jìn)程通訊來(lái)實(shí)現。而針對細粒度的控制,如Posix執行緒API——pthreads,可由許多OS支持,包括Linux、Windows以及許多實(shí)時(shí)操作系統。

復雜的、模塊化的多任務(wù)嵌入式軟件系統時(shí)常會(huì )展現出意外的同步。整體系統任務(wù)很可能涉及到對應不同輸入的不同責任等多項任務(wù)。若沒(méi)有一個(gè)時(shí)間共享的OS,各任務(wù)就必須在個(gè)別處理器上執行。在一個(gè)時(shí)間共享的單處理器上,它們在輪流時(shí)間中執行;在一個(gè)具有SMP操作系統的多核心處理器上,它們能在可利用的處理器上同步執行。

圖1a:復雜的模塊化多任務(wù)嵌入式軟件系統時(shí)常會(huì )展現出意外的同步。有了一個(gè)時(shí)間共享的OS,各任務(wù)就必須在個(gè)別處理器上執行。在一個(gè)時(shí)間共享的單處理器上,它們在輪流時(shí)間中執行;在具有SMP操作系統的多處理器上,它們在可利用的處理器上同步執行。圖1b:在SMP操作系統中,所有的處理器都面對相同的內存、I/O組件和全域OS狀態(tài)。在單CPU上利用時(shí)間分段執行的多任務(wù)程序,將能同時(shí)在一個(gè)SMP系統中的CPU上執行。

分布式處理

分布式典型運算在網(wǎng)絡(luò )客戶(hù)服務(wù)器模式中很常見(jiàn),它在某些時(shí)候不被認為是‘平行’的??蛻?hù)端服務(wù)器程序設計基本上是一種控制流程分解的形式。程序任務(wù)并不是獨自執行所有的運算,而是將工作請求發(fā)送到針對特定工作設計的特殊系統任務(wù)??蛻?hù)端服務(wù)器程序設計大多都在LAN和WAN上完成,但SMP SoC也遵循相同的范例。未作修改的客戶(hù)端服務(wù)器二進(jìn)制數據可透過(guò)芯片上的TCP/IP或空回繞網(wǎng)絡(luò )(loopback network)接口進(jìn)行通訊,或者使用更有效率的方法,利用區域通訊協(xié)議在內存中傳遞緩沖資料。

這些方法可能會(huì )被單獨或組合使用,以藉助SMP的性能優(yōu)勢。有人甚至可能會(huì )建構一個(gè)分布式SMP服務(wù)器的平行數據數組,且各數組均建置一個(gè)控制流程管線(xiàn)。

在SoC系統中,可以對處理器的靜態(tài)實(shí)體分解任務(wù)進(jìn)行平行處理,處理器的平行任務(wù)可于硬件中完成,這可以減少軟件開(kāi)銷(xiāo)和實(shí)體尺寸,但卻不能提供靈活性。

如果可以將一個(gè)嵌入式應用靜態(tài)地分解成客戶(hù)端和服務(wù)器,并通過(guò)芯片互連進(jìn)行通訊,那么只需要使用信息傳遞程序代碼建置一個(gè)共享協(xié)議,以便將系統互相連系。信息傳遞協(xié)議可提供一個(gè)抽象層,使或多或少的處理器配置都能執行一般的應用程序代碼,但無(wú)論任何配置,處理器的負載平衡就如同硬件分割一樣是靜態(tài)的。要達到更靈活的平行系統程序設計,可利用具有共享資源多核心處理器系統上的軟件任務(wù)分配來(lái)實(shí)現。

在SMP操作系統中,所有的處理器都面對相同的內存、I/O組件和全域OS狀態(tài),這使得處理器間的程序移轉更簡(jiǎn)單、更有效率,也更容易平衡負載。不需要額外的編程或系統管理,在單CPU上利用時(shí)間分段執行的多任務(wù)程序,將能同時(shí)在一個(gè)SMP系統中的CPU上執行。如同Linux,一個(gè)SMP的排程器可切換處理器的程序。

執行多個(gè)處理程序的Linux應用程序不需要修改,就可以利用SMP平行特性,而且通常不需要進(jìn)行重新編譯。SMP Linux環(huán)境為可用處理器之間的調整提供了許多工具,如提高/降低任務(wù)的優(yōu)先級,或是對于在處理器子集上執行任意任務(wù)加以限制。要使用不同的實(shí)時(shí)排程體制,必須要有適當的核心支持。

類(lèi)似Unix的OS能為應用程序提供一些針對相關(guān)任務(wù)優(yōu)先級排程的控制,甚至在單核心處理器時(shí)間共享系統中也是如此。傳統的外部命令和系統呼叫指令在Linux系統中被強化,藉由更精致的機制排定任務(wù)優(yōu)先級、任務(wù)組或特定系統使用者。另外,在多核心處理器配置中,任一Linux任務(wù)都具有一個(gè)參數,用來(lái)指定那一組處理器可排定任務(wù)。預設參數即為整個(gè)系統處理器組,但這種具有類(lèi)似于CPU的系統處理器組卻是可控制的。

SMP范例要求所有處理器找尋所有相同地址下的內存;對于低性能的處理器,必須透過(guò)將所有處理器的指令預取和加載/儲存流通量,置放在一個(gè)共享的內存和I/O總線(xiàn)上來(lái)達成。然而這種模式隨著(zhù)處理器的增加而失去效用,因為總線(xiàn)會(huì )成為瓶頸。即使在單核心處理器系統中,高性能嵌入式核心的指令和數據頻寬需求也支配了主存儲器和處理器間的緩沖存儲器。

在一個(gè)每顆處理器均具備獨立快取的系統中,其本質(zhì)上已不屬于SMP,當一個(gè)處理器的快取保存了內存中唯一一個(gè)最近位置值的復制數據時(shí),這時(shí)不對稱(chēng)就產(chǎn)生了,必須加入快取一致性協(xié)議來(lái)恢復對稱(chēng)。

在一個(gè)所有處理器都連接到一個(gè)公共總線(xiàn)的簡(jiǎn)單系統中,快取控制器可監控總線(xiàn),以得知哪一個(gè)高速緩存保存了指定內存位置的最新版本。在更先進(jìn)的系統中,是利用交換結構的點(diǎn)對點(diǎn)的連接將處理器連接到內存,因此快取一致性需要更高度的支持。一致性管理單元應該對內存執行施加全域指令,產(chǎn)生干涉訊號來(lái)維護處理器核心間的高速緩存一致性。

像Linux這樣的SMP OS可自由地轉移任務(wù),動(dòng)態(tài)地均衡處理器負載。在嵌入式SoC中,絕大部份的整體運算可以在中斷服務(wù)中執行。好的負載均衡和性能調整必須對發(fā)生中斷服務(wù)的地方進(jìn)行控制。Linux OS具有一個(gè)類(lèi)似于IRQ的控制接口,可讓使用者和程序確認哪一個(gè)處理器負責指定的中斷服務(wù)。

快取憶體一致性基礎架構很實(shí)用,不僅在SMP的處理器間,在處理器和I/O DMA信道之間也相當有用。若是使用軟件的方式,便需要在每個(gè)I/O DMA作業(yè)之前或之后利用CPU來(lái)處理DMA緩沖器,對于I/O密集的應用而言,性能將大受影響;而使用I/O一致性硬件將I/O DMA連接到內存的方式,可以對DMA串流進(jìn)行排序,并與一致的加載/儲存流程整合在一起,免除了軟件的開(kāi)銷(xiāo)。

快取一致性管理單元應該對處理器、I/O和內存間的內存串流施加命令,這可增加處理器內存存取時(shí)間的周期,透過(guò)管線(xiàn)停滯產(chǎn)生處理器周期損失的結果。然而,一些如在單一核心上使用硬件多執行緒的方法,可允許單核心執行并行的指令串流,以增加管線(xiàn)的效率。

各核心的執行緒看起來(lái)就如同OS軟件中完善的CPU,包括具有獨立的中斷輸入。執行緒共享相同的緩沖存儲器和功能單元并插入到它們的管線(xiàn)執行中。若一個(gè)執行緒停滯了,另一個(gè)可以繼續執行,讓一致性?xún)却孀酉到y延遲周期循環(huán)下去,否則將會(huì )遺失。管理多核心的相同SMP OS可以管理它們的硬件執行緒,針對SMP編寫(xiě)的軟件可運用多執行緒處理,反之也然。

若兩個(gè)執行緒同時(shí)爭取一個(gè)管線(xiàn),其性能相較于在許多獨立核心上兩個(gè)執行緒來(lái)得更低,應該對SMP Linux核心進(jìn)行負載均衡最佳化。對于功耗最佳化,排程器可以將工作一次一個(gè)加載到一個(gè)核心的虛擬處理器上,使其它的處理器處于低功耗狀態(tài)。在性能最佳化方面,可以將工作分配到許多核心上,然后將多執行緒加載到每個(gè)核心中,直到所有的核心都有一個(gè)進(jìn)展中的任務(wù)為止。

利用芯片上多處理功能可實(shí)現高SoC性能。SMP平臺和軟件提供了一個(gè)具有靈活性的高性能運算平臺,能大幅提升單一處理器的速度,而這通常只需要稍微、或者根本不需要修改應用程序代碼。



關(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>