Этот пример показывает вам, как сгенерировать отчет профилирования выполнения для сгенерированного кода CUDA® при помощи gpucoder.profile
функция. Исправление вуали используется в качестве примера, чтобы продемонстрировать эту концепцию.
CUDA включил NVIDIA® графический процессор.
NVIDIA инструментарий CUDA и драйвер.
Переменные окружения для компиляторов и библиотек. Для получения информации о поддерживаемых версиях компиляторов и библиотек, смотрите Стороннее Оборудование. Для подготовки переменных окружения смотрите Подготовку Необходимых как условие продуктов.
Профильный рабочий процесс этого примера зависит от nvprof
инструмент от NVIDIA. От инструментария CUDA v10.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 берет туманное изображение, как введено и возвращает изображение 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: <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 или в коде, сгенерированном для каждого компонента. Для получения дополнительной информации, Времена выполнения вида на море (Embedded Coder). Эти числа являются представительными. Фактические значения зависят от вашей настройки оборудования. Это профилирование было сделано с помощью MATLAB R2020a на машине с 6 ядрами, центральном процессоре Intel® Xeon® на 3.5 ГГц и XP TITAN NVIDIA графический процессор
Разделите 3, показывает полную трассировку вызовов графического процессора, которые имеют время выполнения выше, чем пороговое значение. 'Threshold'
параметр задан как часть максимального времени выполнения для запуска (исключая первый показ). Например, из 9 вызовов верхнего уровня fog_rectification
функция, если третий вызов занял максимальное время (мс), то максимальное время выполнения является миллисекундами. Все вызовы графического процессора, берущие больше, чем миллисекунды, показывают в этом разделе. Установка вашего курсора на вызовы показывает значения во время выполнения другой соответствующей сопутствующей информации несинхронизации для каждого вызова. Например, устанавливая ваш курсор на fog_rectification_kernel10
показывает наибольшие главные размерения, размерности сетки и статический размер общей памяти в кибибайте того вызова. Эта трассировка соответствует запуску, который занял максимальное время.
Раздел 4 в отчете показывает сводные данные вызовов графического процессора, которые показывают в разделе 3. cudaFree
называется 17 раз на запущенный из fog_rectification
и среднее время, потраченное 17 вызовами cudaFree
более чем 9 запусков fog_rectification
1,7154 миллисекунды. Эти сводные данные сортируются в порядке убывания времени, потраченного, чтобы дать пользователям идею, какой звонок графического процессора принимает максимальное время.