GPU概念的一點總結

2021-08-06 02:53:49 字數 1431 閱讀 7477

最近看了

主要概念性的介紹了gpu的概念:

其實之前就看過其他的,主要是回憶一下

關於最近的nvidia 顯示卡架構:

gpu的硬體架構:

cuda程式設計中介紹的sp,sm等概念:

cuda中的bank conflict 衝突

準備看:

cuda從入門到精通

1. 

從硬體上看:

sp 就是最小處理單元,對應乙個執行緒;

sm 多個(32)個sp組成了sm,sm中跑的都是統一個執行緒,但是資料不同。有可能因為分支等判斷條件,最終執行的命令也不同。

從軟體上來看:

thread: 執行緒

block:多個threads 會被群組稱乙個block,block中的執行緒通過共享記憶體進行通訊。高階的gpu也可以直接執行緒間通過暫存器通訊

grid: 多個blocks則會再構成grid

warp: gpu執行程式時的排程單位,目前cuda的warp為32.

2. simt與simd不同,gpu從simd公升級為simt了,不同之處:

3.對應關係:

其中cuda core就是sp

4. 全域性儲存器:即普通的視訊記憶體,整個網路中的任意執行緒都能讀寫全域性儲存器的任意位置,延遲為400~600個時鐘週期,容易成為效能瓶頸。

即如果int number = data[3];不會有衝突,所有的都訪問乙個,廣播了。

int number = data[base + tid];不會有衝突,每個訪問乙個。

int number = data[base + 4 * tid]; 每隔四個訪問乙個,衝突。

a:  

data[tid] = global_data[tid];

...int number = data[16 * tid];

b:   int row = tid / 16;

int column = tid % 16;

data[row * 17 + column] = global_data[tid];

...int number = data[17 * tid];

雖然原來想訪問0,16,32,48,但是將其轉化為了17,34,51,實際上對應了1,2,3,變成了各訪問各的,因而避免了衝突。

共享儲存器,即是同乙個塊中的所有執行緒訪問的可讀寫儲存器。half warp為16個執行緒,對應16個blank(共享記憶體被分為16個blank),如果一一對應,則不會有衝突。如果有多個訪問乙個,則會有讀寫重讀。如果16個訪問同乙個,則會出發廣播,不會有衝突。

如果是a方式,則會嚴重衝突,即每個執行緒都訪問同乙個,而轉為b方式的儲存之後

5.需要注意的是,與cpu中上下文切換需要儲存暫存器不同,gpu中為每乙個上下文都單獨設定了暫存器,因而上下文切換時,使用不同的暫存器,不需要儲存,加快了儲存效率。6.

DDR的一點概念

sdram synchronous dram 同步動態隨機儲存器 是pc 100和pc 133規範所廣泛使用的記憶體型別,它的頻寬為64位,3.3v電壓,目前產品的最高速度可達5ns。它與cpu使用相同的時鐘頻率進行資料交換,它的工作頻率是與cpu的外頻同步的,不存在延遲或等待時間。sdram的內部...

pushmail的一點總結

從push方法上說有ip push和sms push。ip push就是讓手機始終握著gprs,從而有個ip,讓mail server和手機之間始終有個通路,這樣server一旦有郵件就馬上通過ip push到手機終端上了。sms push就是mail server有郵件了,通知運營商push個簡訊...

索引的一點總結

1.索引是一棵b樹 3級索引能容納400萬行資料,4級索引能容納40億行資料。2.表的組織方式有兩種 堆或b樹。當在表上建立乙個聚集索引時,表就組織為乙個b樹 否則就組織為乙個堆。3.聚集索引約佔1 的表大小.非聚集索引佔30 40 表大小,曾見過非聚集索引和資料表一樣大或更大.4.索引碎片 完全沒...