Профилирование кэш-памяти второго уровня на CUDA Compute 3.x с nvprof

У меня проблема с профилированием кэша L2 на моей карте CUDA с вычислительными возможностями 3.5. В 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 ответа

На устройствах CC 3.5 есть два пути для глобальных нагрузок. Инструкция LDG проходит через блок текстуры (l2_texture_read_hit_rate). Все другие глобальные операции загрузки, включая некэшированные загрузки, проходят от L1 до L2 (l2_l1_read_hit_rate). Имена счетчиков: l2__read_hit_rate. Этот счетчик не означает, что нагрузка была кэширована в L1.

Счетчик l1_cached_global_hit_rate может быть ненулевым на GK110B и GK210, если разработчик включает кэш L1. Подробнее см. В разделе "Руководство по настройке Kepler" кэш-памяти L1.

При компиляции nvcc по умолчанию это будет 0. Однако, если вы компилируете с -Xptxas -dlcm=ca, тогда он может быть ненулевым.

Другие вопросы по тегам