本文經過介紹 GPU 編程技術的發展歷程,讓你們初步地瞭解 GPU 編程,走進 GPU 編程的世界。編程
曾經,幾乎全部的處理器都是以馮諾依曼計算機架構爲基礎的。該系統架構簡單來講就是處理器從存儲器中不斷取指,解碼,執行。緩存
但現在這種系統架構遇到了瓶頸:內存的讀寫速度跟不上 CPU 時鐘頻率。具備此特徵的系統被稱爲內存受限型系統,目前的絕大多數計算機系統都屬於此類型。服務器
爲了解決此問題,傳統解決方案是使用緩存技術。經過給 CPU 設立多級緩存,能大大地下降存儲系統的壓力:網絡
然而隨着緩存容量的增大,使用更大緩存所帶來的收益增速會迅速降低,這也就意味着咱們要尋找新的辦法了。架構
1. 70年代末期,克雷系列超級計算機研製成功 (克雷1當年耗資800萬美圓)。工具
此類計算機採用若干內存條的共享內存結構,即這些內存條能夠與多個處理器相鏈接,從而發展成今天的對稱多處理器系統 (SMD)。oop
克雷2是向量機 - 一個操做處理多個操做數。性能
現在的 GPU 設備的核心也正是向量處理器。學習
2. 80年代初期,一家公司設計並研製了一種被稱爲鏈接機的計算機系統。測試
該系統具備16個 CPU 核,採用的是標準的單指令多數據 (SIMD) 並行處理。鏈接機經過這種設計可以消除多餘的訪存操做,並將內存讀寫週期變爲原來的 1/16 。
3. CELL 處理器的發明
這類處理器頗有意思,其架構大體以下圖所示:
在此結構中,一個 PPC 處理器做爲監管處理器,與大量的 SPE流處理器相連通,組成了一個工做流水線。
對於一個圖形處理過程來講,某個 SPE 可負責提取數據,另外一個 SPE 負責變換,再另外一個負責存回。這樣可構成一道完完整整的流水線,大大提升了處理速度。
順便提一句,2010年超級計算機排名第三的計算機就是基於這種設計理念實現的,佔地面積達560平方米,耗資 1.25 億美圓。
集羣計算是指經過將多個性能通常的計算機組成一個運算網絡,達到高性能計算的目的。這是一種典型的多點計算模型。
而 GPU 的本質,也一樣是多點計算模型。其相對於當今比較火的Hadoop/Spark集羣來講:「點」由單個計算機變成了 單個SM (流處理器簇),經過網絡互連變成了經過顯存互連 (多點計算模型中點之間的通訊永遠是要考慮的重要問題)。
隨着 CPU "功耗牆" 問題的產生,GPU 解決方案開始正式走上舞臺。
GPU 特別適合用於並行計算浮點類型的狀況,下圖展現了這種狀況下 GPU 和 CPU 計算能力的差異:
但這可不能說明 GPU 比 CPU 更好,CPU應當被淘汰。 上圖的測試是在計算可徹底並行的狀況下進行的。
對於邏輯更靈活複雜的串行程序,GPU 執行起來則遠不如 CPU 高效 (沒有分支預測等高級機制)。
另外,GPU 的應用早已不侷限於圖像處理。事實上 CUDA 目前的高端板卡 Tesla 系列就是專門用來進行科學計算的,它們連 VGA 接口都沒。
注:
1. 各參數的具體含義將在之後的文章中作細緻分析
2. 當前顯卡的具體參數信息可經過調試工具獲取到 (方法略)
1. CUDA
是英偉達公司推出的,專門針對 N 卡進行 GPU 編程的接口。文檔資料很齊全,幾乎適用於全部 N 卡。
本專欄講述的 GPU 編程技術均基於此接口。
2. Open CL
開源的 GPU 編程接口,使用範圍最廣,幾乎適用於全部的顯卡。
但相對 CUDA,其掌握較難一些,建議先學 CUDA,在此基礎上進行 Open CL 的學習則會很是簡單輕鬆。
3. DirectCompute
微軟開發出來的 GPU 編程接口。功能很強大,學習起來也最爲簡單,但只能用於 Windows 系統,在許多高端服務器都是 UNIX 系統沒法使用。
總結,這幾種接口各有優劣,須要根據實際狀況選用。但它們使用起來方法很是相近,掌握了其中一種再學習其餘兩種會很容易。
1. 不單能學會如何使用 GPU 解決問題,更讓咱們更加深刻地瞭解並行編程思想,爲之後全面地掌握各類並行技術打下鋪墊。
2. 並行計算相關知識的研究與發展勢必會成爲將來IT業界與學界的一大熱點。