GPU存儲系統

一、概述

物理概念:SP、Warp和SM的關係

一個SM由多個Warp組成,一個Warp由多個SP組成。

  1. Streaming Processor(SP): 最基本的處理單元。一個SP對應一個thread。
  2. Warp:最基本的執行單元。Warp是SM調度和執行的基礎概念,一個SM中的SP(Thread)會分成幾個warp。
  3. Streaming Multiprocessor(SM):多個sp加上其他的一些資源組成一個SM。其他資源也就是存儲資源,共享內存,寄儲器等。可見,一個SM中的所有SP是先分成warp的,是共享同一個memory和instruction unit。

在這裏插入圖片描述

邏輯概念:Thread、Block和Grid的關係

一個Grid由多個Block組成,一個block由多個Thread組成。

Grid可以是二維結構、也可以是三維結構。
二維結構:
在這裏插入圖片描述
三維結構:
在這裏插入圖片描述


二、GPU的存儲結構

在這裏插入圖片描述
GPU的存儲系統:

register shared memory local memory global memory constant memory texture memory
寄存器 共享內存 局部內存 全局內存 常量內存 紋理內存
register shared memory local memory global memory constant memory texture memory
主機訪問權限 讀寫 讀寫 讀寫
GPU訪問權限 同線程讀寫 同block讀寫 同線程讀寫 讀寫 只讀 只讀
速度 最快
容量 很小 一般是48K 很大

在這裏插入圖片描述

寄存器

與CPU不同,GPU的每個SM(流多處理器)有成千上萬個寄存器,在GPU技術簡介中已經提到,SM類似於CPU的核,每個SM擁有多個SP(流處理器),所有的工作都是在SP上處理的,GPU的每個SM可能有8~192個SP,這就意味着,SM可同時運行這些數目的線程。
寄存器是每個線程私有的,並且GPU沒有使用寄存器重命名機制,而是致力於爲每一個線程都分配真實的寄存器,CUDA上下文切換機制非常高效,幾乎是零開銷。當然,這些細節對程序員是完全透明的。
和CPU一樣,訪問寄存器的速度是非常快的,所以應儘量優先使用寄存器。無論是CPU還是GPU,通過寄存器的優化方式都會使程序的執行速度得到很大提高。
舉一個例子:

for (int i = 0; i < size; ++i)
{
sum += array[i];
}

sum如果存於內存中,則需要做size次讀/寫內存的操作,而如果把sum設置爲局部變量,把最終結果寫回內存,編譯器會將其放入寄存器中,這樣只需1次內存寫操作,將大大節約運行時間。

Local memory

Local memory和寄存器類似,也是線程私有的,訪問速度比寄存器稍微慢一點。
事實上,是由編譯器在寄存器全部使用完的時候自動分配的。在優化程序的時候可以考慮減少block的線程數量以使每個線程有更多的寄存器可使用,這樣可減少Local memory的使用,從而加快運行速度。

共享內存

每個線程塊都有一個共享內存,該線程塊中的線程都可以讀取該內存,其他線程塊的線程無法訪問該共享內存。共享內存幫助同一線程塊的線程通信與協作。並且共享內存緩存區實在物理GPU上,而不是其他與GPU相連的設備上,訪問效率更高。

常量內存

常量內存通過__constant__來修飾變量,被限制爲只讀。
1.對常量內存的單次讀操作可以廣播到該線程的半線程數中,減少15讀操作。
2.常量內存的數據將緩存起來,因此對相同地址的連續讀操作不會產生額外通信量。


GPU概念詳解
GPU存儲結構
GPU內存
GPU發展史

發佈了84 篇原創文章 · 獲贊 12 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章