Что такое транзакция и запрос в 'gld_transactions_per_request' metri c профилировщика Cuda? - PullRequest
2 голосов
/ 05 марта 2020

Для идеально объединенного доступа к массиву 4096 удваивается, каждые 8 ​​байт, nvprof сообщает о следующих показателях на Nvidia Tesla V100:

global_load_requests: 128
gld_transactions: 1024
gld_transactions_per_request: 8.000000

Я не могу найти специфику c определение того, что транзакция и запрос к глобальной памяти равны точно , поэтому у меня возникают проблемы с пониманием этих метрик. Поэтому мои вопросы:

  1. Как определяется память запрос определен?
  2. Как определяется память транзакция определена?
  3. Показывает ли gld_transactions_per_request = 8.00000 идеально слитый доступ к двойникам?

Пытаясь объяснить это себе, вот что я придумал:

  • Запрос: нагрузка на уровне деформации, то есть одна инструкция уровня деформации, объединенная из 32 потоков. В этом случае загрузка 32 threads * 8 bytes = 256 byte. - Это правильно?
  • Транзакция: 32 byte инструкция загрузки. В этом сценарии одна транзакция, определенная таким образом, может загрузить 32 bytes / 8 bytes = 4 удвоений. -- Это правильно? Если да, то является ли это самой большой инструкцией загрузки, которую реализует Cuda?

Используя эти определения, я получаю те же значения, что и nvprof: для доступа к 4096 элементам массива требуется 128 инструкций уровня деформации (= запросы) с 32 нитями каждый. Использование 32-байтовых загрузок (= транзакций) приводит к 1024 транзакциям.

...