1. 程式人生 > >GPU以及CUDA的幾個基本概念理解

GPU以及CUDA的幾個基本概念理解

參考:blog.sina.com.cn/s/blog_80ce3a550101lntp.html

GPU的硬體結構中與CUDA相關的幾個概念:thread block grid warp sp sm
streaming processor(sp): 最基本的處理單元,streaming processor 最後具體的指令和任務都是在sp上處理的。GPU進行平行計算,也就是很多個sp同時做處理。現在SP的術語已經有點弱化了,而是直接使用thread來代替。一個SP對應一個thread。
Warp:warp是SM排程和執行的基礎概念,同時也是一個硬體概念,注意到Warp實際上是一個和硬體相關的概念,通常一個SM中的SP(thread)會分成幾個warp(也就是SP在SM中是進行分組的,物理上進行的分組),每一個WARP中在Tegra中是32個thread.這個WARP中的32個thread(sp)是一起工作的,執行相同的指令,如果沒有這麼多thread需要工作,那麼這個WARP中的一些thread(sp)是不工作的。
每一個執行緒都有自己的暫存器記憶體和local memory,一個warp中的執行緒是同時執行的,也就是當進行平行計算時,執行緒數儘量為32的倍數,如果執行緒數不上32的倍數的話;假如是1,則warp會生成一個掩碼,當一個指令控制器對一個warp單位的執行緒傳送指令時,32個執行緒中只有一個執行緒在真正執行,其他31個 程序會進入靜默狀態。

streaming multiprocessor(sm):多個sp加上其他的一些資源組成一個sm, streaming multiprocessor. 其他資源也就是儲存資源,共享記憶體,寄儲器等。可見,一個SM中的所有SP是先分成warp的,是共享同一個memory和instruction unit。
每個SM通過使用兩個特殊函式(Special Function Unit,SFU)單元進行超越函式和屬性插值函式(根據頂點屬性來對畫素進行插值)計算。SFU用來執行超越函式、插值以及其他特殊運算
在 G80/G92 的架構下,總共會有 128 個 SP,以 8 個 SP 為一組,組成 16 個 SM,再以兩個 SM 為一個 TPC,共分成 8 個 TPC 來運作。而在新一代的 GT200 裡,SP 則是增加到 240 個,還是以 8 個 SP 組成一個 SM,但是改成以 3 個 SM 組成一個 TPC,共 10 組 TPC。
在Tegra系列中,一個GPU中通常只有2個SM,每一個SM中包含4個WARP,每一個warp中有32個thread(SP),因此,一個SM中有128個SP。
Stream:流(Stream)是一系列順序執行的命令,流之間相對無序或併發的執行他們的命令。

軟體概念:
thread–>block–>grid:在利用cuda進行程式設計時,一個grid分為多個block,而一個block分為多個thread。其中任務劃分到是否影響最後的執行效果。劃分的依據是任務特性和GPU本身的硬體特性。GRID,BLOCK,THREAD是軟體概念,而非硬體的概念。

從硬體角度講,一個GPU由多個SM組成(當然還有其他部分),一個SM包含有多個SP(以及還有暫存器資源,shared memory資源,L1cache,scheduler,SPU,LD/ST單元等等),1.x硬體,一個SM包含8個SP,2.0是32個,2.1是48個,3.0和3.5是192個。以及SP目前也稱為CUDA CORE,而SM目前也稱為MP,在KEPLER架構(SM3.0和3.5)下也稱為SMX。

從軟體角度講,CUDA因為是SIMT的形式,GRID,block,thread是thread的組織形式。最小的邏輯單位是一個thread,最小的硬體執行單位是thread warp(簡稱warp),若干個thread(典型值是128~512個)組成一個block,block被載入到SM上執行,多個block組成整體的GRID。

這裡為什麼要有一箇中間的層次block呢?這是因為CUDA通過這個概念,提供了細粒度的通訊手段,因為block是載入在SM上執行的,所以可以利用SM提供的shared memory和__syncthreads()功能實現執行緒同步和通訊,這帶來了很多好處。而block之間,除了結束kernel之外是無法同步的,一般也不保證執行先後順序,這是因為CUDA程式要保證在不同規模(不同SM數量)的GPU上都可以執行,必須具備規模的可擴充套件性,因此block之間不能有依賴。

從上面的表述中可以總結:
在GPU中最小的硬體單元是SP(這個術語通常使用thread來代替),而硬體上一個SM中的所有SP在物理上是分成了幾個WARP(每一個warp包含一些thread),warp中的SP是可以同時工作的,但是執行相同的指令,也就是說取指令單元取一條指令同時發射給WARP中的所有的SP(假設SP都需要工作,否則有些是idle的).可見,在硬體上一個SM->WARPS->threads(sp).
對於軟體thread組織來看,因為一個SM中是分WARP的,而一個WARP包含一定數目(比如Tegra 32個)的sp(thread),因此最好按照這個數目來組織thread,否則硬體該warp上有些SP是不工作的。

這就是CUDA的兩級並行結構。

總而言之,一個kernel對應一個GRID,該GRID又包含若干個block,block內包含若干個thread。GRID跑在GPU上的時候,可能是獨佔一個GPU的,也可能是多個kernel併發佔用一個GPU的(需要fermi及更新的GPU架構支援)。

block是resident在SM上的,一個SM可能有一個或多個resident blocks,需要具體根據資源佔用分析。

thread以warp為單位被SM的scheduler 發射到SP或者其他單元,如SFU,LD/ST unit執行相關操作,需要等待的warp會被切出(依然是resident 狀態),以空出執行單元給其他warps。

相關推薦

GPU以及CUDA基本概念理解

參考:blog.sina.com.cn/s/blog_80ce3a550101lntp.html GPU的硬體結構中與CUDA相關的幾個概念:thread block grid warp sp sm streaming processor(sp): 最基本的

WebLogic(12C)——基本概念

分配 domain 基本 機器 eve 不依賴 影響 right term 轉http://blog.csdn.net/hanxuemin12345/article/details/46287597 目錄(?)[-] 域Domain 服務器Server 機器Mac

計量經濟與時間序列_時間序列分析的基本概念(自相關函數,偏自相關函數等)

sig 永不 均值 blog 那種 屬於 class 觀察 自相關 1. 在時間序列分析中, 數學模型是什麽?數學公式又是什麽?數學推導過程又是什麽?... ...   一句話:用數學公式後者符號來表示現實存在的意義。數學是“萬金油”的科學,它是作為工作和分析方法運用到某

關於“知識共享”的基本概念

關於“知識共享”的幾個基本概念 目前,對於我們向全國高校投放魯賓遜微積分教材電子版的行動與實行“知識共享”許可協議之間的關係,有人仍然缺乏理解。 魯賓遜微積分教材電子版扉頁上印有“知識共享”標識,所以,投放行動(發行)是有根據的。     本文附件是一份“知識共享”文字

kafka中的基本概念

Kafka架構是由producer(訊息生產者)、consumer(訊息消費者)、borker(kafka叢集的server,負責處理訊息讀、寫請求,儲存訊息,在kafka cluster這一層這裡,其實裡面是有很多個broker)、topic(訊息佇列/分類相當於佇列,裡面有生產者和消費者模型)、

筆記-git中的基本概念

jpg pre 父節點 sha 推薦一個 必須 解釋 checkout 形式 這篇筆記旨在理解幾個核心的git基本概念,如果對git了解較少,可以先看git基本教程。 這裏推薦一個:廖雪峰-Git教程 commit(提交) 與 branch(分支) 版本號 commit是

基本概念

linux與檔案系統的關係     1   執行linux  必須要有 linux核心 和 檔案系統     2   linux是在執行的最後才掛載檔案系統(就是所有驅動初始化完成以後,最後一步才掛載檔案系統)     zImage就是核心,執行起來以後掛載 1 和

併發程式設計的基本概念

同步&非同步 同步(Synchronous) 同步方法一旦呼叫必須等待方法呼叫返回後才會繼續後續行動。 非同步(AsyncChronous) 非同步呼叫更像傳遞一個訊息,一旦開始方法呼叫就會返回,呼叫者可以進行後續的操作,在java中非同步方法非同步都會在寧外一個執行緒中執行

機器學習(二):機器學習中的基本概念

前言 對於《統計學習方法》中遇到的一些問題,以及機器學習中的一些自己沒有理解透徹的問題,希望通過梳理總結能夠有更深入的理解。 在上一章最開始我們已經概括了統計學習方法的三要素,即模型、策略、演算法,這裡就不再詳述了。 本文討論總結了如下幾個概念:損失函式與風險

路由選擇協議的基本概念

紫色代表一級目錄 粉紅代表二級目錄 藍色代表三級目錄 紅色代表關鍵字 橙色代表說明 有關路由選擇協議的幾個基本概念   理想的路由演算法     演算法必須是正確的和完整的。     演算法在計算上應簡單。     演算法應能適應通訊量和網路拓撲的變化,這就是說,要有自適應性。     

Spark的基本概念:Driver和Job,Stage

Driver Program, Job和Stage是Spark中的幾個基本概念。Spark官方文件中對於這幾個概念的解釋比較簡單,對於初學者很難正確理解他們的涵義。 官方解釋如下(http://spark.apache.org/docs/latest/cluster-overview.html): Driv

詳解基本概念“標準差&標準誤差,方差&均方差”

對於從事資料工作的人來說,經常需要用到方差、標準差、均方差等概念,但即使是一個數學專業的畢業生(比如我自己),經常也會被這幾個概念弄得頭暈腦脹,使用的時候也是清楚的少,碰運氣的多。 這裡,我

iphone繪圖的基本概念CGPoint、CGSize、CGRect、CGRectMake、window(視窗)、檢視(view)

  我一般情況下不會使用interface builder去畫介面,而是用純程式碼去建立介面,不是裝B,而是剛從vi轉到xcode不久,不太習慣interface builder而已。當然如果需要我也會使用它。一個東西的存在沒有絕對的好與壞,只是存在時間與空間決定了它的

iphone繪圖的基本概念CGPoint、CGSize、CGRect、CGRectMake、window(視窗)、檢視(view)...

我一般情況下不會使用interface builder去畫介面,而是用純程式碼去建立介面,不是裝B,而是剛從vi轉到xcode不久,不太習慣interface builder而已。當然如果需要我也會使用它。一個東西的存在沒有絕對的好與壞,只是存在時間與空間決定了它的價值。

理解基本概念,讓你更像機器學習專家

大多數人可能對機器學習有點恐懼或困惑。 腦子中會有它到底是什麼,它有什麼發展方向,我現在可以通過它掙錢嗎等等這樣的問題。 這些問題的提出都是有依據的。事實上,你可能沒有意識到自己其實多年來一直在訓練機器學習模型。你看過蘋果手機或者是Facebook上的照片吧? 你知道它如何向你展示一組面孔並要求你識別它

《深入理解計算機系統》筆記:重要概念

執行程式系統 編譯系統 從原始碼文字檔案到可執行目標檔案的轉化由編譯系統(compilation system)完成 前處理器(cpp):hello.c —> hello.i 根據以字元 #

關於ORACLE資料庫名以及資料例項名等重要概念

在Oracle中有關資料庫和資料庫例項的幾個重要概念,有時候如果理解不是很深或者對其疏忽、混淆了,還真容易搞錯或弄不清其概念,下面就資料庫例項名、資料庫名、資料庫域名、資料庫服務名、全域性資料庫名幾個概念,我們來梳理一下概念,總結歸納一下這些知識,首先,我們來看看官方文件對這幾者的概念介紹:  

USB HID協議中關鍵概念理解

USB HID描述符的體系結構如下:在Interface描述符中,HID裝置的:    1. bInterfaceClass值一定是3(HID Class);    2. bInterfaceSubClass的值可能為:0 (No Subclass), 1(Boot Inte

徹底搞清c/c++中的指標概念:懸垂指標和智慧指標以及啞指標和野指標

先看看下面兩段程式碼執行結果: #include<iostream> //#include <windows.h> using namespace std; int *p=NULL; void fun() {int i=10;p=&i;} v

fifo 以及訊號的理解

   Altera provides FIFO functions through the parameterizable single-clock FIFO(SCFIFO) and dual-clock FIFO (DCFIFO) megafunctions    用Q