CUDA 关于 BLOCK数目与Thread数目设置

来源:互联网 发布:ubuntu传文件 编辑:程序博客网 时间:2024/06/04 00:37

GPU的计算核心是以一定数量的Streaming Processor(SP)组成的处理器阵列,NV称之为Texture Processing Clusters(TPC),每个TPC中又包含一定数量的Streaming Multi-Processor(SM),每个SM包含8SPSP的主要结构为一个ALU(逻辑运算单元),一个FPU(浮点运算单元)以及一个Register File(寄存器堆)SM内包含有一个Instruction Unit、一个Constant Memory、一个Texture Memory8192Register、一个16KBShare Memory8Stream Processor(SP)和两个Special Function UnitsSFU)。(GeForce9300M GS只拥有1SM ThreadCUDA模型中最基本的运行单元,执行最基本的程序指令。Block是一组协作ThreadBlock内部允许共享存储,每个Block最多包含512ThreadGrid是一组Block,共享全局内存。Kernel是在GPU上执行的核心程序,每一个Grid对应一个Kernel任务。 在程序运行的时候,实际上每32Thread组成一个Warp,每个 warp 块都包含连续的线程,递增线程 ID WarpMP的基本调度单位,每次运行的时候,由于MP数量不同,所以一个Block内的所有Thread不一定全部同时运行,但是每个Warp内的所有Thread一定同时运行。因此,我们在定义Thread Size的时候应使其为Warp Size的整数倍,也就是Thread Size应为32的整数倍。理论上Thread越多,就越能弥补单个Thread读取数据的latency ,但是当Thread越多,每个Thread可用的寄存器也就越少,严重的时候甚至能造成Kernel无法启动。因此每个Block最少应包含64Thread,一般选择128或者256,具体视MP数目而定。一个MP最多可以同时运行768Thread,但每个MP最多包含8Block,因此要保持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 


原创粉丝点击