1. 程式人生 > >GPU知識了解

GPU知識了解

黃色 圖像 時鐘 直接 .net 圖片 圖形處理 graphic csdn

前言

  今天在使用阿裏雲的時候,無意間看到了有GPU服務器,於是對它做了一個大概的了解。

  技術分享圖片

概念

  GPU是Graphics Processing Unit的縮寫,翻譯成中文就是圖形處理器。是一種專門在個人電腦、工作站、遊戲機和一些移動設備(如平板電腦、智能手機等)上圖像運算工作的微處理器。GPU是專為執行復雜的數學和幾何計算而設計的,這些計算是圖形渲染所必需的。

  從定義看GPU最初是做圖像處理工作的,但是從阿裏雲的介紹看,由於在浮點運算、並行計算方面出色能力,現在GPU的應用場景已經涵蓋了深度學習,視頻處理,科學計算,圖形可視化等。

與CPU有什麽不同

  傳統的中央處理器(CPU,Central Processing Unit) 內部結構異常復雜,主要是因為其需要很強的通用性來處理各種不同的數據類型,同時又要邏輯判斷又會引入大量的分支跳轉和中斷的處理。

   GPU可以在無需中斷的純凈環境下,處理類型高度統一的、相互無依賴的大規模數據。註意啊,這裏是類型高度統一,相互無依賴,這樣就保證了,GPU的結構可以非常簡單,邏輯判斷很少,並且由於無依賴可以有幾千個核並行計算。

CPU和GPU就呈現出非常不同的架構(如圖):

技術分享圖片

  綠色的是計算單元,橙紅色的是存儲單元,橙黃色的是控制單元。可以看到,GPU幾乎全是計算單元,而控制單元和存儲單元很少,幾乎沒有cache。

再來對比看看CPU和GPU的設計理念:

技術分享圖片

  CPU基於低延時設計。

  它有非常強大ALU,能夠在很短時鐘頻率內完成計算。

  大容量的緩存,可以保存數據,如果用到該數據直接讀取緩存即可。

  復雜的邏輯控制單元,分支預測可以減少延遲。

  數據轉發。 當一些指令依賴前面的指令結果時,數據轉發的邏輯控制單元決定這些指令在pipeline中的位置並且盡可能快的轉發一個指令的結果給後續的指令。

技術分享圖片

  GPU基於大吞吐量設計。

  非常小的緩存。非常簡單的控制器。

  緩存的設計不是為了使得後面訪問前面的數據,而是為thread提高服務的。如果有很多線程需要訪問同一個數據的話,緩存會合並這些訪問,然後去訪問DRAM(數據會保存在DRAM裏,而不是在緩存裏),獲取數據後cache會轉發這個數據給對應的線程,這個時候是數據轉發的角色。GPU的控制單元(左邊黃色區域塊)可以把多個的訪問合並成少的訪問。

  GPU的雖然有dram延時,卻有非常多的ALU和非常多的thread。所以編程的時候需要充分利用多線程,並行計算的優點。

  

什麽程序適合使用GPU

  1)計算密集型;

  2)易於並行執行的程序。

如何進行GPU程序的開發

  為了降低GPU程序的開發難度,NVIDIA推出了 CUDA(Compute Unified Device Architecture,統一計算設備架構)這一編程模型。

參考文檔:

https://www.zhihu.com/question/19903344

https://baike.baidu.com/item/%E5%9B%BE%E5%BD%A2%E5%A4%84%E7%90%86%E5%99%A8/8694767?fr=aladdin&fromid=105524&fromtitle=gpu

https://blog.csdn.net/shuzfan/article/details/76602565

GPU知識了解