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

圖2:MCAPI 是一個(gè)消息傳遞應用的接口,帶有協(xié)議和語(yǔ)義規范,規定了其功能特性在任何應用實(shí)現中都必須遵循的行為規范。
評論