每个SM有1-4个warp调度程序(Tesla = 1,Fermi = 2,Kepler = 4).每个warp调度程序负责执行分配给SM的warp的子集.每个warp调度程序都维护一个符合条件的warp列表.如果warp可以在下一个周期发出指令,则该warp是合格的.如果warp在数据依赖项上停顿,等待获取和指令,或者下一条指令的执行单元忙,则warp不符合条件.在每个循环中,每个warp调度程序将从符合条件的warp列表中选择warp并发出1或2个指令.
每个SM的更活跃的warp,每个warp调度程序在每个循环中必须选择的warp数越大.在大多数情况下,当每个SM有足够的活动warp时,每个周期每个warp调度程序有一个符合条件的warp,就可以实现最佳性能.超出此点的占用率增加不会提高性能并可能降低性能.
活动经线的典型目标是SM的最大经线的50-66%.由发射配置支持的经线与最大经线的比率称为理论占用率.每个循环的活动扭曲与每个循环的最大扭曲的运行时间比率是达到占用率.对于GTX480(CC 2.0设备),设计内核的良好起点是理论占用率为50-66%.CC 2.0 SM最多可以有48个经线.50%的占用率意味着每个SM有24个经线或768个线程.
Nsight Visual Studio Edition中的CUDA性能分析活动可以显示理论占用率,实现占用率,每SM的活动warp,每SM的符合条件的warp和停顿原因.
CUDA Visual Profiler,nvprof和命令行分析器可以显示理论占用率,活动warp和实现占用率.
注意:CUDA核心数应仅用于比较类似架构的卡,以计算理论FLOPS,并可能比较架构之间的差异.在设计算法时不要使用计数.
欢迎来到Stack Overflow.原因是CUDA核心是流水线的.在费米,管道长约20个时钟.这意味着要使GPU饱和,每个核心最多可能需要20个线程.