多核設(shè)計將在消費電子領(lǐng)域大行其道
Patrick Madden在“多核處理器前途未卜(Multi-core processors face uncertain future)”一文中關(guān)于多核芯片的討論焦點集中于單個的通用處理器架構(gòu)上,實際上這種觀點對使用多處理器來解決系統(tǒng)架構(gòu)問題作出了不必要的限制。正如 Madden所言,大型半導(dǎo)體和服務(wù)器處理器供應(yīng)商可以提供多核的對稱多處理器,每個對稱多處理器都可以運行并行的多線程軟件程序。這些多核處理器常在運行基于SAMD(single application multiple data)模型應(yīng)用的大型服務(wù)器和筆記本電腦中。SAMD應(yīng)用可回溯至早期的大型機時代,當(dāng)時計算機專注于航班預(yù)定系統(tǒng)和實時銀行系統(tǒng)等實時應(yīng)用。
當(dāng)前,嵌入式設(shè)計中對稱多處理器(SMP)架構(gòu)的應(yīng)用引起了業(yè)界極大的關(guān)注。實際上,很少應(yīng)用是同時并行(embarrassingly parallel)的。就像Madden提及,圖像和多媒體處理是同時并行的,但是這些應(yīng)用已經(jīng)有專用的多媒體芯片處理了,例如IBM的Cell處理器和 ATI/Nvidia的圖形處理器。因此,包括Madden在內(nèi)的很多專家都認(rèn)為,對稱多處理器上的并行應(yīng)用已經(jīng)被局限在一個很小的范圍之內(nèi)。
軟件工程師不習(xí)慣并行地考慮問題
在Madden的文章中,大多關(guān)于對稱多處理器的討論都會談到開發(fā)工具的問題。實際應(yīng)用中,依靠軟件工具把一個巨大的單線程應(yīng)用程序自動分配給多個處理器運行是不大可能的。類似于Verilog這樣的硬件描述語言可以很容易地表達(dá)并行操作,而像C這樣的軟件語言更適用于單線程算法的實現(xiàn)。為了讓C語言更適用于并行編程,人們做了很多改進(jìn)嘗試,比如Concurrent C、UPC、mpC、pC等。它們有些通過特殊的庫,有些通過并行的API來實現(xiàn)并行進(jìn)程的顯式標(biāo)識和進(jìn)程間的通信,例如Madden的文章中提到的 MPI和OpenMP技術(shù)。
還有些研究人員試圖用全新的整合了并行編程結(jié)構(gòu)的軟件開發(fā)語言來替代C語言。但是業(yè)界對這些新的編程語言并不認(rèn)可(例如,Ada語言和Inmos公司的 Occam語言均以失敗告終)。我們已經(jīng)習(xí)慣于單任務(wù)的算法描述,對大多數(shù)程序員來說,思考并行程序或多線程操作都相當(dāng)困難。然而,跳出SMP的限制來擴展處理器架構(gòu),我們發(fā)現(xiàn)至少有兩種利用異構(gòu)而非同構(gòu)的并行方式。使用該兩種便捷并行(convenient concurrency)方式能充分地將軟件開發(fā)人員從并行工作的思考中釋放出來,因為不同的并行任務(wù)間的聯(lián)系并非十分緊密。
圖1:超級3G移動電話原理圖
第一種方式
你可以稱這種并行為“組合并行”,因為這種并行操作將不同的子系統(tǒng)組合在一起,而每個子系統(tǒng)中都包含一個或多個針對特定任務(wù)優(yōu)化過的處理器。在這種架構(gòu)設(shè)計中,結(jié)構(gòu)化的子系統(tǒng)間的通信只在需要時才相互影響。圖1所示的超級3G移動電話系統(tǒng)體現(xiàn)了該思想。圖中共有18個獨立的處理模塊(灰色表示部分),每個模塊都有清晰的功能定義,因此很容易將整個系統(tǒng)功能劃分開來用18個處理器完成設(shè)計(考慮到子任務(wù)處理的話,可能需要更多處理器)。
一些人對這種架構(gòu)設(shè)計提出批評,因為處理器和門電路的效率看上去并不是很高,至少在理論上只需用幾個高時鐘頻率的通用處理器(或者是SMP多核處理器)就可以替代10個、20個或更多的處理器核。實際上這些批評并不恰當(dāng),摩爾定律繼續(xù)促使在一片芯片上可以集成更多的晶體管,而Denard經(jīng)典尺度則提供速度更快、功耗更低的晶體管,但是從90nm開始,Denard理論無法繼續(xù)提供更快的速度和更低的功耗了。在90nm節(jié)點上,功耗和能耗變得很難控制,而且隨著工藝的提高問題將更嚴(yán)重。所以嵌入式系統(tǒng)的設(shè)計人員從現(xiàn)在開始就必須接受降低系統(tǒng)時鐘頻率以滿足預(yù)期功耗和能耗指標(biāo)的設(shè)計風(fēng)格。
組合并行設(shè)計具有很多優(yōu)點
* 將運算任務(wù)分配給幾個片上處理器來運行是典型的增加晶體管數(shù)量換取低主頻以降低功耗和能耗的方法。這是一種很好的工程折衷,由于時鐘速度和內(nèi)核工作電壓之間的緊密關(guān)系,時鐘頻率的提高將使功耗呈超線性增長。此外,較低時鐘速度的處理器不必采用最新的制程工藝。相同光刻節(jié)點情況下,采用速度較慢的低功耗制程的靜態(tài)漏電流水平比采用高性能制程的漏電流水平小三個數(shù)量級。
* 當(dāng)不需用到某個專用子系統(tǒng)時,可以切斷其電源供應(yīng)。因此,設(shè)計人員可以很容易地確定何時使用或不使用這些專用子系統(tǒng)。
* ASIP可以比通用處理器具備更高效的利用面積和功耗,而用作組合并行系統(tǒng)中的任務(wù)處理器。由于所使用的通用處理器核很少,也相應(yīng)地減少了晶體管的數(shù)量。組合并行的設(shè)計避免了與SMP硬件設(shè)計和多線程代碼相關(guān)聯(lián)的子系統(tǒng)所需的復(fù)雜交互與同步。一個四內(nèi)核的SMP系統(tǒng)帶有音頻、視頻和照相功能,在運行其他任務(wù)時仍不會撤消911緊急電話,因此通常需要進(jìn)行大量的仿真與分析。而高層實現(xiàn)交互的獨立子系統(tǒng)能很容易地進(jìn)行單獨和組合的驗證操作。基于SystemC 的系統(tǒng)仿真工具已經(jīng)可以方便地對組合并行的系統(tǒng)設(shè)計進(jìn)行仿真。不同的子系統(tǒng)可以用C語言來描述,并分別進(jìn)行驗證,然后利用指令集仿真器對整個系統(tǒng)進(jìn)行仿真,這比進(jìn)行RTL仿真快幾百甚至上千倍。值得注意的是,C語言已經(jīng)為嵌入式程序員廣泛接受并采用,因此軟件工程師無需學(xué)習(xí)新的語言。
第二種方式
計算通??梢詣澐譃橛瑟毩⑷蝿?wù)引擎構(gòu)成的流水線,因此便捷并行的第二種方式就是流水式數(shù)據(jù)流。各個流水式任務(wù)引擎都接收、處理并輸出數(shù)據(jù)塊,一旦處理任務(wù)完成后,數(shù)據(jù)塊就被送到下一級引擎。非對稱多處理算法常常出現(xiàn)在信號處理和圖像處理應(yīng)用上,諸如移動電話的基帶處理、視頻處理和靜態(tài)圖像處理等。流水線不但允許并行處理,而且還允許執(zhí)行基于ASIP的應(yīng)用,因為流水線中的每一個處理器都能高度集中于執(zhí)行某一部分的任務(wù)。
上述兩種便捷并行是互補的。因此,各個子系統(tǒng)的非對稱多處理能和流水式設(shè)計的組合子系統(tǒng)進(jìn)行融合。消費類、便攜式和多媒體應(yīng)用產(chǎn)品可能需要10到100個處理器,而這些處理器都將針對產(chǎn)品功能的特定任務(wù)進(jìn)行優(yōu)化。對基于非對稱多處理器的應(yīng)用進(jìn)行編程要比基于對稱多處理器的容易得多,因為不必考慮太多的交互任務(wù)依賴關(guān)系。經(jīng)驗表明通過這種方式能更清晰地編寫軟件,而且可以避免在同構(gòu)多處理器上運行多線程應(yīng)用所帶來的大量優(yōu)化問題。[!--empirenews.page--]
采用這兩種便捷并行方式可以巧妙地避開阿姆達(dá)爾定律。因為許多并行算法可分別地使用組合并行設(shè)計來加速,而單一算法的諸多部分(例如視頻編解碼)可以使用流水式設(shè)計進(jìn)行加速,所以整個系統(tǒng)的代碼將被分解為眾多小塊以分別進(jìn)行優(yōu)化加速。可以看出,由于并無增加軟件開發(fā)的需求,所以采用多核設(shè)計得到的益處要比阿姆達(dá)爾定律預(yù)測的大得多。
當(dāng)然,獲得這些益處的同時是要付出一定代價的。在多顆處理器之間進(jìn)行任務(wù)劃分和算法加速會導(dǎo)致設(shè)計需要使用更多的晶體管,這通常是采用分治的設(shè)計方法所必需的。然而,摩爾定律此時勝過了阿姆達(dá)爾定律,它使得增加的晶體管的成本非常低。相比之下,由高主頻和高性能處理技術(shù)造成的高能耗以及多線程軟件的開發(fā)復(fù)雜度所引發(fā)的成本問題則更為嚴(yán)重。