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