多核的多重挑戰(zhàn)——新聯(lián)盟在編制多核通信API的規(guī)范
摘要: 本文從定義、結構差異、CAPI以及嵌入式軟件的角度介紹了多核處理器技術。
關鍵詞: 多核;對稱;非對稱;CAPI
是對還是錯?目前所稱的多核處理器僅是處理器廠家和IP供應商為多賣芯片和內(nèi)核而制造的過渡性熱炒。將單核直接倍增用于臺式計算機及服務器的這種多核處理器芯片的所謂開發(fā)技術也在直接推向嵌入式系統(tǒng)。如果相信會刊上的這類關于多核處理器的言語,那么等將來有一天知曉對多核處理器性能的真實要求時,定會大為震驚。真實的多核處理器原本指的是一種關于未來微處理器的新技術。目前多核的欺騙確實能夠多賣芯片和內(nèi)核,而且在性能和功耗方面也能夠表現(xiàn)出某些期望的實用效果。但不幸的是,多年來用于臺式機和服務器中使用上述直接的或稱無痛倍增式的多核技術對于嵌入式的使用幫助有限。為深入研究新型多核結構的挑戰(zhàn),最近一些公司成立了一個非營利性的多核聯(lián)盟的組織,其宗旨在于協(xié)助嵌入式工業(yè)解決彈片式多核處理器的共性難題。該組織著手解決的第一個挑戰(zhàn)是彈片多內(nèi)核之間的通信難題?,F(xiàn)正在開發(fā)核間通信用的API規(guī)范。因該聯(lián)盟尚未正式獲準注冊,所以其成員現(xiàn)在不便公布。然而,提出申請并已繳納首次會費的公司至少已有15個。
多核的多重含義
首先應該給多核下個定義。 多核存在多種定義,尤其不幸的是,多核已被市場頻頻濫用,乃至被責之為一種騙局。
多核聯(lián)盟認為單片的多核器件應當存在兩個及以上的自治處理單元。 自治或自主是處理單元的重要條件。按此定義,凡主機流程中有協(xié)處理器的系統(tǒng)便被排斥在多核處理器之外,而與主機連接著執(zhí)行自己指令流的DSP核的則是多核系統(tǒng)。這是定義中的簡明部分。
若論及AMP(非對稱處理)與SMP(對稱處理), 同構與異構,存儲器共用與分布等結構形式,簡明定義將被突破。
多核處理中的SMP是含有兩個及以上的場合,各有同樣芯片,同結構的核,運行同樣的軟件。SMP可共用內(nèi)存及緩存粘接部分。SMP使用同構的核,盡管同構的內(nèi)核再不必一定是SMP。 若內(nèi)部是同構的核,但各核運行的不是相同的操作系統(tǒng),那就變成非對稱多處理(AMP)。AMP系統(tǒng)也可以用異構的核和共用存儲接口或使用分布存儲器。有時,AMP與NUMA(非均一存儲器結構)可以看作同義詞。任何情況下,同構或異構核都可構成多核處理器,多核處理器都可以按SMP(對稱)或AMP (非對稱)模式運行。
往后,弄清每個嵌入式多核處理器的構成十分重要,因不同要求有不同的構成。 Freescale 和Intel以高端的工業(yè)和通信應用為目的,選用同構雙核的嵌入式多核結構。Freescale 、ST和TI公司以各類多媒體消費電子產(chǎn)品為目標,使用異構多核嵌入式芯片,如Freescale的i.MX 和 ST的 Nomadik。其他公司,如PicoChip Design 和Connex Technology公司構建的則是具有數(shù)十、數(shù)百乃至數(shù)千個核的同構或異構多核處理器。這些本質上差異巨大的多核處理器,在軟件編程和硬件的高并行度方面都更加的專業(yè)化。
AMP 與 SMP 更多的差異
關于AMP或SMP的優(yōu)缺點的爭論,從通用計算領域的多計算機與多處理器開始,長期以來一直在爭辯和磋商。雖然持續(xù)了數(shù)十年,依然沒見明確的贏家浮出水面。兩種方案的上下高低說不清道不明,最后由應用的需要為準各行其是?,F(xiàn)在,這場爭論又傳遞給了嵌入式。
使用SMP,從應用角度看,操作系統(tǒng)掩蓋了CPU結構的優(yōu)劣并提供一些附加的功能。能夠支持SMP的操作系統(tǒng)有許多,包括實時操作系統(tǒng)。其中既有商用的又有開放源碼的。 SMP 的編程較 AMP 容易,盡管SMP的多線程編程也較難。已知軟件的價格在項目開發(fā)中占有相當?shù)臄?shù)目。另外,SMP因硅粒面積較大、耗能和保持高速緩存的粘合復雜等問題,素有高價方案之名。又有連接帶寬、同步、鎖定等因素加大內(nèi)核的開銷, 使SMP的可伸縮性受到限制。再有,移動式的SMP系統(tǒng),因需高度使用片上的網(wǎng)絡,多核的頻繁連接耗費更多寶貴的電力。高速緩存的粘合,引發(fā)SMP系統(tǒng)產(chǎn)生不可預期的存取延時,使一些實時應用系統(tǒng)無法接受。SMP系統(tǒng)較長的存取時間,即使可以采用硬件的多線程進行彌補,依然會產(chǎn)生性能的下降。SMP系統(tǒng)的伸縮性的不良,當核的使用數(shù)量增加時,會有更多的核由于等待線程資源而使性能下降。
AMP,在有硬件的支持條件下,功耗、硅粒面積等方面有所改善,效率比SMP高。按傳統(tǒng)的說法,AMP的編程較難。一般來說,將應用程序分割成松耦合的程序段,再映射給分布的AMP硬件結構并非是一件輕松的事。一些倡導者曾爭辯說,應當給AMP創(chuàng)造能夠優(yōu)化程序分段的健康生態(tài)環(huán)境。然而想要將多個程序段匯集成具有競爭能力的整體,依然并非易事。但是,當片上的的多核數(shù)目增長到一定程度時,采用SMP和AMP混合方案似乎更為可行。
多種存儲器結構也是問題
多核結構也可以按存儲器結構形式和通信采用的機制來討論。
對于共用存儲器結構多核系統(tǒng),傳統(tǒng)上多采用SMP編程模式。每個核都可以訪問到全局地址空間中的所有存儲器。訪問共用存儲器的典型方法是通過總線,使用查詢的控制機制,來避免多個核同時訪問同一個存儲器。為使片上的每一個核都能夠訪問到所有的存儲器,這是一種最直接明了的方法。另外,共用存儲結構可以使用引用方式傳遞數(shù)據(jù),數(shù)據(jù)不必真實地移動。當太多的核同時存取時,共用存儲器會變成瓶頸。傳統(tǒng)的SMP編程模式,不太能夠適應多核系統(tǒng)處理器。因為SMP傳統(tǒng)編程模式假定,有均一的存取結構和緩存等機制。SMP的功耗不理想,在伸縮方面也達不到嵌入式多核系統(tǒng)期望的數(shù)十乃至數(shù)百個核的水平。SMP頻繁地同步對于多數(shù)嵌入式多核系統(tǒng)是過度的耗費。嵌入式多核系統(tǒng)需要適合流式的通信和編程,而SMP對于流模式卻笨拙不靈。
分布式結構包括從全球英特網(wǎng)、廣域網(wǎng)(WAN)到局域網(wǎng)(LAN),服務器、含有各種處理內(nèi)核的單芯片器件。對于分布存儲的多核系統(tǒng),各核都有自己的局部存儲器。盡管可能有全局存儲地址空間,但需要各種形式的信息傳輸和資源同步機制才能通信。具有自己局部存儲器的核不必與其它核分享存取以求效率與支持伸縮。當某個核要求從其它單個或多個核取得數(shù)據(jù)或命令時,必須在它們之間進行同步,而且數(shù)據(jù)必須物理地在處理器間移動而取代引用。并行編程支持便攜形態(tài)的信息傳送。分布式的編程通常比多線程(但它在SMP系統(tǒng)中能工作的很好)編程容易。然而,信息傳輸所需代碼大于并行傳輸?shù)墓灿么a。信息傳輸方式最初就是為串行通信過程(CSP)而設計的。從串行通信的字眼上就可聯(lián)想到,它不會運行于現(xiàn)代要求緊湊代碼的科學應用上面,更不用說用到嵌入式可伸縮的系統(tǒng)上了。
為了支持這些多種不同存儲和通信結構,多年來開發(fā)了多種API標準。其中有稱之為OpenMP(開放多處理)和MPI(信息傳輸接口) 的兩個標準。
MPI是大范圍分布計算系統(tǒng)中廣為應用的信息傳輸API。它可用于多種分布的存儲結構,因而也適宜于移動系統(tǒng)。每個運行的硬件都可自行優(yōu)化,因而它又是高速的。 MPI雖然功能強大,但是復雜。要是把各種功能都發(fā)揮出來,單片多核上的內(nèi)存遠遠不足,同時計算開銷之大也使存儲系統(tǒng)時延過大。
開發(fā)更快的通信API
處理器間的通信標準盡管很多,但是沒有一個是為近鄰分布(緊耦合)、存儲緊湊、性能約束苛刻的嵌入式多核的系統(tǒng)所設計的。在嵌入式世界里,多數(shù)的應用在性質上是非對稱的。多核系統(tǒng)可以在同一個單芯片內(nèi)使用異構的核,或是在同構核上運行不同的操作系統(tǒng)而成為非對稱結構,或者在同一芯片上令二者共存。
為應對向多核系統(tǒng)的轉移,業(yè)界同意抽象化并發(fā)概念,令其通用、簡單、有效,直觀地表達為一組編程用的API。這即是多核協(xié)會的宗旨。 編寫嵌入式多核系統(tǒng)的規(guī)范時,應對資源管理(核、存儲、連接、I/O),核間通信,和片內(nèi)行為的同步等有所陳述。編寫API不應只針對單一操作系統(tǒng),或單一的SMP操作系統(tǒng)。當異構多核系統(tǒng)跨越多個核運行多個操作系統(tǒng)時,需要考慮任一操作系統(tǒng)均不能操作的資源。硬件加速器不運行任何操作系統(tǒng),僅依靠當時運行核的操作系統(tǒng)對它的交互作用來工作。硬件加速器更加重了這種系統(tǒng)的復雜性。
聯(lián)盟已經(jīng)著手編制關于嵌入式分布基礎通信方面的信息傳輸和資源管理的API。內(nèi)部稱它為通信API(即CAPI)。CAPI的目標系統(tǒng)包括多維異構核,片上連接,存儲器,操作系統(tǒng),軟件開發(fā)工具,和編程語言。CAPI是關于API的編寫規(guī)范,而并非是其實現(xiàn)。聯(lián)盟的成員可以自由地參照它完成自己所需處理器結構和選用操作系統(tǒng)的CAPI實現(xiàn)。
盡管有了多處理器編程的MPI和OpenMP工業(yè)標準,但其初始目標尚只集中于大型SMP分布系統(tǒng)及個別特定的應用領域(如科學計算)。
關于伸縮性,其CAPI的限制比其他標準的目標更多一些。再有,對比于應用方面,其CAPI更為通用化一些。
如圖1所示,CAPI形成單獨的一層,其上可以是應用層或開發(fā)者構建的抽象層。為性能最佳,將核間通信、同步和資源分配劃出,由應用層和CAPI層直接交互,跨過一系列耗時的操作系統(tǒng)的調用。 CAPI有一長串要支持的獨特性能和函數(shù)。
圖1 CAPI形成單獨的一層,其上可以是應用層或開發(fā)者構建的抽象層。為性能最佳,將核間通信、同步和資源分配劃出,由應用和CAPI直接交互,跨過一系列耗時的操作系統(tǒng)的調用。圖中給出的是兩個核的情況。
編寫軟件想著未來
許多支持 SMP 的 RTOS 透明地平衡多處理器間的工作負擔,免除了再寫這部分軟件。聯(lián)盟希望把這種方便也引入 AMP 系統(tǒng),盡管開發(fā)這部分軟件并不輕松。開發(fā)應用軟件的主要挑戰(zhàn)在于設計的重用和程序的快捷。 編程人員在編程時更多地致力于優(yōu)化、快速和重用,并不關心對不同硬件結構適應性、市場的需要和工業(yè)標準的要求等等。一個普通的硬件的改變可能牽聯(lián)到增加很多個核,甚至不同的處理器。相應地,還會涉及軟件的生命周期。開發(fā)者需要維護巨大的代碼庫和曾經(jīng)延續(xù)過多少代的產(chǎn)品演化。對于主機的處理器,若使用的是相當穩(wěn)定和標準化的操作系統(tǒng),將有助于開發(fā)可重用和可重復映射的軟件。 但是現(xiàn)在的焦點已轉移到居于操作系統(tǒng)之上的應用構架。多媒體的應用構架如OpenMax,GStreamer和 Direct Show對于編寫軟件有非常大的幫助。 然而,多數(shù)嵌入式的軟件是為特殊功能而運行在專用的處理器上,通常并無符合標準的操作系統(tǒng)。在如此情況之下,映射和快速都變成十分艱難的問題。今天,多數(shù)嵌入式應用都存在固有的并行性,等待著程序員去開發(fā)。它們向SMP 結構映射比較容易,而對 AMP 至今仍是挑戰(zhàn)。新浮出水面的進程間通信 (IPC) 標準解決這類問題很有幫助,多核聯(lián)盟也正在開發(fā)中。它可以編寫出將來對現(xiàn)行結構上的舊軟件能夠予以修改的軟件,并且將其轉移到 AMP。 若使用CAPI則必須修改軟件,為使得移動容易,可能還需重新構建成松度的耦合才行。CAPI還將提供源代碼的移植和重用,令結構獨立和伸縮。甚至還可以設想,用這些特點將CAPI變成一個構架,用于評價程序套件EEMBC之中。
更好的中間件即將面世
面向消息的中間件能增加應用的互操作性、移植性和靈活性。 它能夠將應用程序在多個異構處理器核之間進行分布。 它能夠通過將每個操作系統(tǒng)的細節(jié)對多操作系統(tǒng)應用中的其他操作系統(tǒng)隔離開來,減少編程的復雜性。
實現(xiàn)消息傳送中間件的典型形式,是采用中間件的軟件堆棧。CAPI是使用消息傳送API中間件的一例子。盡管CAPI的重要性極其關鍵,但它處于中間件堆棧的底層,堆棧中的一切高層中間件都是以它為基礎演進而來。PolyCore 軟件的 Poly-Messenger是消息傳送中間件的一個例子。等CAPI完成之后,期望為PolyCore能夠提供一套具備映射和配置能力的Poly-Messenger CAPI。它為多核系統(tǒng)提供的是一套統(tǒng)一的API。只要再將硬件各異和軟件各異的組件都抽象化之后,它將提供從雙核到數(shù)百個核的高效伸縮能力。
不同的嵌入式應用需要不同的并行結構。應用及SoC會越來越復雜,軟件也將發(fā)展成包含多種算法的并發(fā)運行及它們彼此間的協(xié)調。視頻解碼算法將要求有驅動多核的能力。大量的應用將要求多核的處理器。其中許多應用使用多核的SoC是唯一的選擇。
多核聯(lián)盟已不可避免地被卷入多核調試領域。 有許多廠家宣稱他們的開發(fā)工具內(nèi)部支持任何嵌入式處理器組合的多核和多處理器系統(tǒng)。 如現(xiàn)存的方案中包括有 JTAG 探頭及另一端的服務端子,再備有多個因處理器而異的開發(fā)調試專用的適配器。它們雖可勉強調試多核系統(tǒng),但是并不全面,系統(tǒng)多于雙核就不行了。如對于一個16核的系統(tǒng)想象中就將用16個調試器。多核聯(lián)盟的計劃中,準備開發(fā)一個標準的調試樣機及相應的API,希望廠家能夠參照研制出統(tǒng)一的多核系統(tǒng)調試器。
為了迎接即將到來的巨型多核革命,業(yè)界必須攜起手來推進多核的生態(tài)環(huán)境。多核聯(lián)盟欲將操作系統(tǒng)的廠商、中間件提供商、處理器廠商、EDA廠商、應用開發(fā)者、OEM廠商及其他集聚一堂,鼓舞信心,堅定信念,齊心協(xié)力,擬定一個符合共同需要的規(guī)劃藍圖,保證其實施。新事物的誕生,初始雖慢,繼之加速。多核聯(lián)盟已經(jīng)有了初始者們奠定的堅固基石,已經(jīng)著手處理關鍵的挑戰(zhàn),隨著事業(yè)的發(fā)展,后繼者的涌現(xiàn),任重道遠,前途光明!(梁合慶譯自《Microprocessor Report》)
評論