反對GPU運算再思考的十大理由

張貼者:2011年8月5日 上午7:24marketing Honghu   [ eddie liu 已於 2012年5月8日 下午8:47 更新 ]
nvidia
反對GPU運算再思考的十大理由  
Dr. Vincent Natoli, Stone Ridge Technology
http://www.hpcwire.com/hpcwire/2011-06-09/top_10_objections_to_gpu_computing_reconsidered.html?featured=top
                                                                                                                                            
無論怎麼看高速運算領域,在過去幾年
GPU運算的出現,具有卓越且超乎預期的發展,它是一種囊括了所有特徵的顛覆性技術。一開始是一小群的志願幹部勇於投身非常複雜的繪圖語言如Cg語言以及GLSL語言,並且企圖將GPU導入通用計算的領域。它被一群具有強烈渴望與挑戰的高速計算者擁護著。它提供了遠超出常人想得到及不同於傳統解決方案的跳級式、龐大序列性能。

-
Cg語言(C for Graphics是為GPU編程設計的高級著色器語言,由NVIDIA公司開發)
-
GLSL語言(OpenGL Shading Language 也稱作 GLslang,是一個以C語言為基礎的高階著色語言)

當 我們在觀察,當NVIDIA CUDA即將要滿四周年的同時,這個幾乎從零開始的通用計算GPU新運動,有很多人試探,如先鋒者投入並且採納這個技術。但也有許多人因各種理由作壁上 觀。在我們的工作當中,我們遇到了許多的後者,因此我們編寫一份針對常見的問題、考量和斷言,來協助評估這個技術。以下是一份試圖解決這些反對意見、反思 這些的最近的動態發展、和清單,並根據我們最好的推測這未來如何展開。明顯地,GPGPU並不是針對全部的高速計算的應用的解決方案,但許多人都發現在該技術具有好的成本效益在許多如地震成像,電磁學,分子動力學,財務評估,醫學影像等


我不希望重寫我的程式碼或學習一門新的語言
沒 錯,你將不得不重寫你的程式碼來運用圖形處理器。然而,如果你正在開發一個CPU平行化程式,重寫你的程式碼是不可避免的。唯一的問題是哪個平台,將你的 目標。瞄準在多核CPU代表了一種在平行理論的三層模型,在行程(Progress)、執行緒(Thread)、暫存器(register),分別是使用MPI、OpenMP/ pthreads 和SSE/ AVX的指令集。使用CUDA做GPU編程,並沒有特別困難,就我們所看見,特別是處理器速度上限(compute-bound)與記憶體速度上限(memory-bound)優點將更為顯著。

*CPU Bound Job

定義:
(一)Def:此類型的工作對於CPU computation需求極大,但對於I/O operation需求極小,所以工作的效能完全取決於CPU的速度。例:氣象預估、科學家實驗計算...etc

(二)若系統中充斥大量的CPU Bound Jobs,則在Buffering的機制之下,CPU運作速度很慢,而I/O device會被迫等待。
(i)Input情況下:I/O device面對滿的Input Buffer。

(ii)Output情況下:I/O device面對空的Output Buffer。




如 果您已經有一個平行的代碼,將可以從 GPU獲得什麼好處?以猜量推算(Back-of-the-envelope calculations)將可以獲得5倍至40倍之間的速度改善,以單顆的GPU晶片對比單顆的CPU晶片而言(chip-to-chip comparisons)。說來有趣,這個估值也同樣在許多已經發佈的GPU的應用程序。這些比較量大致保持不變,在過去幾年英特爾和NVIDIA的兩代 產品之間。

*「猜量推算」(back-of-envelope calculation)是科學家、工程師,以及出色商人常用的方法,以簡馭繁,好掌握複雜問題的核心。「猜量推算」體現了建模(modelling)的基本思維方法,但不限於學科範圍,具通識精神。


CUDA 是C的延伸指令集可以被有經驗的程式開發者快速的運用。這樣的平行計算的模型對於我們建置億億級的運算系統,仍遠遠沒有解決的做法。然而,我相信最終的解 決方案將會更像是數據平行(data parallel, loop-level parallelism )的CUDA模型,會比任務平行(task parallel )的CPU更具有替代性。在先前的HPCwire我有提出有關CUDA的看法,讓使用者可以用對比到執行緒的概念來平行化他們的問題。這是一個比較佳的平 行化的開發方案。可以更自然地擴充多GPU從單一節點到多重運算節點。

*
exascale 億億級運算系統


由加泰羅尼亞理工大學(Universitat Politecnica de Catalunya)與伊利諾大學的IMPACT研究小組(http://impact.crhc.illinois.edu/),在這個方向步驟上已經進行,且有傑出的學術上的表現在加速器專用全域記憶體計劃Global Memory for Accelerators ,GMAC)。在業界上,有在挪威創立的HUE這家公司產品HUESPACE的計算函式庫,以及他的姊妹公司Headwave .  一家專注於石油與天然氣探勘的公司均有傲人的運用GPU的表現。


2.我不知道針對自己的問題,可以獲得怎樣的效率改善


HPC 的程式可以分為CPU限制以及記憶體限制。對於CPU限制,我們比較了NVIDIA的Fermi M2090以及Intel的westmere. NVIDIA的Fermi擁有512個核心,以時脈1.3GHz進行。Westmere擁有6核心,時脈可以達3.4GHz,以核心數-Hz的對比約為 32倍。假如你的CPU代碼使用SSE指示集
,有可能可以額外的提高4倍的速度。而對比,GPU的效率仍約為8倍(接近於GFLOPS的尖峰對比值)

對 於記憶體速度上限我們比較 GPU主要記憶體頻寬為177 GB/秒以及每一顆CPU對於主機板的記憶體頻寬32 GB/秒約為5.5倍。假如你的程式碼是處理器速度上限,期待值將介於5倍多的高度優化的SSE程式碼至20倍左右的一般的程式編碼。假如是記憶體速度限 制將期待速度提升介於5倍左右的單晶片比較。

這將會有幫助的,去考慮一個平行方案時,考量問題以實際的預算邊際成本。假如你的程式是記憶體速度上限,那你將必須考慮最貴的方案去增加記憶體頻寬。或者增加另外一個GPU運算卡,以約每15美金 (GB/Second)的成本。或者增加另外一個計算節點以約80美金(GB/second)的方案。後者的方案將增加計算的機櫃佔用空間以及會有額外的作業系統導致的延遲。


對於計算速度上限的程式,可以採用類似的計算,也同樣會產生每一gigaflops的提升導致的邊際成本。
然 而對於混合計算速度上限與記憶體速度上限的程式,對於大部分的程式都是如此。GPU程式可以減少記憶體速度的延遲透過juggling數千的執行緒,並且 持續的計算,運用儲存在暫存器上數據,且可以隨時的提取。透過減少的記憶體速度延遲,GPU可以更容易的達到計算效能的提升。


3.PCIe頻寬將扼殺我的程式效能
這 個爭議提及基於PCIe頻寬的GPU計算將影響計算強度(computational intensity).計算強度有各種不同的定義,但這目的讓我們說明一個浮點的數據運算根據在每一個浮點數據的傳輸。的確有一個門檻工作得做,就是確保 每一個byte的數據傳送到GPU運算卡,得確保這個數據傳入的計算效益是值得的。



例 如,以PCIe v2.0 x16的頻寬總計約6GB/second在實際上。觀看起來,可以在一秒內將資料傳輸到M2090的6GB的主要記憶體上。M2090是一個浮點運算的怪 物,在M2090上的雙精準的浮點運算值為665 gigaflops尖峰值,可以輕易的處理很多的計算在一秒之內。並且填滿主要記憶體的資料空間。

另外舉例,假如PCIe的傳輸時間並不超過計算時間的10%,M2090必須要做數千的浮點運算在卡上的儲存資料區,在資料重新被覆蓋之前。GPU的演算卡,則必須要盡可能的保存在卡上的記憶體盡可能的久一點、時間更長一點。這是關鍵。


此外,CUDA允許不同步的資料重疊,在計算當中,做PCIe的資料傳輸。巧妙地運用這些特徵可以讓程式開發者在隱藏掉一些或者所有的PCIe的資料傳輸時間,在計算的過程當中。演算法特別在以時間切分的物理值如FDTD(Finite Difference Time Domain)。或者典型的分子動力學計算,當有N2的粒子對粒子的相互作用,所引導致的有意義的資料進行重複使用,將可以達到相當高的計算強度效果。


演算法將是沒有效率的在一些孤立的問題上面如單純的向量內積就會產生很差的計算效果。
假如問題是可以對應到多顆GPU,就必須要減少資料的傳輸。例如僅傳送border data利用預先的資料在區域進行切割。

4.有關阿姆達爾定律(Amdahl’s law)
Amdahl's Law背後的意義就是,倘若你要提升效能,最有效益的方式,便是直接改善執行時間最長的那個部分,因為針對這去調整,可以提供對系統整體最多的改善。



想像一下,例如,你可以減少運行時你的串行程序為零。
如果整個串型佔整個代碼 50%,則平行處理的效能不可能超過2倍;
若佔 90%的運行時間將接近10倍的加速比。所以實際的加速比更低

最有效的反到阿姆達爾定律反對 GPU計算性能的觀察,現代建築要求所有代碼寫的大規模並行的串行部分減少到最低的可能... ...沒有其他遊戲小鎮。這才是真正的CPU平台上,以及對 GPU平台。


唯一的高性能計算平台,我們會做出的大規模並行與阿姆達爾定律同樣適用 CPU實現。真正的問題是,你在哪裡要運行並行部分的代碼 ... ...在CPU或GPU上的?


* 阿姆達爾定律是計算機系統設計的重要定量原理之一,於1967年由IBM360系列機的主要設計者阿姆達爾首先提出。該定律是指:系統中對某一部件採用更 快執行方式所能獲得的系統性能改進程度,取決於這種執行方式被使用的頻率,或所佔總執行時間的比例。阿姆達爾定律實際上定義了採取增強(加速)某部分功能 處理的措施後可獲得的性能改進或執行時間的加速比。
  阿姆達爾曾致力於並行處理系統的研究。對於固定負載情況下描述並行處理效果的加速比s,阿姆達爾經過深入研究給出瞭如下公式:
  S=1/(a+(1-a)/n)
   其中,a為串行計算部分所佔比例,n為並行處理結點個數。這樣,當a=0時,最大加速比s=n;當a=1時,最小加速比s=1;當n→∞時,極限加速比 s→ 1/a,這也就是加速比的上限。例如,若串行代碼佔整個代碼的25%,則並行處理的總體性能不可能超過4。這一公式已被學術界所接受,並被稱做“阿姆達爾 定律”(Amdahl law)。


5.NVIDIA這間公司會消失嗎?
HPC歷史上不乏許多超級電腦公司,試圖在平行計算領域中大躍進留下了殘跡。簡短名單包括
Thinking Machines,Maspar,KSR,Mitrion等。這些常聽說的英勇事蹟和在他們身後的人們應該承認其遠見和發揮的作用,他們在創作受阻,隨著時間推移導致了更大的集體了解什麼可行,什麼不可行。我們誠心感謝做為歷史借鏡的他們。

然 而NVIDIA並非一間超級電腦公司。這家一年有50億美元營收的公司,大部分的營收來自顯示卡和嵌入式處理器,它銷售給巨大且市場狂熱PC遊戲玩家。它 的相對獨立性,對於 HPC是一種力量,如果一切HPC使用NVIDIA的GPU運算消失​​仍然有一個美好的和有利可圖的生意。只要有咖啡因成癮的青少年願意發揮虛擬戰爭遊 戲 NVIDIA會留下來。事實是,NVIDIA的後勁更好,所處的市場更大以及更安全,比起已經是相當長時間的超級電腦公司-CRAY電腦.

此外,NVIDIA已經公開發布其遠景和路線圖的技術開發出大約 6年。
GPU在NVIDIA相當有野心與抱負的規劃中,將佔據在未來計算的架構當中,將從輔助作用的角色轉為更主要的計算運算角色。
沿著這方向,NVIDIA他們有一些非常強大的計算引擎已經被規劃著。



6.GPU運算卡沒有針對我的問題,提供足夠的繪圖記憶體容量


在M2090與M2070,
GPU運算卡內存目前僅提供到 6 GB。這對於需要更大的記憶體存取的計算演算法,將是一個特別的問題。而這樣的一個問題,可以透過在單一運算節點上存取多張卡以解問此問題。


例如,戴爾 C410x PCIe擴展機箱,最多可包含16張GPU卡,總計可以達到96 GB的記憶體空間。
適 當的區域分割(domain decomposing)你的問題,分散到16個獨立的GPU去,將是一個非常有效率的做法,來側面避開記憶體的限制。對於一些物理問題的性質將相當的有 效率,特別是計算的量、特質是在切割後的volumes上面,而分享的資料是在物理面的表面


大 部分主要的問題是演算法需要隨機的存取大型的矩陣。例如huge hash tables或者其他問題,需要隨機的針對矩陣查找。目前這一代的GPU卡的確不是一個有效率的解決方案針對這種案例。然而,記憶體容量相對是相對的便宜 的,且很穩定的持續改善容量大小。可以預期未來的幾代,GPU卡的記憶體肯定會持續的增加。



7.我將等待INTEL推出的更多的CPU核心/代號騎士號角(Knights Corner)的大於50核心CPU

更 多的核心數將對計算速度上限的應用有所幫助,但是仍需要考慮的是,隨著更多的CPU內核的增長,GPU的核心數也是同樣可隨著增長。 比較過去的兩個技術的世代顯示在CPUs與GPUs之間,有漲有落,有所差異,但成長始終不是零的,不是沒有成長的。我們可以預期將會持續的成長,在核心 數的部分。對於頻寬的速度上限問題,核心數量的添加與成長顯然會比頻寬速度的增長來的容易。


英特爾公司對於Knights Corner的計劃, 僅僅宣布約一年左右時間,也幾乎確認是承認了對於GPU競爭下,在x86架構下的數據平行運算的需求。對於所有的Knight Corner的詳細計畫與規格目前仍然不太清楚,然而應該是沿用Knights Ferry的原型做為基準。我們應該可以預期可以超過50個核心,也處理器頻率超過1.2GHz的核心。每一個核心擁有512 bit的向量處理單元,並且支援4個超線程。使其成為強大的HPC競爭者。然而對於Intel的計劃發展模式、開發出的產品價格、以及量產日期或者其他更 關鍵性的資訊,在目前這個時候,是難以了解以及獲取的。

*Knights Ferry的核心頻率是1.2GHz,擁有32個x86核心。支援特別的超執行緒技術,單一核心能模擬成四個核心。
* 據英特爾透露,Knights Ferry有32個x86核心每個核心頻率1.2GHz,每個核心支援四個超線程,而成倍增加的數目達到邏輯核心線程共128個(線程)的執行(4個核 心)。 該單位插槽採用PCI Express的2.0配至1-2GB的GDDR5記憶體,該晶片還擁有8MB的L2快取,好奇的是東西本身,具有很強的並行應用能力但是並不需要大量的 快取。



對 於Knight Corner是成功的,它符合著滿足主要市場的論點,並且仍致力於延續x86的架構,並且主宰HPC計算的市場。它仍必須另外尋找一個基礎深厚的市場 (broad-based market)以獨立於幾乎與世隔絕(cloistered world)的HPC科學家們。
對 於Knight Corner是成功的,將必須符合商品市場的爭論已經使得x86架構主宰HPC計算。它必須找到一個具有廣泛基礎的市場外與世隔絕的世界HPC科學家。商 品的圖形是一個合理的選擇這個更廣闊的市場,但它已經很好解決由NVIDIA和AMD。圖形顯示(Commodity graphics)是這寬廣的市場合理的選擇,然而NVIDIA與AMD早就在這個市場落戶深耕已久。


8.我不喜歡專有語言(proprietary languages)

專有語言這裡指的是發展一個語言僅有一個組織,將有可能導致發展的不確定性以及朝不想要的方向發展或者在沒有支持等等問題。CUDA就屬於這一類。然而使用CUDA的優勢很明顯:1)它可以實現 NVIDIA硬件特定的優化; 2)沒有一個會議作出roadmap的決定,以及3)支持新的NVIDIA硬件功能更加迅速。

但 如果專有語言的開發在您的組織中,是一個被反對的阻礙(show-stopper).那OpenCL就是一個非專有語言的最完美的選擇,它同樣被 Apple,NVIDIA,AMD,Intel以及許多其他提供可攜性、跨平台等產品概念的組織。然而我仍須強調,注重跨平台的開發,將導致程式的效能被 減少。


9.我等待著可以把CPU程式直接轉譯為GPU程式的魔法程式轉換器出現

這 分為好消息與壞消息。好消息是CPU轉換到GPU的程式轉換器已存在。壞消息是它不可能產生專家般的高性能程式代碼。沒有經驗的使用這些工具,比起一個公 司針對特定的技術的程式轉譯,使用CUDA,效率並不會特別好。(native code是機器碼,native CUDA是本機的CUDA,指直接運用CUDA編寫)。
程式開發者的缺發與不偏不倚的來源對於使用這些方法的數據。

然 而有兩間公司提供了這樣的方案,如PGI與CAPS HMPP。他們提供這兩樣的編譯器給完全不會開發的人員或者是既有的程式(非原本開發者)。都有提供試用的版本在網路上,非常的容易取得,而這樣的方案可 以輕易的讓使用者進行測試與轉譯程式。而我們可以期待的是,未來將如支援openMP一般的有一些標準化的東西出來,將可以使的轉譯工作進行得更為效率。

10.我有N個代碼,但只有一份 IT預算

通俗點的說,這將是一個"要就幹大的,要不就不要幹,要就做第一流,要不就回家種田"的進退兩難的窘境。
要 增加一個具有GPU功能的預算節點,對於大多數的組織,因為有著固定的IT預算,同樣的預算上,就必須要做一個選擇,選擇建構少一點節點,但卻有威力更強 大的GPU運算節點,或者選擇在節點更多一點,但比較沒有威力的傳統CPU節點。對於經濟規模效益,要不選擇一個具有100%都有GPU運算節點的,或者 就根本是0%的GPU節點。


這 特別真實的在編列預算為基礎的現今組織,在同樣相當競爭的市場當中,資料中心的處理資料的運作是一年365天,天天運轉不中止的(24/7/365)。然 而,在最差的狀況下,有同時管理兩種版本的所有東西:資料中心的管理軟體、排程工作、不同的編譯器、測試與驗證的環境、以及相關的應用程式等等(cluster management scripts, scheduling, compilers, testing and validation, application code)

新科技、新技術的採用,在大型的商業組織,會被高度重視的要求計算出投資報酬率(ROI)
有 關"go big or go home"的論調顯示這樣的焦慮是有智慧的。設想更為周全的組織,針對這樣的困難的問題,將會量化已知的成本,並且推測、估計出未知的科技轉移成本。總結 最後一點以及先前所提的九個論點,管理者要去思考這些投資(程式的發展、人員的技巧、採購新的機器,需要重新再訓練等等)以及會有怎樣的回報(性能、可擴 充性、以及威力性)


每家公司都必須戰戰兢兢的制定出其獨特的投資回報率方程式,理性的面對將面臨的阻礙以及保守的利潤率。使用傳統的財務分析方法,資料投資則必須產出利潤回報給股東、投資人,以股權的比例進行分配。而且必須要比較其餘的投資機會,運用該公司在該領域所擁有的專業能力。


總結GPU計算,在HPC的市場,在過去的四年之間被採用的,有著不可抹滅的價值。

上列的十個主要的反對意見,是大部分從個人、組織常提出的聲音。正如開頭所提,GPGPU並不是針對所有的HPC問題的解決方案。但是公司、組織可能因為錯誤的決策理由而輕忽這個科技技術的變革,以致於少或取了更有意義與價值的效能增長,以及所節省的費用。


最 後,一個組織是否在這個年度導入朝向GPU計算,做為年度的解決方案。是要考量諸多,從謹慎且斟酌的戰略面思考,目前既要符合最好的成本效益,且展望未來 的基礎上,考量到IT系統的架構、選擇的程式開發方式,以及能源消耗等面向,來帶領著我們進入到億億級的超速電腦運算領域去。

About the Author
關於作者
Vincent Natoli is the president and founder of Stone Ridge Technology. He is a computational physicist with 20 years experience in the field of high performance computing. He worked as a technical director at High Performance Technologies (HPTi) and before that for 10 years as a senior physicist at ExxonMobil Corporation, at their Corporate Research Lab in Clinton, New Jersey, and in the Upstream Research Center in Houston, Texas. Dr. Natoli holds Bachelor's and Master's degrees from MIT, a PhD in Physics from the University of Illinois Urbana-Champaign, and a Masters in Technology Management from the University of Pennsylvania and the Wharton School.
Stone Ridge Technology is a professional services firm focused on authoring, profiling, optimizing and porting high performance technical codes to multicore CPUs, GPUs, and FPGAs.


Vincent Natoli是Stone Ridge Technology的創辦人。他是一個在HPC領域有20多年經驗的計算物理學家。他曾為HPTi的技術總監。在那前十年是ExxonMobil公司的 資深物理學家。而他們企業的研究實驗室位於新澤西州Cliton,與其德州休斯敦的上級研究中心。Natoli博士擁有麻省理工學院物理學士和碩士學位,伊利諾大學香檳區的博士、和賓州大學及華頓商學院的科技管理雙碩士。Stone Ridge Technology是一家專業服務公司,專注於創作,分析,優化和移植技術規範,以高性能多核CPU,圖形處理器和FPGA。
Comments