為計算密集型應用選擇最佳多核架構
對于SMP架構的編程來說,同樣有好多種選擇。在這種情況下,同一個 OS Domain內(nèi)包含了多個相同架構的CPU.選擇之一是采用操作系統(tǒng)內(nèi)部可用的線程模式。在標準線程的OS環(huán)境中,通常有多種語言可供選擇,例如:OpenMP、OpenCL和Cilk/Cilk++等。每種編程環(huán)境都有不同的語法,有些比較簡單,但提供的控制水平有所差異。相對于典型的C語言語法,有些需要擴展性的改變。有些則并不支持所有的架構,所以你需要仔細檢查所選的語言、編譯器與操作系統(tǒng)是否可以很好地相互匹配和支持。
如果你有興趣和能力將編程技藝發(fā)揮到極致,以便充分調(diào)動系統(tǒng)中的每一個“門”,可以考慮采用GPGPU (通用GPU編程,General Purpose GPU programming)。那么你需要注意到這些因素:語言、驅(qū)動程序和帶寬。GPU是專門設計用來在像素級對圖形進行操作,計算數(shù)據(jù)矢量,以及復雜的3D視圖高幀速處理。因此,它們具備針對小數(shù)據(jù)集快速進行復雜計算的能力。
驅(qū)動程序?qū)τ贕PGPU來說,絕不是無關緊要的瑣事,必須從操作系統(tǒng)方面獲得很好的支持。許多GPU提供商并不提供源代碼,因為這屬于他們知識產(chǎn)權的一部分。同時,他們通常也只是針對比較流行的操作系統(tǒng)才提供驅(qū)動程序??赡苡行┎僮飨到y(tǒng)他們并不支持。
接下來你要考慮GPGPU語言的選擇。OpenCL出自 Khronos標準。CUDA專用于Nvidia GPU。它們都采用了類似的方法來實現(xiàn)并行編程,而性能基準測試指標則有所不同,在不同硬件環(huán)境中的表現(xiàn)有些差異。由于OpenCL是一個開放標準,所以在大多數(shù)平臺中都可以使用,它帶有編譯器,而且不需要修改代碼就可以應用于CPU與GPU混合的系統(tǒng)。這顯然是值得注意到的優(yōu)勢。
最后,遠程GPU需要處理的數(shù)據(jù)量有多大,需要經(jīng)過何種類型的總線,也會影響你的決定。越是數(shù)據(jù)密集型的應用,GPU就應該越靠近CPU。如果兩者之間必須經(jīng)過PCIe 總線,那就必須與外設分享帶寬,這很可能會使性能受到較大的影響。如果GPU與CPU比較接近,由此造成的影響會相對降低。
特別是對于消費電子產(chǎn)品來說,如可穿戴設備、移動手持設備、數(shù)字成像設備、家用網(wǎng)關以及寬帶接入等設備,面臨的一個重要挑戰(zhàn)就是以小體積、低功耗的運行環(huán)境來處理越來越大量的圖像、聲音甚至人體生理特征數(shù)據(jù)。為了針對這類運行環(huán)境在較短的時間內(nèi)開發(fā)出優(yōu)異的多核系統(tǒng),開發(fā)平臺如何選擇就顯得尤為關鍵。
風河公司最近針對最新版的VxWorks 7實時操作系統(tǒng)推出了面向各個行業(yè)的行業(yè)領域。這些Profile針對VxWorks 7擴充了一系列非常有價值的功能,幫助客戶滿足不斷演變的市場和技術要求,從而抓住物聯(lián)網(wǎng)所帶來的新的市場發(fā)展機遇,其中就包括消費電子領域,專門針對小體積聯(lián)網(wǎng)設備,如可穿戴設備、移動手持設備、數(shù)字成像設備、家用網(wǎng)關以及寬帶接入設備等,提供快速啟動、小體積、低功耗的運行環(huán)境,還特別強調(diào)對于GPU和2D/3D圖形用戶界面的支持能力,因而可以將多核處理器的優(yōu)勢最大限度地發(fā)揮出來。
總之,在這里并不存在點石成金的魔法棒。你必須深入研究每一種架構選擇,包括硬件、軟件、語言以及編譯器,才能準確地評估每一部分對整體性能的影響,才能針對特定的算法進行最佳的優(yōu)化。一勞永逸,這在高性能計算系統(tǒng)中是不存在的,至少到目前為止是如此!
圖2:MCAPI 是一個消息傳遞應用的接口,帶有協(xié)議和語義規(guī)范,規(guī)定了其功能特性在任何應用實現(xiàn)中都必須遵循的行為規(guī)范。
評論