GPU资源分配
                            
                            
                            GPU
的計算核心是以一定數量的
Streaming?Processor(SP)
組成的處理器陣列,
NV
稱之為
Texture?Processing?Clusters(TPC)
,每個
TPC
中又包含一定數量的
Streaming?Multi-Processor(SM)
,每個
SM
包含
8
個
SP
。
SP
的主要結構為一個
ALU
(邏輯運算單元),一個
FPU
(浮點運算單元)以及一個
Register?File(
寄存器堆
)
。
SM
內包含有一個
Instruction?Unit
、一個
Constant?Memory
、一個
Texture?Memory
,
8192
個
Register
、一個
16KB
的
Share?Memory
、
8
個
Stream?Processor(SP)
和兩個
Special?Function?Units
(
SFU
)。(
GeForce9300M?GS
只擁有
1
個
SM
)?Thread
是
CUDA
模型中最基本的運行單元,執行最基本的程序指令。
Block
是一組協作
Thread
,
Block
內部允許共享存儲,每個
Block
最多包含
512
個
Thread
。
Grid
是一組
Block
,共享全局內存。
Kernel
是在
GPU
上執行的核心程序,每一個
Grid
對應一個
Kernel
任務。?在程序運行的時候,實際上每
32
個
Thread
組成一個
Warp
,每個?
warp?
塊都包含連續的線程,遞增線程?
ID?
。
Warp
是
MP
的基本調度單位,每次運行的時候,由于
MP
數量不同,所以一個
Block
內的所有
Thread
不一定全部同時運行,但是每個
Warp
內的所有
Thread
一定同時運行。因此,我們在定義Block?Size
的時候應使其為
Warp?Size
的整數倍,也就是
Block?Size
應為
32
的整數倍。理論上
Thread
越多,就越能彌補單個
Thread
讀取數據的
latency?
,但是當
Thread
越多,每個
Thread
可用的寄存器也就越少,嚴重的時候甚至能造成
Kernel
無法啟動。因此每個
Block
最少應包含
64
個
Thread
,一般選擇
128
或者
256
,具體視
MP
數目而定。一個
MP
最多可以同時運行
768
個
Thread
,但每個
MP
最多包含
8
個
Block
,因此要保持
100%
利用率,
Block
數目與其
Size
有如下幾種設定方式:???2?blocks?x?384?threads ??3?blocks?x?256?threads ??4?blocks?x?192?threads ??6?blocks?x?128?threads ??8?blocks?x?96?threads 
                            
                        
                        
                        總結
 
                            
                        - 上一篇: 动态引入js只能生效一次_动态插入的sc
- 下一篇: 双三次插值图像旋转_4K/8K电视中的超
