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
GPU资源分配
最新推荐文章于 2024-06-18 14:43:48 发布