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

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

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

  • CUDA включил NVIDIA® графический процессор.

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

  • Переменные окружения для компиляторов и библиотек. Для получения информации о поддерживаемых версиях компиляторов и библиотек, смотрите Стороннее Оборудование. Для подготовки переменных окружения смотрите Подготовку Необходимых как условие продуктов.

  • Профильный рабочий процесс этого примера зависит от nvprof инструмент от NVIDIA. От инструментария CUDA v10.1, NVIDIA ограничивает доступ к счетчикам производительности только пользователям администратора. Чтобы позволить счетчикам производительности графического процессора использоваться всеми пользователями, см. инструкции, предоставленные в https://developer.nvidia.com/ERR_NVGPUCTRPERM.

Проверьте среду графического процессора

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

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

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

Функция fog_rectification.m берет туманное изображение, как введено и возвращает изображение defogged. Чтобы сгенерировать код CUDA, создайте объект настройки графического процессора кода с динамической библиотекой ('dll') создайте тип. Поскольку gpucoder.profile функция принимает только объект настройки Embedded Coder, 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 является только представительным номером. Если сгенерированный код имеет много вызовов API CUDA или вызовов ядра, вероятно, что каждый вызов составляет только небольшую пропорцию общего времени. Желательно установить низкое пороговое значение (между 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: clear fog_rectification_sil
    Execution profiling data is available for viewing. Open Simulation Data Inspector.
    Execution profiling report available after termination.
### Stopping SIL execution for 'fog_rectification'

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

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

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

2. Профилируемые разделы кода

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

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

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

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