我正在使用nvprof来衡量已达到的入住率,我发现它是
达到入住率0.344031 0.344031 0.344031
但使用占用率计算器,我发现75%。
结果是:
Active Threads per Multiprocessor 1536
Active Warps per Multiprocessor 48
Active Thread Blocks per Multiprocessor 6
Occupancy of each Multiprocessor 75%
我使用33个寄存器,144个字节的共享内存,256个线程/块,设备功能3.5。
编辑:
另外,我想澄清一点。在http://docs.nvidia.com/cuda/profiler-users-guide/#axzz30pb9tBTN中说明了
gld_efficiency
请求的全局内存负载吞吐量与所需全局的比率 内存负载吞吐量表示为百分比
那么,如果这是0%,这意味着我在内核中没有全局内存传输?
答案 0 :(得分:2)
您需要了解占用计算器仅根据该内核的资源需求提供给定内核可以实现的最大理论占用率。它没有(也不能)说出代码能够实现多少理论占用率。
另一方面,分析工具从测量的配置文件计数器中推断出实际占用。根据{{3}}文件,您要求的实现入住率计算为
(active_warps / active_cycles) / MAX_WARPS_PER_SM
即。它在内核运行期间对一个或多个SM上的活动warp的数量进行采样,并根据该
计算实际占用率内核无法实现其理论占用率的原因可能有很多,并且(在您提出之前),不,我不能告诉您为什么内核没有达到理论占用率。但Visual Profiler可以。如果对您来说很重要,我建议您查看CUDA 5/6可视化分析器中提供的自动性能分析功能,以便更好地了解代码的性能。
值得指出的是,占用率应仅视为潜在代码性能的粗略度量标准,而高理论占用率并不总能转化为高性能。指令级并行和延迟最小化策略在达到高性能时也非常有效,即使在低占用率时也是如此。这方面有大量的工作,大部分来自瓦西里沃尔科夫的开创性this。