最近看了
主要概念性的介紹了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.索引碎片 完全沒...