2015-09-17 2 views
2

Я знаком с использованием nvprof для доступа событий и метрик ориентира, например,Как наблюдать события и показатели CUDA для подраздела исполняемого файла (например, только во время выполнения ядра)?

nvprof --system-profiling on --print-gpu-trace -o (file name) --events inst_issued1 ./benchmarkname 

Команда

system-profiling on --print-gpu-trace -o (filename)  

дает временные метки для времени начала, окончания ядра раз, мощность, темп и сохраняет информацию в файлах nvvp, чтобы мы могли просматривать их в визуальном профилировщике. Это позволяет нам видеть, что происходит в любом разделе кода, в частности, когда выполняется определенное ядро. Мой вопрос таков:

Есть ли способ изолировать события, подсчитанные только для части контрольного прогона, например, во время выполнения ядра? В приведенной выше команде

--events inst_issued1  

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

+0

должен сказать: «команда дает временные метки для ядра * время начала, время ядра, ...« – travelingbones

+0

Вы можете отредактировать свой собственный вопрос, а не делать такой комментарий. –

ответ

0

Посмотрев на это немного больше, то получается, что информация на уровне ядра также дается для всех ядер (без использования --kernels и с указанием их специально) с помощью

nvprof --events <event names> --metrics <metric names> ./<cuda benchmark> 

На самом деле, это дает выходные формы

«Device», «ядро», «заклинания», «Имя события», «Min», «Max», «Средний»

Если ядро ​​называется несколько раз в тесте , это позволяет вам видеть Min, Max, Avg из желаемых событий для запуска этих ядер s. Очевидно, что опция --kernels на Cuda 7.5 Profiler позволяет указать каждый запуск каждого ядра.

5

Возможно, вы захотите прочитать profiler documentation.

Вы можете включить и выключить профилирование в пределах исполняемого файла. CUDA выполнения API для этого:

cudaProfilerStart() 
cudaProfilerStop() 

Итак, если вы хотите, чтобы собрать информацию о профиле только для конкретного ядра, вы могли бы сделать:

#include <cuda_profiler_api.h> 
... 

cudaProfilerStart(); 
myKernel<<<...>>>(...); 
cudaProfilerStop(); 

и excerpting из документации:

При использовании функций запуска и останова вам также необходимо проинструктировать инструмент профилирования, чтобы отключить профилирование в начале приложения. Для nvprof вы делаете это с флагом -profile-from-start off. Для Visual Profiler вы используете флажок «Начать выполнение с включенным профилированием» в окне «Настройки».

Кроме того, из the documentation для nvprof конкретно, вы можете ограничить событие/метрическое подведение к одному ядру с помощью параметра командной строки:

--kernels <kernel name> 

документации дает дополнительные возможности использования.

+0

Спасибо @Robert Crovella! Кроме того, я изучал это и заметил, что вы можете получить информацию о уровне ядра для каждого ядра без вызова --kernel Я сделаю еще один ответ – travelingbones

+0

Можете ли вы указать мне на список показателей и событий для архитектур Ферми? Судя по каждому вопросу о профилировании NVIDIA GPU, который я видел, вы первый ответите! http: //stackoverflow.com/questions/32994604/what-are-the-available-nvidia-fermi-architecture-gpus-counters-events-and-metri – travelingbones

+0

Вы можете получить это от самого оборудования, выполнив 'nvprof -query -метрия' (может быть, вы должны прочитать [руководство по профайлерам] (http://docs.nvidia.com/cuda/profiler-users-guide/index.html#event-summary-mode) ??) также может выполнять 'nvprof --query-events' (Должен ли я упоминать, что профилировщик имеет команду командной строки' nvprof --help'?) В любом случае, в конце документации профилировщика есть список показателей, разбитых на вычисления архитектура. Ферми - cc2.0. Итак, посмотрите [здесь] (http://docs.nvidia.com/cuda/profiler-users-guide/index.html#metrics-reference). –

Смежные вопросы