GPU加速优化之前,我们先看看GPU的性能衡量。
- FLOPS
- Occupancy
FLOPS(Floating-point-operations-per-second)
每秒浮点运算量,是衡量GPU硬件计算能力的指标。
Occupancy
占有率,每个SM的活动线程束(possible active warps)数量与实际的活动线程束(active warps)数量的比值。它是衡量CUDA硬件执行效率的指标。CUDA上的线程指令是串行执行的。因此,在某些warp被暂停或者阻塞的时候,启动另外的warp来保持硬件的busy,对于提升硬件执行效率来说非常重要。
尽管更高的占有率并不总是意味着更高的效率,但是低的占有率却会影响掩盖内存延迟的能力,进而引起效率的退化。当占有率达到50%后,我们不会再寻求通过提高占有率来提升效率。
影响Occupancy的因素有3个:
寄存器资源(register availability, thread私有)
Register 保存了线程中的局部变量,具有最低的存取延迟。但是能分配给SM上每个block以及每个thread的寄