CUDA(GPU)

                     

每个 stream processor 就是对应一个 thread
每个 multiprocessor 则对应一个 block
一个kernel程序执行在一个grid of threads blocks之中


Grid在GPU上启动;block被分配到SM上;SM把线程组织为warp;SM调度执行warp;执行结束后释放资源;block继续被分配....
GPU通过Global block scheduler来调度block,根据硬件架构分配block到某一个SM。每个SM最多分配8个block,每个SM最多可接受768个thread
Block是独立执行的,每个Block内的threads是可协同的。
每个线程由SM中的一个SP执行,每一瞬时,只有一组warp在SM中执行。Warp全部线程是执行同一个指令,每个指令需要4个clock cycle,通过复杂的机制执行


最小单元称为Streaming Processor(SP), 包含两个ALU和一个FPU,多组寄存器文件(register file,很多寄存器的组合),没有cache
一个 stream processor 基本上是一个浮点数的 fused multiply-add 单元,也就是说它可以进行一次乘法和一次加法,如下所示:
a = b * c + d;
compiler 会自动把适当的加法和乘法运算,结合成一个 fmad 指令


每个 multiprocessor 有 16KB 的 shared memory。Shared memory 分成 16 个 bank。如果同时每个 thread 是存取不同的 bank,就不
会产生任何问题,存取 shared memory 的速度和存取寄存器相同。不过,如果同时有两个(或更多个) threads 存取同一个 bank 的数据,就会
发生 bank conflict,这些 threads 就必须照顺序去存取,而无法同时存取 shared memory 了。


每个 stream processor 包含8个SP,2个special function unit(SFU,里面有4个FPU可以进行超越函数和插值计算), MultiThreading Issue Unit(MTIU分发线程指令)


每个 multiprocessor 有八个 stream processor,但是由于 stream processor 进行各种运算都有 latency,更不用提内存存取的 latency,
因此 CUDA 在执行程序的时候,是以 warp 为单位。目前的 CUDA 装置,一个 warp 里面有 32 个 threads,分成两组 16 threads 的 half-warp。
于 stream processor 的运算至少有 4 cycles 的 latency,因此对一个 4D 的 stream processors 来说,一次至少执行 16 个 threads(即 
half-warp)才能有效隐藏各种运算的 latency
 

转载于:https://my.oschina.net/igooglezm/blog/1675713

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值