В этом примере показано, как сгенерировать отчет о профилировании выполнения для сгенерированного кода 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, 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
В разделе 3 показана полная трассировка вызовов графический процессор, время выполнения которых превышает пороговое значение. The 'Threshold'
параметр определяется как доля максимального времени выполнения для запуска (за исключением первого запуска). Например, из 9 вызовов на верхний уровень fog_rectification
function, если третий вызов занял максимальное время (, мс), то максимальное время выполнения - миллисекунды. Все вызовы графический процессор, принимающие более миллисекунд, показаны в этом разделе. Наведение курсора на вызовы показывает значения времени выполнения другой соответствующей информации, не связанной с синхронизацией, для каждого вызова. Для примера наведите курсор на fog_rectification_kernel10
показывает размерности блоков, размерности сетки и статический размер общей памяти в КиБ этого вызова. Эта трассировка соответствует запуску, который занял максимальное время.
В разделе 4 отчета показаны сводные данные вызовов графический процессор, показанная в разделе 3. The cudaFree
вызывается 17 раз за прогон fog_rectification
и среднее время, затраченное 17 вызовами cudaFree
более 9 запусков fog_rectification
составляет 1.7154 миллисекунды. Эти сводные данные сортируются в порядке убывания времени, необходимом для того, чтобы дать пользователям представление о том, какой вызов графический процессор занимает максимальное время.