В этом примере показано, как создать отчет о профилировании выполнения для созданного кода 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.
Чтобы убедиться, что компиляторы и библиотеки, необходимые для выполнения этого примера, настроены правильно, используйте 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 КСП ГПУ


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

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