使用nvprof在CUDA计算能力3.x上分析L2缓存

时间:2014-02-16 14:09:22

标签: caching cuda kepler

我在计算能力3.5的CUDA卡上分析L2缓存时遇到问题。 在Kepler(3.x)中,来自全局内存的负载仅缓存在L2中,而不会缓存在L1中。 我的问题是如何使用nvprof(命令行分析器)来查找我的全局负载在L2缓存中实现的命中率?我已经查询了我可以收集的所有指标以及涉及L2疼痛的指标:

         l2_l1_read_hit_rate:  Hit rate at L2 cache for all read requests from L1 cache
    l2_texture_read_hit_rate:  Hit rate at L2 cache for all read requests from texture cache
       l2_l1_read_throughput:  Memory read throughput seen at L2 cache for read requests from L1 cache
  l2_texture_read_throughput:  Memory read throughput seen at L2 cache for read requests from the texture cache
        l2_read_transactions:  Memory read transactions seen at L2 cache for all read requests
       l2_write_transactions:  Memory write transactions seen at L2 cache for all write requests
          l2_read_throughput:  Memory read throughput seen at L2 cache for all read requests
         l2_write_throughput:  Memory write throughput seen at L2 cache for all write requests
              l2_utilization:  The utilization level of the L2 cache relative to the peak utilization

我获得的唯一命中率是来自L1的读数。但是对全局内存的读取永远不会来自L1,因为它们没有缓存在那里!或者我错了,这正是我想要的指标吗?

令人惊讶(或没有)有一个度量标准给出了全局内存读取的L1命中率。

    l1_cache_global_hit_rate:  Hit rate in L1 cache for global loads

对于开普勒来说,这可能是非零的吗?

干杯!

2 个答案:

答案 0 :(得分:2)

在CC 3.5设备上,全局加载有两条路径。 LDG指令通过纹理单元(l2_texture_read_hit_rate)。所有其他全局加载操作(包括未缓存的加载)都通过L1到L2(l2_l1_read_hit_rate)。计数器名称为l2__read_hit_rate。此计数器并不意味着负载缓存在L1中。

如果开发人员启用L1缓存,则计数器l1_cached_global_hit_rate在GK110B和GK210上可以为非零。有关详细信息,请参阅L1 Cache上的“开普勒调整指南”部分。

答案 1 :(得分:0)

使用默认的nvcc编译,它将为0.但是,如果compile使用-Xptxas -dlcm = ca,则它可以为非零。