如何使用CUDA达到加速程序

来源:互联网 发布:打车外卖优惠券源码 编辑:程序博客网 时间:2024/05/22 02:04

from:http://www.cnblogs.com/viviman/archive/2012/11/28/2792521.html

block内的thread我们是都饱和使用吗?

答:不要,一般来说,我们开128256个线程,二维的话就是16*16

grid内一般用几个block呢?

答:牛人告诉我,一般来说是你的流处理器的4倍以上,这样效率最高。

回答这两个问题的解释,我想抄袭牛人的一段解释,解释的好的东西就要推广呀:

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只拥有1SMThreadCUDA模型中最基本的运行单元,执行最基本的程序指令。Block是一组协作ThreadBlock内部允许共享存储,每个Block最多包含512ThreadGrid是一组Block,共享全局内存。Kernel是在GPU上执行的核心程序,每一个Grid对应一个Kernel任务。 在程序运行的时候,实际上每32Thread组成一个Warp,每个 warp 块都包含连续的线程,递增线程 ID WarpMP的基本调度单位,每次运行的时候,由于MP数量不同,所以一个Block内的所有Thread不一定全部同时运行,但是每个Warp内的所有Thread一定同时运行。因此,我们在定义Block Size的时候应使其为Warp Size的整数倍,也就是Block Size应为32的整数倍。理论上Thread越多,就越能弥补单个Thread读取数据的latency ,但是当Thread越多,每个Thread可用的寄存器也就越少,严重的时候甚至能造成Kernel无法启动。因此每个Block最少应包含64Thread,一般选择128或者256,具体视MP数目而定。一个MP最多可以同时运行768Thread,但每个MP最多包含8Block,因此要保持100%利用率,Block数目与其Size有如下几种设定方式: Ø blocks 384 threads Ø blocks 256 threads Ø blocks 192 threads Ø blocks 128 threads Ø blocks 96 threads 

这些电很重要啊,必须要充!不然,我就很难理解为什么网络线程如何分配的。


0 0
原创粉丝点击