Использование Nsight для определения банковских конфликтов и объединения - PullRequest
1 голос
/ 04 июля 2011

Как я могу узнать число не слитых конфликтов чтения / записи и конфликтов в банке с помощью параллельного nsight?
Кроме того, на что мне следует обращать внимание при использовании nsight для профилирования?Какие важные поля могут привести к замедлению работы моей программы?

Ответы [ 3 ]

1 голос
/ 05 июля 2011

Для банковских конфликтов нужно смотреть warp serialization. Смотри здесь .

И здесь обсуждается о мониторинге слияния памяти <- в основном вам просто нужно посмотреть <code>Global Memory Loads/Stores - Coalesced/Uncoalesced и отметить Uncoalesced.

1 голос
/ 05 июля 2011

Я не использую NSight, но типичные поля, на которые вы будете смотреть с помощью профилировщика:

  • потребление памяти
  • время, потраченное на функции

Точнее говоря, с CUDA вы будете осторожны с загруженностью вашего GPU.
Другие интересные значения - способ, которым компилятор установил ваши локальные переменные: в регистрах или в локальной памяти.

Наконец, вы проверите время, потраченное на передачу данных в графический процессор и обратно, и сравните его со временем вычислений.

0 голосов
/ 07 июля 2011

M. Тиббиты в основном ответили на все, что вам нужно знать о банковских конфликтах и ​​не слитых транзакциях памяти.

На вопрос о том, на какие важные поля / вещи нужно обратить внимание (при использовании профилировщика Nsight), которые могут привести к замедлению работы моей программы:

  1. Используйте приложение или системную трассировку, чтобы определить, привязаны ли вы к процессору, памяти или ядру. Это можно сделать, посмотрев на временную шкалу.

а. Процессор привязан - вы увидите большие области, где не происходит копирование ядра или памяти, но потоки вашего приложения (Thread State) имеют зеленый цвет

б. Ограничение памяти - выполнение ядер заблокировано при передаче памяти на устройство или с него. Вы можете увидеть это, посмотрев на ряд памяти. Если вы проводите много времени в копиях памяти, вам следует рассмотреть возможность использования потоков CUDA для конвейеризации вашего приложения. Это может позволить вам перекрывать передачу памяти и ядра. Перед изменением вашего кода вы должны сравнить продолжительность передачи и ядра и убедиться, что вы получите прирост производительности.

с. Связывание с ядром - если большая часть времени приложения тратится на ожидание завершения работы ядра, вам следует переключиться на действие «Профиль», перезапустить приложение и начать сбор аппаратных счетчиков, чтобы увидеть, как вы можете сделать фактическое время выполнения вашего ядра. Быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...