利用高效的編程技術(shù)發(fā)揮多內(nèi)核架構(gòu)優(yōu)勢(shì)
在整個(gè)嵌入式領(lǐng)域,“更多內(nèi)核”已經(jīng)成為設(shè)計(jì)趨勢(shì),一些硬件架構(gòu)可以提供數(shù)十個(gè)內(nèi)核,有些架構(gòu)中的內(nèi)核甚至多達(dá)上千個(gè)。然而,多內(nèi)核設(shè)計(jì)在軟件方面仍存在諸多挑戰(zhàn),在不同架構(gòu)間進(jìn)行應(yīng)用程序的移植并不容易。
在低端嵌入式領(lǐng)域,單內(nèi)核解決方案仍然存在。通過(guò)采用速度更快或帶寬更寬的處理器仍有可能提升系統(tǒng)的功能和性能曲線(xiàn)。在高端領(lǐng)域,多內(nèi)核是必然的發(fā)展方向。這正是雙精度浮點(diǎn)算法經(jīng)常出現(xiàn)并在超級(jí)計(jì)算機(jī)中長(zhǎng)盛不衰的原因。事實(shí)上,臺(tái)式機(jī)和機(jī)架安裝系統(tǒng)(比如Nvidia的產(chǎn)品)正在將這種處理能力普及化。
在討論軟件和多內(nèi)核架構(gòu)時(shí)經(jīng)常提及的另一個(gè)問(wèn)題是虛擬化。并不是所有多內(nèi)核平臺(tái)都支持虛擬化,但虛擬化確實(shí)能帶來(lái)更好的機(jī)會(huì)。雖然虛擬化使得硬件設(shè)計(jì)面臨更多的挑戰(zhàn),但它通常能簡(jiǎn)化軟件和應(yīng)用管理。
SMP服務(wù)器
Xeon Nehalem-EX是Intel公司提供的頂級(jí)8內(nèi)核對(duì)稱(chēng)多處理(SMP)平臺(tái)。像8芯片、64內(nèi)核系統(tǒng)這樣的多芯片解決方案,通常采用高速Q(mào)uickPath點(diǎn)到點(diǎn)互連技術(shù)將處理器和外設(shè)控制器鏈接在一起(圖1)。使用過(guò)帶HyperTransport鏈路的AMD Opteron處理器的工程師,對(duì)這種架構(gòu)非常熟悉。在這兩種情況下,最簡(jiǎn)單的配置是單個(gè)處理器通過(guò)單條高速鏈路鏈接到單個(gè)外設(shè)控制器。
除了提供分布式內(nèi)存子系統(tǒng)外,Intel和AMD還實(shí)現(xiàn)了連貫緩沖非統(tǒng)一內(nèi)存尋址(ccNUMA)技術(shù)。每個(gè)處理器芯片都有自己的內(nèi)存控制器以及一級(jí)、二級(jí)和三級(jí)緩存。任何芯片都可以使用高速鏈路訪問(wèn)其它任何芯片中的內(nèi)存。當(dāng)然,離請(qǐng)求者越遠(yuǎn)的數(shù)據(jù)訪問(wèn)時(shí)間越長(zhǎng)。這些高速鏈路也被用于消費(fèi)設(shè)備,但只有到I/O中心的單條鏈路是必需的。換句話(huà)說(shuō),在共享內(nèi)存訪問(wèn)時(shí)服務(wù)器將在處理器芯片間產(chǎn)生顯著的流量。芯片至芯片流量和緩存管理是高效操作的關(guān)鍵。
HT Assist是AMD最新推出的Istanbul Opteron處理器的一個(gè)重要功能,它通過(guò)優(yōu)化內(nèi)存請(qǐng)求和響應(yīng)過(guò)程來(lái)盡量減少相關(guān)事務(wù)處理的數(shù)量,進(jìn)而釋放出大量帶寬用于處理其它業(yè)務(wù)(圖2)。HT Assist實(shí)際上會(huì)跟蹤數(shù)據(jù)在內(nèi)核和緩存間的移動(dòng),允許請(qǐng)求得到具有所需數(shù)據(jù)的最近內(nèi)核的服務(wù)。
點(diǎn)擊下載清晰大圖
最壞的情況是擁有片外存儲(chǔ)器空間的芯片必須從片外存儲(chǔ)器訪問(wèn)數(shù)據(jù);最好的情況是發(fā)現(xiàn)數(shù)據(jù)正好位于運(yùn)行著需要這個(gè)數(shù)據(jù)的線(xiàn)程的芯片緩存中;中間情況是內(nèi)核從相鄰芯片的緩存中獲取數(shù)據(jù)。使用虛擬化和緩存技術(shù)后系統(tǒng)將變得更加復(fù)雜,并導(dǎo)致數(shù)據(jù)延時(shí)更加難以確定。這在確定性嵌入式應(yīng)用中可能是個(gè)問(wèn)題,但在大多數(shù)服務(wù)器應(yīng)用中問(wèn)題并不十分明顯,因?yàn)檫@種情況下的速度比精細(xì)的確定性更加重要。
編程人員現(xiàn)在都在使用這些平臺(tái),因?yàn)樗鼈兡艽蟠蠛?jiǎn)化編程任務(wù)。同樣,應(yīng)用程序可以使用越來(lái)越多的內(nèi)核,前提是應(yīng)用程序可高效地利用充足的線(xiàn)程。高效使用多內(nèi)核系統(tǒng)并不像表面看起來(lái)那么容易。緩存大小和應(yīng)用程序工作數(shù)據(jù)集中的參考位置會(huì)影響特定算法的運(yùn)行效果。
AMP應(yīng)用處理器
對(duì)稱(chēng)處理(SMP)架構(gòu)對(duì)許多嵌入式應(yīng)用來(lái)說(shuō)非常有用,但非對(duì)稱(chēng)多處理(AMP)也有它的用武之地。AMP配置在很多地方都可以看到,從TI的OMAP(開(kāi)放多媒體應(yīng)用平臺(tái))到飛思卡爾的P4080 QorIQ都有AMP的身影(圖3)。
TI的OMAP 44xx平臺(tái)整合了ARM Cortex-A9、PowerVR SGX 540 GPU、C64x DSP和圖像信號(hào)處理器。每個(gè)內(nèi)核有專(zhuān)門(mén)的功能,處理器之間的通信不是對(duì)稱(chēng)的。OMAP只工作在AMP模式,而P4080的內(nèi)核是SMP系統(tǒng),但也能夠?qū)?nèi)核劃分為AMP模式。8內(nèi)核芯片可以像8個(gè)獨(dú)立內(nèi)核那樣運(yùn)行,在許多配置中也可以聯(lián)合起來(lái)使用(如一對(duì)雙內(nèi)核SMP子系統(tǒng),或四個(gè)單內(nèi)核子系統(tǒng))。
OMAP和P4080在高層架構(gòu)的主要區(qū)別是OMAP功能是固定的,內(nèi)核針對(duì)各自的事務(wù)做了優(yōu)化。這將使編程容易得多,因?yàn)榭梢愿鶕?jù)匹配功能將應(yīng)用程序劃分到特定內(nèi)核。
每個(gè)子系統(tǒng)的性能水平受架構(gòu)的限制,但P4080可以調(diào)整劃分方案,雖然劃分通常是在系統(tǒng)啟動(dòng)時(shí)完成的。系統(tǒng)設(shè)計(jì)師可以調(diào)整P4080中內(nèi)核的分配,前提是有足夠多的內(nèi)核。市場(chǎng)上也有內(nèi)核數(shù)量較少的QorIQ平臺(tái),因此可以選用更經(jīng)濟(jì)的芯片。
IBM的Cell處理器填補(bǔ)了中間的空白。它采用了1個(gè)64位的Power內(nèi)核和8個(gè)增效處理單元(SPE)。所有SPE都是相同的(每個(gè)有256KB的內(nèi)存),它們工作在隔離狀態(tài),這與上述討論的共享內(nèi)存SMP系統(tǒng)有所不同。SPE內(nèi)沒(méi)有緩存,也不支持虛擬內(nèi)存。
對(duì)軟硬件設(shè)計(jì)來(lái)說(shuō),這種方式既有優(yōu)點(diǎn)又有缺點(diǎn)。優(yōu)點(diǎn)為是簡(jiǎn)化了硬件實(shí)現(xiàn),但從多個(gè)角度看都使軟件復(fù)雜化了。例如,內(nèi)存管理受應(yīng)用程序控制,就像內(nèi)核間的通信一樣。數(shù)據(jù)在能夠操作之前必須要移進(jìn)SPE的本地內(nèi)存。完全開(kāi)發(fā)Cell這樣的架構(gòu)很花時(shí)間,因?yàn)樗鼈冇袆e于更傳統(tǒng)的SMP或AMP平臺(tái)。多年來(lái)在像索尼的PlayStation 3這樣的基于Cell的平臺(tái)上所作的軟件改進(jìn)突顯了編程技術(shù)和經(jīng)驗(yàn)的變化。
GPU等專(zhuān)用處理器
改變編程技術(shù)是使用圖形處理單元(GPU)是否成功的關(guān)健。來(lái)自ATI和Nvidia等公司的GPU在單個(gè)芯片內(nèi)有上百個(gè)內(nèi)核,這些GPU可以被整合進(jìn)多芯片解決方案,向開(kāi)發(fā)人員提供上千個(gè)內(nèi)核。例如,集成進(jìn)1U機(jī)箱的4個(gè)Nvidia Tesla T10就可以提供960個(gè)內(nèi)核(圖4)。
對(duì)Tesla或其它任何兼容的Nvidia GPU芯片進(jìn)行編程都極具挑戰(zhàn)性,但類(lèi)似Nvidia的CUDA這樣的架構(gòu)或基于CUDA的運(yùn)行時(shí)利用可以使工作變得更加輕松。部分挑戰(zhàn)來(lái)自于Nvidia GPU的單指令、多線(xiàn)程(SIMT)架構(gòu)。與許多高性能系統(tǒng)一樣,這種GPU喜歡處理數(shù)組數(shù)據(jù)。對(duì)許多應(yīng)用來(lái)說(shuō)這是不錯(cuò)的選擇,但并非都是這樣,這正是GPU經(jīng)常要與多內(nèi)核CPU匹配的原因之一。
另一種并行編程架構(gòu),CUDA和OpenCL(開(kāi)放計(jì)算語(yǔ)言),則完全匹配GPU方法(使用與主處理器分開(kāi)的存儲(chǔ)器)。這意味著數(shù)據(jù)在能被操作之前必須從一個(gè)地方移動(dòng)到另一個(gè)地方。C編程語(yǔ)言有一定擴(kuò)展,但也有限制。例如,它是自由遞歸的,不支持函數(shù)指針。其中一些限制源自SIMT方法。
許多應(yīng)用程序使用CUDA,但與傳統(tǒng)SMP平臺(tái)相比,性能增益有很大的變化,從2倍到100倍不等。造成這種變化的原因是,線(xiàn)程以32為組運(yùn)行時(shí)的效率最高。分支不影響性能,前提是32線(xiàn)程組在同一分支內(nèi)。
像GPU這樣的專(zhuān)用處理器,其采用的方案是同時(shí)提供圖形和多內(nèi)核處理。另外一種方案是使用許多傳統(tǒng)內(nèi)核,如Intel的Larrabee(圖5)。Larrabee使用專(zhuān)門(mén)針對(duì)矢量處理優(yōu)化過(guò)的x86兼容內(nèi)核。
從某種角度看,Larrabee有點(diǎn)類(lèi)似于IBM的Cell處理器。Larrabee內(nèi)核只有32KB的一級(jí)緩存和256KB的二級(jí)緩存可以訪問(wèn)。如果數(shù)據(jù)不在緩存中,必須從內(nèi)存控制器或系統(tǒng)中的另一個(gè)緩存中申請(qǐng),然后數(shù)據(jù)被放進(jìn)內(nèi)核的緩存中,再由應(yīng)用程序繼續(xù)處理。
環(huán)形總線(xiàn)用于內(nèi)核和控制器之間的通信。IBM的Cell單元互連總線(xiàn)(EIB)也是一種環(huán)形總線(xiàn),連接著 SPE和內(nèi)存控制器以及外設(shè)接口。從編程角度看,Larabee的緩存和Cell的SRAM有很大的差異。誠(chéng)然,對(duì)編程人員來(lái)說(shuō),Larrabee看起來(lái)更像是一組連貫緩存的x86處理器。由于其GPU定位,編程人員可以充分利用它對(duì)DirectX和OpenGL的支持。
多內(nèi)核聯(lián)網(wǎng)
多內(nèi)核芯片也是網(wǎng)絡(luò)基礎(chǔ)設(shè)施中的常見(jiàn)元件。處理10Gps的網(wǎng)絡(luò)對(duì)多內(nèi)核芯片來(lái)說(shuō)本身就是很大的挑戰(zhàn)。分析和處理來(lái)自線(xiàn)速網(wǎng)絡(luò)連接的數(shù)據(jù)需要大量的處理資源。
Netronome的NFP-3200網(wǎng)絡(luò)流量處理器包含40個(gè)1.4GHz的內(nèi)核,每個(gè)內(nèi)核可以運(yùn)行8個(gè)線(xiàn)程,因此1個(gè)芯片總共可提供320個(gè)基于硬件的線(xiàn)程。這個(gè)數(shù)量級(jí)與GPU相同,但這些處理器主要用于數(shù)據(jù)包處理。
與IBM的Cell一樣,NFP-3200也有一個(gè)主CPU型控制器,而且是一個(gè)ARM11內(nèi)核。NFP-3200的40個(gè)內(nèi)核也叫做微引擎,兼容Intel的IXP28xx架構(gòu),主要用于網(wǎng)絡(luò)處理。這種兼容性很重要,因?yàn)榇罅看a是針對(duì)這種架構(gòu)開(kāi)發(fā)的。較老的芯片具有較少的內(nèi)核,因此在某種意義上NFP-3200提供的是相同解決方案。
當(dāng)然,為解決問(wèn)題而簡(jiǎn)單地采用更多的內(nèi)核只是其中一種措施。Netronome作了大量改進(jìn),例如支持TCP任務(wù)卸載的增強(qiáng)型微模塊?;ミB速度也更高了,內(nèi)核之間的運(yùn)行速度高達(dá)44Gbps。
Netronome芯片擁有大量的專(zhuān)用處理器,其中包括了用于處理各種安全協(xié)議的加密系統(tǒng)。Netronome的PCI Express接口支持x86處理器經(jīng)常使用的I/O虛擬化功能。它能被移動(dòng)到NFP-3200旁邊,而不是被另外一條網(wǎng)絡(luò)鏈路隔開(kāi)。
與其它多內(nèi)核芯片相比,編程N(yùn)FP-3200通常沒(méi)有太大問(wèn)題,因?yàn)獒槍?duì)IXP28xx系列有大量現(xiàn)成代碼。另外,Netronome提供庫(kù),這使得網(wǎng)絡(luò)處理應(yīng)用程序的創(chuàng)建更像是模塊的堆疊。
Cavium的Octeon II是一種更傳統(tǒng)的SMP多內(nèi)核設(shè)計(jì),有2到6個(gè)64位 MIPS64內(nèi)核,它們通過(guò)一個(gè)交叉開(kāi)關(guān)相連。與Netronome芯片一樣,Octeon II是針對(duì)網(wǎng)絡(luò)和存儲(chǔ)設(shè)備設(shè)計(jì)的。
Octeon II還有一個(gè)RAID 5/6加速器以及用于數(shù)據(jù)包檢查的正則表達(dá)式超有限時(shí)序機(jī)(HFA)。編程O(píng)cteon II與編程大多數(shù)SMP系統(tǒng)相仿。Octeon II可以運(yùn)行諸如Linux的操作系統(tǒng)。
其它多內(nèi)核架構(gòu)
采用更激進(jìn)的多內(nèi)核架構(gòu)會(huì)增加編程事務(wù),但它能為開(kāi)發(fā)人員開(kāi)啟利用新架構(gòu)的機(jī)會(huì)。IntellaSys的SeaFORTH 40C18就屬于這種類(lèi)型(圖6)。它本身的編程語(yǔ)言是VentrueForth,指令長(zhǎng)度實(shí)際上是5位,4個(gè)指令可以壓縮為單個(gè)18位的字(一個(gè)指令只有3位長(zhǎng))。40C18有40個(gè)內(nèi)核,它們有相同的處理單元,并且都有64個(gè)字的RAM和64個(gè)字的ROM。
與具有更多存儲(chǔ)空間的芯片(如Intel的Larrabee或IBM的Cell)相比,對(duì)40C18進(jìn)行編程顯然有很大的區(qū)別。40C18內(nèi)核的功耗不到9mW,而其它兩種芯片在沒(méi)有大散熱器或風(fēng)扇的情況下都無(wú)法正常工作。40C18設(shè)計(jì)用于嵌入式甚至移動(dòng)應(yīng)用。
對(duì)大多數(shù)開(kāi)發(fā)人員來(lái)說(shuō),對(duì)40C18進(jìn)行編程將是不同的體驗(yàn),這不僅因?yàn)镕orth是編程語(yǔ)言。每個(gè)內(nèi)核的小內(nèi)存容量和矩陣互連改變了程序設(shè)計(jì)方法。內(nèi)核通常運(yùn)行將數(shù)據(jù)傳送到一個(gè)或多個(gè)相鄰內(nèi)核的小型函數(shù),因此協(xié)同編程將是大勢(shì)所趨。
即使外部存儲(chǔ)器訪問(wèn)也要求三個(gè)內(nèi)核一起工作,當(dāng)有許多內(nèi)核可以一起工作時(shí)這種方法很管用。40C18還有一種獨(dú)特的能力,它能將4個(gè)指令組成的小程序用一個(gè)字發(fā)送給相鄰內(nèi)核執(zhí)行,因此就有足夠的空間執(zhí)行塊傳送。
XMOS公司的XS1-G4是一種基于32位整數(shù)Xcores的有趣混合產(chǎn)品。每個(gè)Xcore可以處理大量不同的線(xiàn)程,同時(shí)還有一個(gè)基于硬件的事件系統(tǒng)幫助XMOS的軟外設(shè)。與40C18一樣,XS1-G4可以在I/O端口上等待。區(qū)別是XS1-G4處理多個(gè)線(xiàn)程,而IntellaSys芯片處理單個(gè)線(xiàn)程。
開(kāi)發(fā)人員可以使用C語(yǔ)言的擴(kuò)展版本XC發(fā)揮XMOS硬件的最大功效。C語(yǔ)言擴(kuò)展提供了到硬件支持的快捷路徑,其中也包括Xlinks。Xlinks連接芯片中的4個(gè)內(nèi)核,并提供4個(gè)片外鏈路,因此可以連接多個(gè)芯片。芯片內(nèi)部使用一個(gè)開(kāi)關(guān)用于Xlink連接,但硬件和軟件為處理器間通信提供統(tǒng)一接口。
每個(gè)內(nèi)核有64KB的內(nèi)存,這個(gè)容量比40C18大,但比本文提到的一些更高性能的芯片的內(nèi)存容量小。同樣,對(duì)大部分應(yīng)用代碼來(lái)說(shuō)這個(gè)容量是足夠用的,并且允許使用更傳統(tǒng)的線(xiàn)程方法進(jìn)行編程。針對(duì)XMOS芯片的大部分編程工作很可能用傳統(tǒng)的C或C++完成,而不是用XC,后者更傾向用于通信和外設(shè)處理。
XS1-G4不會(huì)向雙精度浮點(diǎn)GPU或其它高端系統(tǒng)提出挑戰(zhàn),但它的整數(shù)和定點(diǎn)DSP支持使得它適用于其它許多音頻和視頻處理功能。鏈接好的XMOS芯片早已在內(nèi)部用來(lái)驅(qū)動(dòng)多個(gè)大屏幕LCD。
多內(nèi)核架構(gòu)還將繼續(xù)保持高速發(fā)展。高效地對(duì)這些內(nèi)核進(jìn)行編程和選擇合適的產(chǎn)品并不容易,但它會(huì)變得越來(lái)越普及,即使是對(duì)嵌入式開(kāi)發(fā)人員而言。傳統(tǒng)應(yīng)用程序?qū)⒉粩嗟匾浦驳狡ヅ洮F(xiàn)有主機(jī)的架構(gòu)上。當(dāng)應(yīng)用程序被重新設(shè)計(jì)或從頭創(chuàng)建時(shí),也許會(huì)有更好的方案產(chǎn)生。
最高點(diǎn)