Cuda 计算器和nvprof的占用率不同

Cuda 计算器和nvprof的占用率不同,cuda,profiling,Cuda,Profiling,我使用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个寄存器,1

我使用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

编辑:

还有,我想澄清一点。在它的国家

gld_效率

请求的全局内存负载吞吐量与所需全局内存负载吞吐量的比率 以百分比表示的内存负载吞吐量

那么,如果这是0%,这意味着内核中没有全局内存传输


您需要了解占用率计算器提供了给定内核可以达到的最大理论占用率,仅基于该内核的资源需求。它没有(也不能)说明代码能够实现多少理论占用率

另一方面,分析工具从测量的分析计数器推断实际占用率。根据文件,您所询问的实际入住人数计算如下:

(active_warps / active_cycles) / MAX_WARPS_PER_SM
即,它在内核运行期间对一个或多个SM上的活动扭曲数进行采样,并由此计算实际占用率

内核没有达到其理论占用率可能有很多原因,而且(在你问之前),不,我不能告诉你为什么内核没有达到理论占用率。但是可视化分析器可以。如果这对您很重要,我建议您查看CUDA 5/6 visual profiler中提供的自动性能分析功能,以更好地了解代码的性能


还值得指出的是,占用率应被视为潜在代码性能的粗略度量,高理论占用率并不总是转化为高性能。指令级并行和延迟最小化策略也可以非常有效地达到高性能水平,即使在占用率较低的情况下也是如此。在这方面有大量的研究,大部分来自瓦西里·沃尔科夫的开创性研究

:好的,thaks。所以,nvprof创建的acieved入住率是我应该看的。我记着Volkov的论文,谢谢。只是,我想检查一下入住率,不要太低。最后,我问的gld_效率,是我说的吗?还是相反?:你好,我刚刚运行了nsight profiler,我发现在每个内核中,它的寄存器数量都不同于ptxas options=-v给我的寄存器数量。因此,我将把nsight profiler中的寄存器数量作为寄存器数量?另外,对于gld_效率,如果是0%,则表示内核中没有全局内存传输?谢谢!请出示您用于获取“已实现占用率”的命令行,好吗?