我正在使用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。
编辑:
另外,我想让clarify.In http://docs.nvidia.com/cuda/profiler-users-guide/#axzz30pb9tBTN声明一下
gld_efficiency 请求的全局内存负载吞吐量与所需全局内存负载吞吐量的比率(以百分比表示)
所以,如果这是0%,就意味着内核中没有全局内存传输?
发布于 2014-05-05 11:24:17
您需要理解的是,占用率计算器仅根据内核的资源需求,提供给定内核可以达到的最大理论占用率。它没有(也不能)说明代码能够实现多少理论占用。
另一方面,分析工具从测量的配置文件计数器中推断实际占用率。根据这文档,您所询问的已达到的入住率计算为
(active_warps / active_cycles) / MAX_WARPS_PER_SM即。它在内核运行期间对一个或多个SM上的活动翘曲数进行采样,并从中计算实际占用率。
内核没有达到理论占用率有很多原因,而且(在你问之前),我不能告诉你为什么你的内核不能达到理论占用率。但视觉探查器可以。如果这对您很重要,我建议您将CUDA 5/6可视化分析器中提供的自动性能分析功能作为更好地理解代码性能的一种方法。
还值得指出的是,占用只应被视为潜在代码性能的粗略度量,而高理论占用率并不总是转化为高性能。指令级并行和延迟最小化策略也可以非常有效地达到高性能水平,即使在低占用率。这方面有大量的研究成果,大部分源自瓦西里·沃尔科夫(Volkov)的开创性GTC 2010论文。
https://stackoverflow.com/questions/23469180
复制相似问题