為什麼 GPU 會成為通用計算的寵兒?
英偉達在 2016 年的強勢崛起,GPGPU (GPU 通用計算)功不可沒。
有許多原因使 2016 稱得上是 GPU 之年。但事實上,除了在核心領域(深度學習、VR、自動駕駛),為什麼把 GPU 用於通用計算仍然很模糊。
搞清楚 GPU 的作用,要先從 CPU 開始。大多數人對電腦 CPU 並不陌生,這可能要歸功於英特爾——作為在事實上壟斷了 PC、伺服器平臺 CPU 近十年的供應商,英特爾的巨幅廣告支出,直接導致每個人都或多或少聽說過英特爾從筆記本到超算的各層級產品。
CPU 的設計用途,是對多種應用進行低延遲處理。CPU 非常適合用於多功能任務,比如試算表、文字處理、 Web 應用等等。於是,傳統上 CPU 是絕大多數企業的首選計算方案。
過去,當公司的 IT 部門經理說要訂購更多計算設備、伺服器,或者增強雲端的性能,他們一般想的是 CPU。
雖是個多面手,一枚 CPU 晶片能承載的核心數量卻有很大限制。大多數消費級晶片只有八核。至於英特爾的企業級產品線,除了為平行計算而設計的 Xeon Phi 這個“怪胎”,主流至強產品(E3、E5、E7 系列)最多只有 22 核。
CPU 從單核發展到今天的多核用了幾十年。對 CPU 這麼複雜的晶片進行擴展有極高的技術難度,並且需要綜合多個方面:比如縮小電晶體體積、降低發熱和優化功耗等。今天的 CPU 在性能上所取得的成績,很大程度上要歸功於英特爾和 AMD 工程師的多年努力探索。而至今全球未有第三家足以與其 競爭的 PC CPU 供應商,在側面說明了他們的技術積累,以及研發 CPU 的技術難度。
GPU 才是摩爾定律的寵兒?
用 FLOPS 來衡量,CPU 每年大約有 20% 的性能提升(雷鋒網注:此處有爭議)。而這是對於高度優化的代碼而言。
隨著 CPU 性能提升的放緩(雷鋒網注:尤其近幾年來晶片制程工藝進步緩慢。矽基晶片的極限大約在 7nm,而替代矽的新技術尚未成熟),其資料處理能力越來越跟不上資料增長的速度。做個簡單對比:IDC 估算,全世界資料增長的速度大約是 40%,並在不斷加快。
簡單來說,摩爾定律目前已終結,而資料卻在指數級增長。
英特爾 Skylake、Kabylake、Coffelake 路線圖
資料增長速度超過 CPU 性能提升速度帶來的後果是:人們不得不利用各種技巧來避免計算性能瓶頸,比如降採樣、索引(indexing),或者採用昂貴的 scale-out 戰術來避免長時間等待系統回應。
我們現在面對的資料單位是 exabytes,並正在邁向 zetabytes。而曾經顯得無比龐大的 TB,在消費者領域已經十分常見。企業級 Terabyte 存儲的定價已降到個位數(美元)。
在這個價格,企業把所有獲取的資料保存起來,這過程中,我們生成了足以淹沒 CPU 級別資料處理能力的工作集。
這跟 GPU 有什麼關係呢?
GPU 的架構與 CPU 很不一樣。首先,GPU 並不具備多功能性。其次,與 消費級 CPU 個位數的核心數目不同,消費級的 GPU 通常有上千個核心——特別適合處理大型資料集。由於 GPU 在設計之初有且只有一個目的:最大化平行計算。每一代制程縮減直接帶來更多的核心數量(摩爾定律對於 GPU 更明顯),意味著 GPU 每年有大約 40% 的性能提升——目前來看,它們尚能跟上資料大爆炸的腳步。
CPU 與 GPU 的性能增長對比,用 TeraFlops 橫樑
GPU 誕生之初
在 90s 年代,一批工程師意識到:在螢幕上進行多邊形圖像渲染,本質上是個能並行處理的任務——每個圖元點的色彩可以獨立計算,不需要考慮其它圖元點。於是 GPU 誕生,成為比 CPU 更高效的渲染工具。
簡而言之,由於 CPU 在圖像渲染方面的能力不足,GPU 被發明出來分擔這部分工作,此後就成了專門搞這方面的硬體。
有了上千個更加簡單的核心,GPU 能高效地處理讓 CPU 十分吃力的任務。只要有合適的代碼配合,這些核心就能處理超大規模的數學運算,實現逼真的遊戲體驗。
但有一點需要指出:GPU 的強大性能,不只來源於增加的核心數量。架構師們意識到,GPU 的處理性能需要有更快的記憶體相配合才能發揮。這讓研究人員不斷研發更高頻寬版本的 RAM 記憶體。今天,GPU 的記憶體頻寬相比 CPU 已經有數量級上的領先,比如前沿顯存技術 GDDR5X,HBM2,還有開發中的 GDDR6。這使得 GPU 在處理和讀取資料上都有巨大優勢。
有這兩大優勢,GPU 在通用計算領域有了立足點。
GPU 與 CUDA
事實證明,高端遊戲玩家和電腦科學家在硬體需求上有不少交集。電腦科學家們逐漸發現,利用 GPU 的大量核心執行複雜數學運算,在 HPC 領域有巨大應用前景。但是,寫出能高效運行於 GPU 的代碼極度困難。想要駕馭 GPU 計算性能的研究人員,必須把相關運算“黑進”圖形 API,讓顯卡以為要處理的計算任務和遊戲一樣:決定圖元色彩的圖像渲染計算。
但一切在 2007 年發生了變化。這一年,英偉達發佈了 CUDA(Compute Unified Device Architecture)。 它支援 C 語言環境的平行計算。對於那些靠 C 語言發家的程式猿,他們可以直接開始寫基礎的 CUDA 代碼,一系列運算任務從此可以很容易地並行處理。
CUDA 誕生的結果是:似乎在一夜之間,地球上的所有超級電腦都採用了 GPU 運算。深度學習、自動駕駛以及其他 AI 領域開始煥發光芒。
平行計算
平行計算是發揮 GPU 性能的關鍵。這意味著你可以同時處理運算,而不是一步步進行。複雜問題可被分解為更簡單的問題,然後同時進行處理。平行計算適用於 HPC 和超算領域所涉及的許多問題類型,比如氣象、宇宙模型和DNA 序列。
並不是只有天體物理學家和氣象學家才能充分利用平行計算的優點。事實證明,許多企業應用能從平行計算獲得超出尋常比例的好處。這包括:
資料庫查詢
密碼學領域的暴力搜索
對比不同獨立場景的電腦類比。
機器學習/深度學習
地理視覺化
你可以聯想一下你們公司所面臨的資料問題——那些資料量和複雜程度極高,你以前連想都不敢去想怎麼處理,但深層次分析很有可能會有助於解決的問題。我懷疑這樣的問題是可平行計算的——而 CPU 層次的計算解決不了,不代表 GPU 也不行。
CPU vs. GPU 小結
作為小結,GPU 在以下方面有別於 CPU:
一枚 GPU 晶片有幾千個核心。通常意義的 CPU 最多只有 22 個。
GPU 為高度並行的運行方式而設計。CPU 為一步步的連續計算而設計。
GPU 的記憶體頻寬比 CPU 高得多。
CPU 適合於文字處理、運行交易資料庫、網路應用等場景。 GPU 適用於 DNA 排序、物理建模、消費者行為預測等任務。
經濟成本
上文中,我討論了問什麼 GPU 代表著計算的將來。但它的商用價值如何呢?
GPU 在經濟成本上其實佔優勢。首先,一個完整的 GPU 伺服器比一個完整的 CPU 伺服器要貴很多。但兩者之間難以直接對比。一個完整的 8 路 GPU 伺服器,成本可達八萬美元。但一個中等的 CPU 伺服器配置大約只需要 9000 刀。當然,RAM 和 SSD 的使用量對價格有很大影響。
咋看之下,CPU 好像比 GPU 划算多了。但請注意,250 個這樣的“中等” CPU 伺服器在平行計算性能才相當與一台如上所說的 GPU 伺服器(雷鋒網注:只是作者個人的估算,以支撐他的觀點,大家看看就好)。
很明顯,如果你要做的只是平行計算,選擇 GPU 伺服器要划算多了。極端情況下,如果硬要上 250 台 CPU 伺服器,加上電費、場地費、網費、溫控、維護管理費,最終價格會是天文數字。因此,如果平行計算占了公司工作量的大部分,從投資回報率的角度,GPU 是正確的選擇。
對生產力的影響
在延遲對資料分析的影響方面,我已經寫了很多。我的基本論點是:當一個開發者需要等待幾分鐘才能得到查詢結果,人的行為會發生變化。你開始找捷徑,你開始用更小的資料集執行查詢操作,你只會執行不耗費時間的查詢,你不再探索——執行幾個查詢就把這當做是方向。
提高電腦回應速度對生產力的提升很難衡量。但你可以想一想,寬頻時代和撥號時代的生產力差別。
最後,在雲時代,與其建立自己的 GPU 伺服器, 租用 GPU 雲計算服務對於很多客戶來講十分划算。GPU 計算的門檻已經無限降低。
via
mapd