Профилирование выполнения графический процессор сгенерированного кода

В этом примере показано, как сгенерировать отчет о профилировании выполнения для сгенерированного кода CUDA ® с помощью gpucoder.profile функция. Выпрямление тумана используется в качестве примера для демонстрации этой концепции.

Необходимые условия

  • Графический процессор NVIDIA ® с поддержкой CUDA.

  • Инструментарий и драйвер NVIDIA CUDA.

  • Переменные окружения для компиляторов и библиотек. Дополнительные сведения о поддерживаемых версиях компиляторов и библиотек см. в разделе Оборудование сторонних производителей. Для настройки переменных окружения смотрите Настройка обязательных продуктов.

  • Рабочий процесс профилирования этого примера зависит от nvprof инструмент от NVIDIA. Из набора инструментальных средств CUDA версии 10.1 NVIDIA ограничивает доступ к счетчикам эффективности только пользователям администрирования. Чтобы разрешить использование счетчиков эффективности графический процессор всеми пользователями, см. инструкции, приведенные в https://developer.nvidia.com/nvidia-development-tools-solutions-ERR_NVGPUCTRPERM-permission-issue-performance-counters.

Проверьте окружение GPU

Чтобы убедиться, что компиляторы и библиотеки, необходимые для выполнения этого примера, настроены правильно, используйте coder.checkGpuInstall функция.

envCfg = coder.gpuEnvConfig('host');
envCfg.BasicCodegen = 1;
envCfg.Quiet = 1;
coder.checkGpuInstall(envCfg);

Подготовка к генерации кода и профилированию

Функция fog_rectification.m принимает туманное изображение в качестве входных данных и возвращает отключенное изображение. Чтобы сгенерировать код CUDA, создайте объект строения кода GPU с динамической библиотекой ('dll') тип сборки. Потому что gpucoder.profile функция принимает только объект строения Embedded Coder, a coder.EmbeddedCodeConfig объект строения используется, даже если ecoder опция явно не выбрана.

inputImage = imread('foggyInput.png');
inputs  ={inputImage};
designFileName = 'fog_rectification';

cfg = coder.gpuConfig('dll');
cfg.GpuConfig.MallocMode = 'discrete';

Сгенерируйте отчет о профилировании выполнения

Выполняйте gpucoder.profile с пороговым значением 0,003 для просмотра отчета о выполнении SIL. Пороговое значение 0,003 является всего лишь репрезентативным числом. Если сгенерированный код имеет много CUDA API или вызовов ядра, вероятно, что каждый вызов составляет лишь небольшую часть общего времени. Желательно задать низкое пороговое значение (между 0,001-0,005), чтобы сгенерировать содержательный отчет о профилировании. Не рекомендуется устанавливать количество исполнений на очень низкое число (менее 5), поскольку это не дает точного представления типового профиля выполнения.

gpucoder.profile(designFileName, inputs, 'CodegenConfig', cfg, 'Threshold', 0.003, 'NumCalls', 10);
### Starting SIL execution for 'fog_rectification'
    To terminate execution: <a href="matlab: targets_hyperlink_manager('run',1);">clear fog_rectification_sil</a>
    Execution profiling data is available for viewing. Open <a href="matlab:Simulink.sdi.view;">Simulation Data Inspector.</a>
    Execution profiling report available after termination.
### Stopping SIL execution for 'fog_rectification'

Отчет о профилировании выполнения кода для fog_rectification Функция

Отчет о профилировании выполнения кода предоставляет метрики на основе данных, собранных при выполнении SIL или PIL. Времена выполнения вычисляются из данных, записанных зондами инструментирования добавленными в SIL или PIL тестовыми обвязками или внутри кода, сгенерированного для каждого компонента. Для получения дополнительной информации смотрите View Execution Times (Embedded Coder). Эти цифры являются показательными. Фактические значения зависят от настройки оборудования. Профилирование выполнялось с помощью R2020a MATLAB на компьютере с 6-ядерным процессором 3.5GHz процессором Intel ® Xeon ® и графическим процессором NVIDIA TITAN XP

1. Сводные данные

2. Профилированные разделы кода

3. Трассировка профилирования графического процессора для fog_rectification

В разделе 3 показана полная трассировка вызовов графический процессор, время выполнения которых превышает пороговое значение. The 'Threshold' параметр определяется как доля максимального времени выполнения для запуска (за исключением первого запуска). Например, из 9 вызовов на верхний уровень fog_rectification function, если третий вызов занял максимальное время $t$(, мс), то максимальное время выполнения -$t$ миллисекунды. Все вызовы графический процессор, принимающие более$Threshold*t$ миллисекунд, показаны в этом разделе. Наведение курсора на вызовы показывает значения времени выполнения другой соответствующей информации, не связанной с синхронизацией, для каждого вызова. Для примера наведите курсор на fog_rectification_kernel10 показывает размерности блоков, размерности сетки и статический размер общей памяти в КиБ этого вызова. Эта трассировка соответствует запуску, который занял максимальное время.

4. Сводные данные профилирования графического процессора для fog_rectification

В разделе 4 отчета показаны сводные данные вызовов графический процессор, показанная в разделе 3. The cudaFree вызывается 17 раз за прогон fog_rectification и среднее время, затраченное 17 вызовами cudaFree более 9 запусков fog_rectification составляет 1.7154 миллисекунды. Эти сводные данные сортируются в порядке убывания времени, необходимом для того, чтобы дать пользователям представление о том, какой вызов графический процессор занимает максимальное время.