exponenta event banner

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

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

Предпосылки

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

Чтобы убедиться, что компиляторы и библиотеки, необходимые для выполнения этого примера, настроены правильно, используйте 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, 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 или внутри кода, сгенерированного для каждого компонента. Дополнительные сведения см. в разделе Время выполнения просмотра (встроенный кодер). Эти цифры репрезентативны. Фактические значения зависят от настройки оборудования. Это профилирование было сделано, используя MATLAB R2020a на машине с 6 ядрами, Intel® Xeon® CPU на 3.5 ГГц и ТИТАНОМ NVIDIA КСП ГПУ

1. Резюме

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

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

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

4. Сводка по профилированию GPU для fog_rectification

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