歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> GPU 編程技術的發展歷程及現狀

GPU 編程技術的發展歷程及現狀

日期:2017/3/1 9:08:42   编辑:Linux編程

閱讀目錄

  • 前言
  • 馮諾依曼計算機架構的瓶頸
  • 對 GPU 編程技術發展具有啟發意義的幾件事
  • 多點計算模型
  • GPU 解決方案
  • 幾款新的顯卡及其配置 (僅列 N 卡)
  • 主流 GPU 編程接口
  • 學習 GPU 編程的意義

前言

本文通過介紹 GPU 編程技術的發展歷程,讓大家初步地了解 GPU 編程,走進 GPU 編程的世界。

馮諾依曼計算機架構的瓶頸

曾經,幾乎所有的處理器都是以馮諾依曼計算機架構為基礎的。該系統架構簡單來說就是處理器從存儲器中不斷取指,解碼,執行。

但如今這種系統架構遇到了瓶頸:內存的讀寫速度跟不上 CPU 時鐘頻率。具有此特征的系統被稱為內存受限型系統,目前的絕大多數計算機系統都屬於此類型。

為了解決此問題,傳統解決方案是使用緩存技術。通過給 CPU 設立多級緩存,能大大地降低存儲系統的壓力:

然而隨著緩存容量的增大,使用更大緩存所帶來的收益增速會迅速下降,這也就意味著我們要尋找新的辦法了。

對 GPU 編程技術發展具有啟發意義的幾件事

1. 70年代末期,克雷系列超級計算機研制成功 (克雷1當年耗資800萬美元)。

此類計算機采用若干內存條的共享內存結構,即這些內存條可以與多個處理器相連接,從而發展成今天的對稱多處理器系統 (SMD)。

克雷2是向量機 - 一個操作處理多個操作數。

如今的 GPU 設備的核心也正是向量處理器。

2. 80年代初期,一家公司設計並研制了一種被稱為連接機的計算機系統。

該系統具有16個 CPU 核,采用的是標准的單指令多數據 (SIMD) 並行處理。連接機通過這種設計能夠消除多余的訪存操作,並將內存讀寫周期變為原來的 1/16 。

3. CELL 處理器的發明

這類處理器很有意思,其架構大致如下圖所示:

在此結構中,一個 PPC 處理器作為監管處理器,與大量的 SPE流處理器相連通,組成了一個工作流水線。

對於一個圖形處理過程來說,某個 SPE 可負責提取數據,另一個 SPE 負責變換,再另一個負責存回。這樣可構成一道完完整整的流水線,大大提高了處理速度。

順便提一句,2010年超級計算機排名第三的計算機就是基於這種設計理念實現的,占地面積達560平方米,耗資 1.25 億美元。

多點計算模型

集群計算是指通過將多個性能一般的計算機組成一個運算網絡,達到高性能計算的目的。這是一種典型的多點計算模型。

而 GPU 的本質,也同樣是多點計算模型。其相對於當今比較火的Hadoop/Spark集群來說:“點”由單個計算機變成了 單個SM (流處理器簇),通過網絡互連變成了通過顯存互連 (多點計算模型中點之間的通信永遠是要考慮的重要問題)。

GPU 解決方案

隨著 CPU "功耗牆" 問題的產生,GPU 解決方案開始正式走上舞台。

GPU 特別適合用於並行計算浮點類型的情況,下圖展示了這種情況下 GPU 和 CPU 計算能力的差別:

但這可不能說明 GPU 比 CPU 更好,CPU應當被淘汰。 上圖的測試是在計算可完全並行的情況下進行的。

對於邏輯更靈活復雜的串行程序,GPU 執行起來則遠不如 CPU 高效 (沒有分支預測等高級機制)。

另外,GPU 的應用早已不局限於圖像處理。事實上 CUDA 目前的高端板卡 Tesla 系列就是專門用來進行科學計算的,它們連 VGA 接口都沒。

幾款新的顯卡及其配置 (僅列 N 卡)

注:

1. 各參數的具體含義將在以後的文章中做細致分析

2. 當前顯卡的具體參數信息可通過調試工具獲取到 (方法略)

主流 GPU 編程接口

1. CUDA

是英偉達公司推出的,專門針對 N 卡進行 GPU 編程的接口。文檔資料很齊全,幾乎適用於所有 N 卡。

本專欄講述的 GPU 編程技術均基於此接口。

2. Open CL

開源的 GPU 編程接口,使用范圍最廣,幾乎適用於所有的顯卡。

但相對 CUDA,其掌握較難一些,建議先學 CUDA,在此基礎上進行 Open CL 的學習則會非常簡單輕松。

3. DirectCompute

微軟開發出來的 GPU 編程接口。功能很強大,學習起來也最為簡單,但只能用於 Windows 系統,在許多高端服務器都是 UNIX 系統無法使用。

總結,這幾種接口各有優劣,需要根據實際情況選用。但它們使用起來方法非常相近,掌握了其中一種再學習其他兩種會很容易。

學習 GPU 編程的意義

1. 不單能學會如何使用 GPU 解決問題,更讓我們更加深入地了解並行編程思想,為以後全面地掌握各種並行技術打下鋪墊。

2. 並行計算相關知識的研究與發展勢必會成為未來IT業界與學界的一大熱點。

Copyright © Linux教程網 All Rights Reserved