嵌入式開發(fā)技巧:利用編程技術發(fā)揮多內核架構優(yōu)勢
在整個嵌入式領域,“更多內核”已經成為設計趨勢,一些硬件架構可以提供數十個內核,有些架構中的內核甚至多達上千個。然而,多內核設計在軟件方面仍存在諸多挑戰(zhàn),在不同架構間進行應用程序的移植并不容易。
本文引用地址:http://m.butianyuan.cn/article/201609/303646.htm在低端嵌入式領域,單內核解決方案仍然存在。通過采用速度更快或帶寬更寬的處理器仍有可能提升系統(tǒng)的功能和性能曲線。在高端領域,多內核是必然的發(fā)展方向。這正是雙精度浮點算法經常出現并在超級計算機中長盛不衰的原因。事實上,臺式機和機架安裝系統(tǒng)(比如Nvidia的產品)正在將這種處理能力普及化。
在討論軟件和多內核架構時經常提及的另一個問題是虛擬化。并不是所有多內核平臺都支持虛擬化,但虛擬化確實能帶來更好的機會。雖然虛擬化使得硬件設計面臨更多的挑戰(zhàn),但它通常能簡化軟件和應用管理。
SMP服務器
Xeon Nehalem-EX是Intel公司提供的頂級8內核對稱多處理(SMP)平臺。像8芯片、64內核系統(tǒng)這樣的多芯片解決方案,通常采用高速 QuickPath點到點互連技術將處理器和外設控制器鏈接在一起(圖1)。使用過帶HyperTransport鏈路的AMD Opteron處理器的工程師,對這種架構非常熟悉。在這兩種情況下,最簡單的配置是單個處理器通過單條高速鏈路鏈接到單個外設控制器。
除了提供分布式內存子系統(tǒng)外,Intel和AMD還實現了連貫緩沖非統(tǒng)一內存尋址(ccNUMA)技術。每個處理器芯片都有自己的內存控制器以及一級、二級和三級緩存。任何芯片都可以使用高速鏈路訪問其它任何芯片中的內存。當然,離請求者越遠的數據訪問時間越長。這些高速鏈路也被用于消費設備,但只有到 I/O中心的單條鏈路是必需的。換句話說,在共享內存訪問時服務器將在處理器芯片間產生顯著的流量。芯片至芯片流量和緩存管理是高效操作的關鍵。
HT Assist是AMD最新推出的Istanbul Opteron處理器的一個重要功能,它通過優(yōu)化內存請求和響應過程來盡量減少相關事務處理的數量,進而釋放出大量帶寬用于處理其它業(yè)務(圖2)。HT Assist實際上會跟蹤數據在內核和緩存間的移動,允許請求得到具有所需數據的最近內核的服務。
最壞的情況是擁有片外存儲器空間的芯片必須從片外存儲器訪問數據;最好的情況是發(fā)現數據正好位于運行著需要這個數據的線程的芯片緩存中;中間情況是內核從相鄰芯片的緩存中獲取數據。使用虛擬化和緩存技術后系統(tǒng)將變得更加復雜,并導致數據延時更加難以確定。這在確定性嵌入式應用中可能是個問題,但在大多數服務器應用中問題并不十分明顯,因為這種情況下的速度比精細的確定性更加重要。
編程人員現在都在使用這些平臺,因為它們能大大簡化編程任務。同樣,應用程序可以使用越來越多的內核,前提是應用程序可高效地利用充足的線程。高效使用多內核系統(tǒng)并不像表面看起來那么容易。緩存大小和應用程序工作數據集中的參考位置會影響特定算法的運行效果。
AMP應用處理器
對稱處理(SMP)架構對許多嵌入式應用來說非常有用,但非對稱多處理(AMP)也有它的用武之地。AMP配置在很多地方都可以看到,從TI的OMAP(開放多媒體應用平臺)到飛思卡爾的P4080 QorIQ都有AMP的身影(圖3)。
TI的OMAP 44xx平臺整合了ARM Cortex-A9、PowerVR SGX 540 GPU、C64x DSP和圖像信號處理器。每個內核有專門的功能,處理器之間的通信不是對稱的。OMAP只工作在AMP模式,而P4080的內核是SMP系統(tǒng),但也能夠將內核劃分為AMP模式。8內核芯片可以像8個獨立內核那樣運行,在許多配置中也可以聯合起來使用(如一對雙內核SMP子系統(tǒng),或四個單內核子系統(tǒng))。
OMAP和P4080在高層架構的主要區(qū)別是OMAP功能是固定的,內核針對各自的事務做了優(yōu)化。這將使編程容易得多,因為可以根據匹配功能將應用程序劃分到特定內核。
每個子系統(tǒng)的性能水平受架構的限制,但P4080可以調整劃分方案,雖然劃分通常是在系統(tǒng)啟動時完成的。系統(tǒng)設計師可以調整P4080中內核的分配,前提是有足夠多的內核。市場上也有內核數量較少的QorIQ平臺,因此可以選用更經濟的芯片。
IBM的Cell處理器填補了中間的空白。它采用了1個64位的Power內核和8個增效處理單元(SPE)。所有SPE都是相同的(每個有256KB的內存),它們工作在隔離狀態(tài),這與上述討論的共享內存SMP系統(tǒng)有所不同。SPE內沒有緩存,也不支持虛擬內存。
對軟硬件設計來說,這種方式既有優(yōu)點又有缺點。優(yōu)點為是簡化了硬件實現,但從多個角度看都使軟件復雜化了。例如,內存管理受應用程序控制,就像內核間的通信一樣。數據在能夠操作之前必須要移進SPE的本地內存。完全開發(fā)Cell這樣的架構很花時間,因為它們有別于更傳統(tǒng)的SMP或AMP平臺。多年來在像索尼的PlayStation 3這樣的基于Cell的平臺上所作的軟件改進突顯了編程技術和經驗的變化。
GPU等專用處理器
改變編程技術是使用圖形處理單元(GPU)是否成功的關健。來自ATI和Nvidia等公司的GPU在單個芯片內有上百個內核,這些GPU可以被整合進多芯片解決方案,向開發(fā)人員提供上千個內核。例如,集成進1U機箱的4個Nvidia Tesla T10就可以提供960個內核(圖4)。
對Tesla或其它任何兼容的Nvidia GPU芯片進行編程都極具挑戰(zhàn)性,但類似Nvidia的CUDA這樣的架構或基于CUDA的運行時利用可以使工作變得更加輕松。部分挑戰(zhàn)來自于 Nvidia GPU的單指令、多線程(SIMT)架構。與許多高性能系統(tǒng)一樣,這種GPU喜歡處理數組數據。對許多應用來說這是不錯的選擇,但并非都是這樣,這正是 GPU經常要與多內核CPU匹配的原因之一。
評論