異構計算大師拋出權威論斷 CPU與GPU不存在取代關系
近些年的計算領域,異構計算可算是最為引人注目的話題之一。過去幾年里,以NVIDIA的CUDA為代表的基于C語言的API為GPU計算贏得了更廣泛的用戶。2009年,全球召開了兩次異構計算大會。最近來自NVIDIA的消息中提到,目前CUDAZone網(wǎng)站上的CUDA應用程序與論文數(shù)量已經(jīng)突破了500大關。
然而,異構計算還面臨很多認識上的誤區(qū)。例如,在一些報道里,提出了“未來GPU可能會取代CPU”、“GPU的內(nèi)核數(shù)量是CPU的幾百倍,計算速度與之成正比”等論調(diào)。
事實上,CPU與GPU從設計思路和架構上先天就存在著差異。這些差異決定了GPU不可能取代CPU,或者說,能取代CPU的GPU已經(jīng)不再是GPU了。
異構計算的真正意義,其實在于發(fā)揮不同架構處理器在不同方面的優(yōu)勢,從而實現(xiàn)系統(tǒng)整體計算能力的最大化利用。
CPU和GPU從設計之初,其目標就各不相同,這可以用一個比喻來說明:電工??频漠厴I(yè)生與英語專業(yè)的畢業(yè)生,前者修理電器的速度遠遠快于后者,這并不能說明前者的整體能力遠高于后者——其實,對較復雜的進口電器,可能需要后者將說明書翻譯成中文,前者再按照說明書將電器修好。
CPU在設計之初就是按照兼顧程序執(zhí)行的并行性、通用性和平衡性的要求來規(guī)劃的。在改進指令執(zhí)行效率的過程中,CPU中被不停地加入新的指令集,這使得CPU已經(jīng)成為計算機中設計最復雜的芯片。例如,除了支持常規(guī)指令集之外,英特爾的SSE、AMD的3DNow!等指令集都是在技術演進構成中逐漸加入CPU的,而僅SSE4指令集就包括54條新指令。
與之相反,GPU的單一處理核心卻較誕生之初顯得簡單——最早,針對圖形處理的關鍵計算,GPU將處理單元分為頂點著色器、光柵化引擎、紋理貼圖單元等不同部分,分別完成不同計算任務。而統(tǒng)一渲染架構提出后,統(tǒng)一的計算單元取代了之前的不同單元。以NVIDIAGeForce8800為例,它具有16組共128個統(tǒng)一標量著色器,也被稱作流處理器。這里的每個流處理器實際上只能完成1D標量的加乘操作。在實際計算中,必須將所有的運算拆分成1D運算來執(zhí)行。
從兩者的差異可以看出,對于復雜指令調(diào)度、循環(huán)、分支、邏輯判斷以及執(zhí)行等的程序任務,GPU有心無力。只有在可拆分成簡單指令的重復的高度并行數(shù)值計算中,GPU才能體現(xiàn)出其強大的能力。對此,美國StoneRidge科技公司創(chuàng)始人兼總裁文森特(VincentNatoli)曾做出“如果算法涉及許多分支指令,很難用流計算或SIMD處理,那么CPU將是最佳選擇;如果算法是浮點SIMD類型的問題,可劃分為許多對不同數(shù)據(jù)執(zhí)行相同操作的獨立線程,那么GPU將是很好的選擇;如果問題主要涉及整數(shù)或定點,可以被轉化為流的形式,具有非傳統(tǒng)的數(shù)據(jù)表達形式和空間并行性,F(xiàn)PGA則是最佳選擇”的論斷。
另一方面,針對GPU的程序編寫也較為困難。文森特指出,根據(jù)經(jīng)驗,即使使用CUDA這一很容易掌握的API,同一算法在CPU、GPU上開發(fā)的時間也大致為1∶1.25。
由以上分析可以看出,GPU與CPU并不存在取代的關系。相反,兩者互相取長補短才能實現(xiàn)最終的良好系統(tǒng)表現(xiàn)。
為了更好地發(fā)揮不同架構處理器的能力,開發(fā)人員也在不遺余力地尋找更快捷地實現(xiàn)異構計算的方法。OpenCL就是建立異構計算標準的嘗試之一。人們設計它的目的是“用平易近人的語言,使用不同的計算支援”。
如果OpenCL這個標準制定完成了,它將給異構計算帶來多大的影響呢?讓我們拭目以待。