其實(shí)“多核”這個(gè)詞已經(jīng)流行很多年了,世界上第一款商用的非嵌入式多核處理器是2002年IBM推出的POWER4。當(dāng)然,多核這個(gè)詞匯的流行主要?dú)w功與AMD和Intel的廣告,Intel與AMD的真假四核之爭(zhēng),以及如今的電腦芯片市場(chǎng)上全是多核處理器的事實(shí)。接下來,學(xué)術(shù)界的研究人員開始討論未來成百上千核的處理器了。有一個(gè)與多核匹配的詞叫片上網(wǎng)絡(luò)(Networks on Chip),講的是多核里的網(wǎng)絡(luò)式互連結(jié)構(gòu),甚至有人預(yù)測(cè)未來將互連網(wǎng)集成到片上這種概念了。當(dāng)然,這樣的名詞是很吸引眼球的,不過什么東西都得從實(shí)際出發(fā),這篇文章也就簡(jiǎn)單地分析了為什么有多核這個(gè)事情,以及多核系統(tǒng)的挑戰(zhàn)。
為什么有多核處理器?
事先需要提及的是,一個(gè)常見誤區(qū)就是多核和眾核處理器的發(fā)展來源于應(yīng)用和市場(chǎng)驅(qū)動(dòng)。實(shí)際上,應(yīng)用和市場(chǎng)希望單核處理器的壽命越來越長(zhǎng),而物理限制是多核以及未來眾核處理器出現(xiàn)和發(fā)展的動(dòng)力。之后我們來談?wù)撘幌?,首先,為什么有多核處理器?從Intel 80286到Intel Pentium 4大概二十多年的時(shí)間都是單核處理器的天下,為什么最近幾年單核處理器卻銷聲匿跡了?是什么導(dǎo)致了多核時(shí)代的到來?
這里需要知道一個(gè)經(jīng)驗(yàn)定律和三個(gè)限制,他們是多核處理器的最本質(zhì)緣由。這個(gè)定理就是摩爾定律。Gordon Moore博士是Intel的創(chuàng)始人之一。早在他參與創(chuàng)建Intel之前的1965年,他就提出,在至少十年內(nèi),每個(gè)芯片上集成的晶體管數(shù)(集成度)會(huì)每?jī)赡攴环?。后來,大家把這個(gè)周期縮短到十八個(gè)月。這個(gè)指數(shù)規(guī)律的發(fā)展速度是令人難以置信的,大家都聽過那個(gè)國(guó)王按幾何級(jí)數(shù)賞賜大臣谷粒,從而使得國(guó)庫(kù)被掏空的傳說。而摩爾定律講得就是現(xiàn)實(shí)中晶體管數(shù)量幾何級(jí)數(shù)倍增的故事,更令人難以置信的是這個(gè)速度保持到今天已經(jīng)快五十年了。人類歷史上應(yīng)該還沒有任何技術(shù)是指數(shù)發(fā)展這么久的。題外話一句,若干年前,互聯(lián)網(wǎng)骨干網(wǎng)帶寬曾經(jīng)這么指數(shù)了幾年,曾有人將其總結(jié)為一個(gè)定律忽悠一堆人研究光纖通訊,后來發(fā)現(xiàn)帶寬沒法按照指數(shù)定律漲了,許多搞光電的人也就找不到工作了。扯遠(yuǎn)了點(diǎn),整個(gè)IT產(chǎn)業(yè)之所以風(fēng)光了這么多年,摩爾定律是本質(zhì)的因素。
當(dāng)無數(shù)的硅公硅婆和軟件民工們將晶體管數(shù)目的增長(zhǎng)轉(zhuǎn)換為計(jì)算機(jī)等IT產(chǎn)品的性能時(shí),摩爾定律也就有了兩個(gè)推論,每十八個(gè)月,計(jì)算機(jī)等IT 產(chǎn)品的性能會(huì)翻一番;相同性能的計(jì)算機(jī)等 IT 產(chǎn)品,每十八個(gè)月價(jià)錢會(huì)降一半。后面這個(gè)推論很可怕的一件事情,他說,如果你IT產(chǎn)品像菜市場(chǎng)的商販一年年復(fù)一年的賣同樣的東西,那么你IT產(chǎn)品的價(jià)錢會(huì)指數(shù)下降。從某種意義上來說摩爾定律逼迫著所有的IT企業(yè)不斷的按指數(shù)規(guī)律提高產(chǎn)品的性能,并且創(chuàng)新出新的產(chǎn)品。但不幸的是,這種從晶體管數(shù)轉(zhuǎn)換為性能增長(zhǎng)的過程日趨困難。
時(shí)至今日,集成度還在以摩爾定律的速度增長(zhǎng),但是性能的增長(zhǎng)遇到了三個(gè)物理規(guī)律的限制。第一是功耗,第二是互連線延時(shí),第三是設(shè)計(jì)復(fù)雜度。
功耗限制:晶體管的主要工作就以翻轉(zhuǎn)提供信息計(jì)算,要讓晶體管翻轉(zhuǎn)就是給他們提供能量,而他們一翻轉(zhuǎn)就要發(fā)熱。從Intel 80286到Pentium 4的路線一直是讓晶體管翻轉(zhuǎn)得越來越快(約兩千倍的差別),處理器頻率隨之不斷上升,也就是意味單位時(shí)間提供給芯片的能量——功耗,會(huì)逐步上升,發(fā)熱也越來越厲害。一個(gè)很明顯的現(xiàn)象是,286不需要散熱,但是Pentium IV卻需要散熱片加強(qiáng)勁的風(fēng)扇。這種靠不斷增加翻轉(zhuǎn)速度的方式帶來的最大好處是同一個(gè)程序,你什么優(yōu)化也不做,買一個(gè)下一代的芯片就可以讓程序跑快很多。但是與此同時(shí),翻轉(zhuǎn)速度的上升帶來功耗的急劇增長(zhǎng),所散熱超過了風(fēng)扇散熱的熱預(yù)算。不幸地是,散熱的能力卻不能夠同步增長(zhǎng),這限制了處理器所發(fā)熱的總功耗,從而使得傳統(tǒng)地提高處理器頻率的老法子不再具有可擴(kuò)展性。單核處理器的性能發(fā)展走到了盡頭。那摩爾定律提供的多余的處理器怎么辦呢?最簡(jiǎn)單的辦法就是用來增加單片集成處理器核的數(shù)量而不是性能。
互聯(lián)線延遲:芯片上除了晶體管就是互連線。它的主要工作是把一個(gè)晶體管干活兒的結(jié)果給另一個(gè)晶體管,是個(gè)車間搬運(yùn)工的角色。曾幾何時(shí),晶體管是很慢的,所以沒人在乎這種搬運(yùn)工帶來的任何延時(shí)影響。但是隨著晶體管越來越小,越來越快,互連線的延遲并不隨之變塊,這就成了問題了。以前晶體管每翻轉(zhuǎn)一次的時(shí)間互連線能夠把數(shù)據(jù)從芯片的一頭送到另一頭,而如今這種對(duì)角線傳輸?shù)没ê脦讉€(gè)晶體管翻轉(zhuǎn)的時(shí)間。摩爾定律說晶體管集成度越來越高,但是互連線卻相對(duì)的越來越慢了。這帶來的最大問題是干一件事情需要花的步驟更多了,打個(gè)比方就是工廠里的流水線級(jí)數(shù)越來越多,很多步驟都花在把東西從一個(gè)車間搬到另一個(gè)車間上。在Pentium IV的時(shí)候,干一件事情(執(zhí)行一條指令)要花20級(jí)流水線。流水線級(jí)數(shù)長(zhǎng)不是什么好事,因?yàn)橐坏┊?dāng)流水線級(jí)前面處理的東西出了問題,后面正在處理的那些東西就得重頭來做。當(dāng)年AMD Athon之所有能夠在與Intel Pentium 4爭(zhēng)奪中占領(lǐng)一席之地,就是因?yàn)殡m然AMD的晶體管翻得慢,但流水線級(jí)數(shù)少,因此那種重頭來做的機(jī)會(huì)和代價(jià)都小,因此性能還很高??朔ヂ?lián)線延遲增加的最好辦法就是把一個(gè)大廠房分成很多個(gè)小廠房,事情都在一個(gè)小廠房里解決,這樣運(yùn)輸?shù)木嚯x就變短了。換句話說,使用較小的核組成一個(gè)多核的芯片,而不是以往的單核芯片。
設(shè)計(jì)復(fù)雜度:隨著晶體管數(shù)量的增加,芯片設(shè)計(jì)的設(shè)計(jì)空間、設(shè)計(jì)復(fù)雜度和驗(yàn)證難度都是大幅度增加的。話說Intel六核的iCore7上集成了超過十億個(gè)晶體管,其設(shè)計(jì)難度之大可想而知。如果采用多個(gè)重復(fù)設(shè)計(jì)處理器核,那么設(shè)計(jì)的復(fù)雜度就會(huì)大大降低,從而使得設(shè)計(jì)成本降低,出錯(cuò)的機(jī)會(huì)也減小了。
總結(jié)一下,多核系統(tǒng)的出現(xiàn)是摩爾定律與物理規(guī)律限制相互作用的結(jié)果,三個(gè)主要的限制是:功耗、互連、設(shè)計(jì)復(fù)雜度。一個(gè)處理器上的晶體管數(shù)越來越多,但是他們卻因?yàn)楣暮突ミB線的限制并不能直接提供很高的性能,那么怎么辦呢?一個(gè)最簡(jiǎn)單的辦法就是用在一個(gè)處理器中集成多個(gè)簡(jiǎn)單的處理器核。這樣既把多出來的晶體管用上了,而每個(gè)處理器核就像前一代的處理器一樣簡(jiǎn)單,因此不必提高他們的翻轉(zhuǎn)速度,各個(gè)處理器核只需要自己交換數(shù)據(jù),因此沒有很長(zhǎng)的連線延遲。這也就是Intel放棄Pentium IV采用Core 2結(jié)構(gòu)的緣由,也是本篇文章最本質(zhì)的原理。
從單核到多核乃至未來眾核的變化并不是芯片設(shè)計(jì)公司根據(jù)客戶需求,市場(chǎng)趨勢(shì)做出的主動(dòng)選擇,而是在物理規(guī)律限制不得已的情況下被逼走上的道路。這意味著以前那種處理器頻率越來越高的時(shí)代已經(jīng)一去不復(fù)返了。在那個(gè)已經(jīng)過去的黃金時(shí)代,程序員不需要怎么優(yōu)化程序,因?yàn)閮?yōu)化程序所花的功夫和時(shí)間還不一定值得去市場(chǎng)上買一個(gè)新款處理器。這也就使得Microsoft敢于做越來越慢的軟件。他不怕因?yàn)檐浖u不出去,因?yàn)樘幚砥鞯姆D(zhuǎn)速度的增長(zhǎng)會(huì)使得他本來很慢的軟件,不久就會(huì)快得可以接受。但是這個(gè)故事已經(jīng)結(jié)束了,現(xiàn)在的新款處理器跑老程序并不會(huì)快到哪里去,而當(dāng)你買了新處理器還得對(duì)老程序作進(jìn)一步的優(yōu)化才能利用上新增的晶體管。這可能也就是微軟的Vista按照老路子設(shè)計(jì),但賣得沒那么好的原因,也帶來了微軟裁員5000人,但是linux卻還是比較紅火的結(jié)果。下面這個(gè)圖是09年初Redhat Linux和Windows的股票走勢(shì),可以比較明顯的看出來,當(dāng)處理器速度不再翻倍的時(shí)候,當(dāng)人們沒錢總是換硬件的時(shí)候,微軟的表現(xiàn)就不是那么好了。因?yàn)閃indows Vista是微軟沿用了以前處理器發(fā)展規(guī)律設(shè)計(jì)的操作系統(tǒng),因此并不叫座。微軟公司不得不花大力氣重寫了他們的內(nèi)核代碼,推出了Windows 7來收拾Vista的殘局。
多核雖然說著容易,做起來也不難,但是難得卻不在多核本身上,下面的內(nèi)容簡(jiǎn)單地揭開了多核設(shè)計(jì)貌似困難實(shí)則簡(jiǎn)單地面紗,同時(shí)也指出多核之難不在核上,而在互連與編程兩大挑戰(zhàn)。
多核處理器是什么樣子的?
多核處理器的發(fā)展其實(shí)很大程度上是一個(gè)學(xué)術(shù)界最早提出但是由工業(yè)界引領(lǐng)的題目,從本質(zhì)上來說設(shè)計(jì)一個(gè)多核處理器本身沒有什么有深度的挑戰(zhàn),難點(diǎn)其實(shí)是互連和編程的問題。不過在我們深入了解這兩個(gè)問題前還是先回顧一下多核處理器的發(fā)展之路,目的是看看人們?cè)趺磸膯魏俗叩蕉嗪说摹?/p>
多核的點(diǎn)子最早學(xué)術(shù)界提出的。典型的有四個(gè):斯坦福的Hydra(1996),斯坦福的Imagine (2000),MIT的RAW(2002),以及UT奧斯丁的TRIPS(2003)。在這個(gè)問題上,是不得不佩服美國(guó)的創(chuàng)造力,要知道直到在2000年左右,所有的人都還在為處理器頻率按照摩爾定律翻翻而狂熱,美國(guó)的頂尖研究員就早已看到了這條路的盡頭并指出未來處理器的發(fā)展之路。
如果從學(xué)術(shù)界多核處理器的發(fā)展上學(xué)到一點(diǎn)最關(guān)鍵的內(nèi)容的話,那就是:做一個(gè)多核的處理器不是一件有理論困難的事情。曾有人據(jù)此預(yù)測(cè)說多核設(shè)計(jì)給了學(xué)術(shù)界一次超越工業(yè)界的機(jī)會(huì),就像當(dāng)年一個(gè)隨便的學(xué)生project做出來的RISC處理器就能勝過工業(yè)界的CISC處理器一樣。但是就目前看來這件事情并沒有如期發(fā)生。真正的難點(diǎn)并不在處理器設(shè)計(jì)上,當(dāng)工業(yè)界用各自不同的方式實(shí)現(xiàn)多核處理器后,一個(gè)重要經(jīng)驗(yàn)就是:真正的難點(diǎn)在提供一個(gè)多核平臺(tái)上的編程環(huán)境。
在介紹多核處理器的設(shè)計(jì)的時(shí)候我們將學(xué)術(shù)和工業(yè)界的研究情況結(jié)合在一起。多核處理器架構(gòu)的學(xué)術(shù)深度是有限的,但是工業(yè)界的實(shí)現(xiàn)卻是多種多樣的,SUN、IBM、Intel、AMD、甚至ARM都相繼設(shè)計(jì)并推出了了自己的多核處理器。面對(duì)不同的客戶市場(chǎng),不同的公司推出的不同多核處理器具有截然不同的特點(diǎn)。
多核處理器的設(shè)計(jì)依照大致可以分為三類:總線或者交換開關(guān)互連的或和設(shè)計(jì),流處理器和圖形處理器,以及網(wǎng)絡(luò)互連的處理器:
以總線或交換開關(guān)為基本互連架構(gòu)的多核設(shè)計(jì)
最初的多核處理器集成的處理器核數(shù)量較小,典型的特點(diǎn)就是互連方式是以總線和交換開關(guān)為主,而每個(gè)核結(jié)構(gòu)相似功能較為強(qiáng)大。這種設(shè)計(jì)也該可以看作傳統(tǒng)一個(gè)主板上多處理器結(jié)構(gòu)在片上的集成,主要的創(chuàng)新來源于摩爾定律指導(dǎo)下半導(dǎo)體技術(shù)進(jìn)步帶來的集成度提高,體系結(jié)構(gòu)的創(chuàng)新并不明顯。這種結(jié)構(gòu)的始祖(當(dāng)然也是片上多核的始祖)是Hydra。
斯坦福的Hydra處理器是最早提出的片上多核處理器。Hydra發(fā)明后成立了一家公司,然后這個(gè)公司被SUN公司購(gòu)買(后來SUN又被Oracle買了,不過那是后話),Hydra也就成為了現(xiàn)在SUN主流處理器Niagara的原型。不僅如此,現(xiàn)在Intel的雙核、四核處理器也是采用了和Hydra類似的結(jié)構(gòu)。Hydra的出發(fā)點(diǎn)也就是看到了多發(fā)射超標(biāo)量處理器架構(gòu)的末日,然后將多個(gè)簡(jiǎn)單的處理器核集成在了一個(gè)芯片上,互連方式還是最簡(jiǎn)單的總線互連,每個(gè)處理器通過總線廣播的方式發(fā)送信息,也通過總線偵聽來接受其他處理器。這種方法設(shè)計(jì)簡(jiǎn)單、有效,可以重用復(fù)雜的處理器設(shè)計(jì),并且借用版級(jí)總線設(shè)計(jì)的協(xié)議,是一種多核發(fā)展初級(jí)階段的重要一步。下圖就是Hydra的示意圖,可以看到這其實(shí)就是一個(gè)集成在片上的總線帶動(dòng)的多處理器。這種結(jié)構(gòu)的發(fā)展也有不同的階段和變體:最初只有處理器核、總線和緩存集成在片上;后來存儲(chǔ)和I/O控制器也集成了進(jìn)到片上來;圖中的總線之下的L2緩存有時(shí)候也會(huì)被放在總線與處理器之間;片上與片外的連接也不一定要是處理器與存儲(chǔ)器的接口,而可以成為兩個(gè)或多個(gè)多核處理器的接口。 Hydra引領(lǐng)的以總線為主的片上多核設(shè)計(jì)方案也成為了工業(yè)界第一代雙核甚至四核處理器設(shè)計(jì)的雛形。
最早的雙核處理器以及Intel的第一代四核處理器都是這種設(shè)計(jì)??偩€可以替換為交換開關(guān),來實(shí)現(xiàn)類似的功能。如下圖所示的是SUN在2007年推出的八核Niagara 2,其互連結(jié)構(gòu)就是交換開關(guān)。
這種結(jié)構(gòu)有以下這些特點(diǎn):
? 從存儲(chǔ)器讀寫的角度來講這種設(shè)計(jì)統(tǒng)稱為UMA(Uniform Memory Access)。每個(gè)處理器核訪問存儲(chǔ)的路徑都是一樣的,總線(或者交換開關(guān))被不同的處理器核交替使用從而達(dá)到訪問共享存儲(chǔ)的目的。這種存儲(chǔ)訪問結(jié)構(gòu)自然地支持了內(nèi)存空間在各個(gè)處理器核之間共享已經(jīng)基于總線偵聽的緩存一致性協(xié)議。
? 各個(gè)處理器核類似于傳統(tǒng)的單核處理器,具有較為強(qiáng)大的計(jì)算功能,只是作了一些裁剪來優(yōu)化功耗等要素。也就是說,就算單線程應(yīng)用程序沒有任何改變,也能在新的多核處理器上運(yùn)行,性能有可能有所提高。
? 從編程上來講類似于傳統(tǒng)的多處理器編程,再加上內(nèi)存空間共享,并控制了多線程編程的復(fù)雜度。比如說,像Linux之類的操作系統(tǒng)很早就支持多處理器,可以無縫地在多核處理器上運(yùn)行,并從容地調(diào)配多個(gè)應(yīng)用程序進(jìn)程。其實(shí),最早多核處理器的性能提升大部分就來自于應(yīng)用程序能夠各自獨(dú)享一個(gè)核所帶來的獨(dú)占優(yōu)勢(shì)
這種結(jié)構(gòu)的明顯劣勢(shì)來自于總線或者交換開關(guān)成為系統(tǒng)瓶頸,這個(gè)瓶頸體現(xiàn)在系統(tǒng)性能和功耗兩個(gè)方面:從系統(tǒng)性能上來講這種體系結(jié)構(gòu)的核心:總線或者交換開關(guān)仍舊依賴全局金屬互聯(lián)線,其性能并不能隨著半導(dǎo)體技術(shù)進(jìn)步而提高。這種全局性地互連要求所有的通信都先匯聚到同一個(gè)地方然后又再傳播出去,其效率之低也是可想而知的。從延遲上講,電信號(hào)需要給長(zhǎng)達(dá)整個(gè)芯片邊長(zhǎng)的金屬線充電,其電阻電容很大,充電時(shí)間很長(zhǎng),因此信號(hào)延遲很大;從吞吐率上來講,所有的信號(hào)傳輸都要通過這個(gè)總線或者交換開關(guān),其帶寬是無法適應(yīng)處理器核數(shù)量的增長(zhǎng)的。同樣的壞消息來自于功耗。無論是連接多個(gè)核的總線還是四通八達(dá)的交換開關(guān),其功耗都不是可以擴(kuò)展的。上述的不可擴(kuò)展性決定了,基于片上總線或者交換開關(guān)的體系結(jié)構(gòu)終究不能支持片上多核隨著摩爾定律而擴(kuò)展到片上眾核,人們不得不放棄這種簡(jiǎn)單的結(jié)構(gòu)而選擇流處理器或者片上網(wǎng)絡(luò)等較為復(fù)雜的體系結(jié)構(gòu)。
Hydra的故事雖然簡(jiǎn)單,但是卻發(fā)生在1996,可以說在那個(gè)年代是極其具有前瞻性的。一句題外話,在那個(gè)年代,ISCA(International Symposium on Computer Architecture,計(jì)算機(jī)體系結(jié)構(gòu)最牛的學(xué)術(shù)會(huì)議 )還基本上是Cache Architecture的天下,所有的體系結(jié)構(gòu)研究者還在考慮怎么樣提高單核的性能。反觀今日,當(dāng)世界上所有人都在討論多核的時(shí)候,我們是不是應(yīng)該前瞻性地考慮一下下一個(gè)熱點(diǎn)是什么呢?
流處理器以及GPGPU(通用圖形處理器)
流處理器以及GPGPU代表的路徑是完全繞開了傳統(tǒng)處理器設(shè)計(jì)而針對(duì)新的應(yīng)用借鑒其他專用處理器(GPU)而展開的全新設(shè)計(jì)。具體地講,Hydra面對(duì)的應(yīng)用還是超標(biāo)量處理器所面對(duì)的傳統(tǒng)應(yīng)用,大量的程序循環(huán)和跳轉(zhuǎn),不規(guī)則的內(nèi)存地址訪問。而隨著計(jì)算技術(shù)不斷升入到人們的生活當(dāng)中,另一種計(jì)算模式異軍凸顯,這就是大規(guī)模的數(shù)據(jù)并行計(jì)算模式。比較通俗一點(diǎn)的應(yīng)用就是圖像和視頻的處理以及綜合,比如視頻的編解碼,動(dòng)畫的合成等。在數(shù)字通訊的年代這種計(jì)算越發(fā)重要,像無線基站或者手機(jī)上各種通訊協(xié)議棧的處理。在單核的年代,進(jìn)行這種計(jì)算的處理器叫DSP(Digital Signal Processor),以有別于CPU這種擅長(zhǎng)控制和跳轉(zhuǎn)的處理器。DSP的結(jié)構(gòu)與普通的CPU的超標(biāo)量結(jié)構(gòu)不同,大量采用了SIMD(Single Instruction Multiple Data)或者VLIW(Very Long Instruction Word)的結(jié)構(gòu),以實(shí)現(xiàn)在同一個(gè)處理器流程通路下的數(shù)據(jù)乃至指令的并行。那么就像Hydra是超標(biāo)量CPU在多核時(shí)代的領(lǐng)頭羊一樣,斯坦福這個(gè)信息工業(yè)的圣地也誕生了DSP在多核時(shí)代的領(lǐng)頭羊Imagine。
這里可能需要叉開話題來講一下并行的基本分類了。一般地講,并行處理有三個(gè)分類:數(shù)據(jù)并行、指令并行和線程并行。線程是一串串行執(zhí)行的指令,每條指令操作一個(gè)或多個(gè)數(shù)據(jù)。在此基礎(chǔ)上,實(shí)現(xiàn)并行的方式有三種:
一種是多個(gè)這樣的串行指令序列同時(shí)執(zhí)行,就是Hydra為代表的線程并行模式;
第二種數(shù)據(jù)并行是同一條指令應(yīng)用在并行的數(shù)據(jù)上。比如本來是一條加法指令計(jì)算C=A+B,同時(shí)將加法應(yīng)用到一組A和一組B上得到一組C上就是數(shù)據(jù)并行。SIMD和即將講到的Imagine都利用了這種并行;
第三種是指令并行,也就是說在同一時(shí)間發(fā)射多條指令,同時(shí)計(jì)算不同數(shù)據(jù)多個(gè)不同運(yùn)算,VLIW就是這樣一種并行方式。但是由于實(shí)現(xiàn)VLIW的編譯器難度太高,使得直接實(shí)現(xiàn)大規(guī)??蓴U(kuò)展的指令并行比較困難。
回到多核處理器的學(xué)術(shù)路徑上來。Imagine是斯坦福的一個(gè)數(shù)據(jù)并行的多核處理器。Imagine有8個(gè)ALU單元被同一個(gè)控制器所控制,同時(shí)對(duì)大量的并行數(shù)據(jù)進(jìn)行同樣的操作。這種處理器的模式后來被稱為流處理器。后面我們講到的Nvidia的Fermi就是這種數(shù)據(jù)并行流處理器的一種實(shí)現(xiàn)實(shí)例。下面這個(gè)圖即是Imagine的結(jié)構(gòu)框圖,可以看到它是多么像一個(gè)大型的SIMD單元啊。實(shí)際上它也即是48個(gè)ALU單元分成了8個(gè)SIMD簇。但是不可否認(rèn)的是,就這樣一個(gè)看似簡(jiǎn)單的設(shè)計(jì)提供了極高的數(shù)據(jù)并行度,使得它在處理一系列與多媒體有關(guān)的應(yīng)用上得心應(yīng)手,發(fā)揮了更多晶體管所帶來的性能優(yōu)勢(shì)。
接下來我們來GPU處理器結(jié)構(gòu):Nvida的Fermi以及前一代的GT200,然后我們就可以發(fā)現(xiàn)他們和Imagine驚人的相似之處:每一個(gè)處理器核是一個(gè)簡(jiǎn)單的ALU陣列。當(dāng)然,在Nvidia的名詞里,處理器核叫Streaming Multiprocessor(SM),每個(gè)Fermi的SM里有32個(gè)32位ALU、32個(gè)單精度的浮點(diǎn)運(yùn)算單元還有一些特殊運(yùn)算單元;每個(gè)GT200的SM里的運(yùn)算單元少地多。SM相當(dāng)于Imagine里地ALU Cluster,能夠執(zhí)行SIMD的操作,但是絕對(duì)和Intel以及AMD里面的處理器核相去甚遠(yuǎn)。通用處理器中的每個(gè)核里有龐大的指令池和寄存器堆,執(zhí)行繁雜的指令預(yù)取,分支預(yù)測(cè),條件跳轉(zhuǎn)等操作,雖然計(jì)算單元不如SM多,但是計(jì)算精度較高(64位)。換句話說,如果你的程序沒有那么寬的單指令多數(shù)據(jù)并行,那么不要指望SM比傳統(tǒng)處理器核快。
片上存儲(chǔ)是為流數(shù)據(jù)簡(jiǎn)化(也算是優(yōu)化)過的。在傳統(tǒng)的GT200中,這種存儲(chǔ)就叫texture cache,在Imagine里叫Stream memory。在圖形圖像中,大部分的操作是流水線化的,所以這種cache不需要支持不同SM之間存儲(chǔ)共享(即使需要,必需程序員顯式指定,而不是處理器代勞),部分的緩存甚至是私有的,就連地址空間都是獨(dú)立的。這對(duì)于流處理器來說,沒有任何問題。我們把流處理想象成一個(gè)巨大的SIMD,不同的data之間沒有任何共享,texture cache就夠用了。但是一旦有了分支、線程并行、數(shù)據(jù)交換、信號(hào)鎖,這種cache就會(huì)讓程序員頭痛,于是Fermi做了一些優(yōu)化,使得片上緩存至少在地址上是共享了,但是并不完全支持緩存一致性。只有當(dāng)程序員顯示使用同步信號(hào)量,存儲(chǔ)的順序核一致性才是可以保證的。
這里需要澄清一個(gè)很明顯的誤區(qū)就是在GPU上編程能夠成百倍地提高CPU的性能,這個(gè)觀點(diǎn)在Nvidia推出CUDA的時(shí)候被狠狠吹捧了一番,不過后來大家發(fā)現(xiàn)GPGPU的能力其實(shí)非常有限:
1. 首先,只有存在大量規(guī)則數(shù)據(jù)并行的應(yīng)用程序,GPU才能發(fā)揮其巨大優(yōu)勢(shì)。程序中的分支跳轉(zhuǎn)以及線程間的數(shù)據(jù)共享都是GPU的軟肋,就算能夠被支持,效率也不高。說直白一點(diǎn),如果誰想在GPU上做Web Server,那基本上是癡人說夢(mèng)。
2. 其次,GPU需要對(duì)應(yīng)用程序進(jìn)行大量?jī)?yōu)化,以挖掘其并行性。這個(gè)優(yōu)化過程需要對(duì)GPU結(jié)構(gòu)和被優(yōu)化的程序本身有著深刻地理解。這和在通用處理器編程中打開幾個(gè)優(yōu)化選項(xiàng)的難度不可同日而語。另一方面,通用處理器的編程工具鏈經(jīng)過若干年來的積累已經(jīng)能夠自動(dòng)完成很多優(yōu)化功能使得程序員可以站在巨人的肩膀上,而對(duì)于GPU來說,這樣的肩膀還不厚實(shí)。直白地說,如果需要在非圖形圖像應(yīng)用上釋放GPU的潛力,花錢花時(shí)間和請(qǐng)高人都是必不可少的。
3. 最后,就算對(duì)于GPU擅長(zhǎng)的應(yīng)用,如果對(duì)CPU和GPU程序都做優(yōu)化,性能的差別也僅僅在一個(gè)數(shù)量級(jí)之內(nèi)。ISCA有篇文章探討了這個(gè)問題,一個(gè)粗淺的結(jié)論是,對(duì)于作者考察的幾個(gè)例子來說,優(yōu)化過的GPU程序在Nvidia GTX280上,比在Intel Core i7 960上平均快了2.5倍。
如果結(jié)合上面探討的兩種類型的多核處理器設(shè)計(jì),有一個(gè)很明顯的問題是,到底用少數(shù)幾個(gè)強(qiáng)大的單核,還是很多簡(jiǎn)單的單核最能優(yōu)化處理器設(shè)計(jì)呢?問題的困境是:如果每個(gè)核很強(qiáng)大,其能提供的總指令吞吐率與其功耗或面積成本呈亞線性關(guān)系,投入產(chǎn)出效率較低,但是如果每個(gè)核很簡(jiǎn)單,那么單線程的性能很低,而不幸的是每個(gè)應(yīng)用程序總是有一部分沒法并行化,這部分將最終決定整個(gè)程序的性能。
這篇文章給了一個(gè)很有意思的討論。問題的一個(gè)直白答案是取決于程序的并行性:一個(gè)程序到底有多大部分是必需串行執(zhí)行的?如果這個(gè)部分很大,那么少數(shù)幾個(gè)強(qiáng)大的單核是比較理想的方案,而如果這個(gè)部分很小,那么傾向于使用更多的較簡(jiǎn)單的核。最為理想的方案是一個(gè)異構(gòu)多核的設(shè)計(jì),這樣串行的部分能在一個(gè)強(qiáng)大的單核上加速,而可以并行的部分則通過很多很小的核來提速。這個(gè)思想的一個(gè)很明顯體現(xiàn)就是Intel的Sandy Bridge處理器,這個(gè)處理器沒有遵循以往不斷增加核數(shù)量的規(guī)律,其設(shè)計(jì)中里既有強(qiáng)大的傳統(tǒng)處理器核又有類似GPU的處理器,期望做到異構(gòu)多核來實(shí)現(xiàn)性能的提升,下圖就是Sandy Bridge的系統(tǒng)結(jié)構(gòu):
網(wǎng)絡(luò)互連為主的處理器
無論是總線和交換開關(guān)的設(shè)計(jì),還是流處理器,就沒法從本質(zhì)上改變多核乃至眾核處理器設(shè)計(jì)上的不可擴(kuò)展性。改變這種傳統(tǒng)的互連,人們提出了使用片上網(wǎng)絡(luò)的辦法,使得未來眾多的處理器核通過分布式的通訊方式相互溝通,從而避免了集中的互連設(shè)計(jì)帶來的系統(tǒng)性能瓶頸以及較大的功耗開銷。不過當(dāng)片上集成核的數(shù)量不斷增加時(shí),如何把這個(gè)功能組織起來,并不是一個(gè)簡(jiǎn)單的事情,無論是學(xué)術(shù)界還是工業(yè)界都做了許多的嘗試,從目前開來實(shí)際結(jié)果都不太理想。
第一個(gè)真正采用網(wǎng)絡(luò)來連接片上很多核的是2002年MIT一組研究人員提出來的RAW眾核處理器。MIT的RAW處理器第一次應(yīng)用了片上網(wǎng)絡(luò)的概念。這個(gè)設(shè)計(jì)后來成立了一家公司叫Tilera。RAW的出發(fā)點(diǎn)在于看到傳統(tǒng)單核處理器中的瓶頸在于操作數(shù)網(wǎng)絡(luò)(scalar operand network)。這個(gè)網(wǎng)絡(luò)把各個(gè)ALU中計(jì)算出來的數(shù)值中間結(jié)果存儲(chǔ)到寄存器堆,又把寄存器堆里的數(shù)給ALU就行操作。隨著金屬互聯(lián)線延遲的增加,這個(gè)移動(dòng)操作數(shù)回路成為系統(tǒng)瓶頸,成為了導(dǎo)致ALU中晶體管性能提高并不能外化為處理器性能的絆腳石。
解決這個(gè)問題的辦法是用操作數(shù)網(wǎng)絡(luò)把計(jì)算單元(ALU)組織起來,而不是傳統(tǒng)意義上的操作數(shù)網(wǎng)絡(luò)為ALU服務(wù)。每個(gè)操作數(shù)通過網(wǎng)絡(luò)進(jìn)入到一組ALU里,經(jīng)過漫長(zhǎng)流水線的處理和計(jì)算輸出出來到網(wǎng)絡(luò)中,然后送到臨近的另一組ALU里,而不必繞回去。這樣把每組ALU看成一個(gè)“核”,這樣就構(gòu)成了片上網(wǎng)絡(luò)。下圖就是RAW中每個(gè)處理器核的結(jié)構(gòu):
圖中可以看到,與其他商業(yè)多核處理器不同的是,RAW的片上網(wǎng)絡(luò)深入到了處理器流水線的內(nèi)部。接著,既然ALU可以編程,那么操作數(shù)網(wǎng)絡(luò)也可以編程,這樣就達(dá)成了一個(gè)軟件可以控制的計(jì)算、通信眾核系統(tǒng)。當(dāng)然其網(wǎng)絡(luò)設(shè)計(jì)就是一個(gè)普通的Mesh網(wǎng)格網(wǎng)絡(luò),如下圖所示,沒啥特殊的。不過這個(gè)Mesh其實(shí)是由若干個(gè)不同功能的網(wǎng)絡(luò)聯(lián)合而成,各自負(fù)責(zé)操作數(shù)、片上存儲(chǔ)以及I/O等片上通訊的需求。
RAW的難點(diǎn)在于對(duì)于應(yīng)用程序需要就行網(wǎng)絡(luò)和計(jì)算的雙重優(yōu)化,否則程序運(yùn)行的效率較低。這使得編譯器中指令調(diào)度不光考慮運(yùn)算單元的成本,還有通訊的成本,搜索空間和復(fù)雜度大大提高。
接下來介紹IBM的Cell處理器,算是工業(yè)界探索異構(gòu)多核設(shè)計(jì)的先河吧。Cell的來頭還是蠻大的,是IBM,SONY和Toshiba三家大公司為未來的消費(fèi)電子設(shè)計(jì)的核心計(jì)算引擎。其最典型的應(yīng)用就是索尼的PS3。Cell的設(shè)計(jì)采用了環(huán)形的片上互連、異構(gòu)的片上多核、以及片上系統(tǒng)的集成,然后在IBM的90納米、65納米和45納米工藝條件下做了實(shí)現(xiàn),應(yīng)該說是代表了當(dāng)時(shí)業(yè)界的最先進(jìn)水平。不過不幸的是IBM在2009年年底的時(shí)候停止了對(duì)Cell的進(jìn)一步研發(fā),而基于Cell的索尼PS3銷售上沒有敵過任天堂的Wii(截止2010年9月低,Wii在全世界銷售了七千六百萬臺(tái),而PS3僅有四千兩百萬臺(tái))。這背后的原因在于什么呢?
首先我們來看IBM Cell處理器的設(shè)計(jì),其中包含了一個(gè)Power processing element(PPE)作為主處理器(其性能相當(dāng)于64位的Power PC),加上八個(gè)Synergistic Processing Elements (SPE)作為協(xié)處理器(其性能相當(dāng)于普通的RISC處理器和一個(gè)128位的SIMD),這些處理單元通過一個(gè)環(huán)形網(wǎng)絡(luò)就行互連,達(dá)到超過200GB每秒的帶寬。光從這些數(shù)據(jù)上來講,這個(gè)多核處理器符合前面講述的異構(gòu)并行原理,并且技術(shù)也不差。最為不幸的是這個(gè)處理器太難編程了。每個(gè)協(xié)處理器有一個(gè)私有的局部存儲(chǔ)器(256KB)大小,這個(gè)存儲(chǔ)器幾乎需要程序員來手動(dòng)調(diào)度,它既沒有類似于緩存的自動(dòng)預(yù)取,又不與PPE的存儲(chǔ)單元共享地址空間。如果要協(xié)調(diào)好PPE與SPE的工作,除非程序的工作模式是固定的。這樣的結(jié)果就是處理器理論性能很高,但是實(shí)際程序優(yōu)化起來并不容易,很多程序僅僅能夠使用一個(gè)類似于PowerPC的PPE。沒有多少廉價(jià)程序員能夠理解如此繁雜的體系結(jié)構(gòu),愿意在上面做開發(fā)。這可能就是Cell最終被IBM停止開發(fā)的原因吧。
Intel是最能理解編程的簡(jiǎn)易性對(duì)于一個(gè)處理器生命的至關(guān)重要性,在當(dāng)年以x86為代表的CISC和以MIPS、SPARC為代表RISC結(jié)構(gòu)出現(xiàn)爭(zhēng)端的時(shí)候,Intel為了保證程序的兼容性,保持了x86指令向下兼容。盡管犧牲了一定性能卻贏得了軟件開發(fā)者和客戶的認(rèn)可,而隨著半導(dǎo)體技術(shù)的推進(jìn)這些性能犧牲被歷史所抹平。針對(duì)RAW和Cell都面臨的問題,Intel推出了一個(gè)保持存儲(chǔ)一致性和x86指令集的多核設(shè)計(jì):Larabee,作為未來GPGPU時(shí)代眾核編程的抬頭兵。不過這個(gè)設(shè)計(jì)從2008年透出風(fēng)聲到2009年底就被宣布第一代產(chǎn)品難產(chǎn)了。
Larabee的設(shè)計(jì)野心就是編程的容易性,16(甚至32)個(gè)x86的處理器核通過一個(gè)環(huán)形的片上網(wǎng)絡(luò)連接在一起,分布式的的片上緩存保持完全的一致性,沒有任何特殊的專用硬件單元來增加編程的難度。大部分的優(yōu)化可以通過軟件來完成。完成這樣一個(gè)設(shè)計(jì)難度在于兩個(gè)方面:
1. 眾核的片上緩存一致性是個(gè)難題,現(xiàn)在片上緩存一致性的核的數(shù)量支持到8已經(jīng)很不容易。如果要拓展到16或者32的話,要不性能很低,要不就是得放棄部分一致性的特點(diǎn),從而使得編程的難度增加。
2. Larabee如果想要達(dá)到超過Nvidia或者AMD同類GPU產(chǎn)品的性能,必需有一套支持圖形圖像常見應(yīng)用的開發(fā)工具鏈,而這個(gè)的開發(fā)不是一朝一夕之功。
在摩爾定律的作用下,任何的耽擱都會(huì)導(dǎo)致產(chǎn)品的流產(chǎn),Larabee開發(fā)的艱巨性決定了其性能跟不上摩爾定律,從而其第一代產(chǎn)品被迫下線。
小結(jié)
在本文的結(jié)尾總結(jié)一下所探討的這些多核乃至眾核處理器,可以看到其中的挑戰(zhàn)其實(shí)并不是在處理器設(shè)計(jì)本身,而在互連與編程這個(gè)兩個(gè)方面。一個(gè)未來會(huì)成功的眾核處理器提供給開發(fā)者一個(gè)向下兼容的簡(jiǎn)單編程模型,并且盡量將互連的影響盡可能的化解。這個(gè)目標(biāo)并不容易實(shí)現(xiàn),很有可能人們不得不最終放棄傳統(tǒng)的編程模型,而直接面對(duì)眾核處理器的互連和編程挑戰(zhàn)。
審核編輯:劉清
-
處理器
+關(guān)注
關(guān)注
68文章
19432瀏覽量
231261 -
摩爾定律
+關(guān)注
關(guān)注
4文章
637瀏覽量
79240 -
晶體管
+關(guān)注
關(guān)注
77文章
9764瀏覽量
138943 -
多核處理器
+關(guān)注
關(guān)注
0文章
109瀏覽量
19992
原文標(biāo)題:從多核到眾核處理器
文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論