Этот пример показывает вам, как сгенерировать отчет профилирования выполнения для сгенерированного кода CUDA® при помощи функции gpucoder.profile. Исправление вуали используется в качестве примера, чтобы продемонстрировать эту концепцию.
CUDA включил NVIDIA®, графический процессор с вычисляет возможность 3.2 или выше.
NVIDIA инструментарий CUDA и драйвер.
Переменные окружения для компиляторов и библиотек. Для получения информации о поддерживаемых версиях компиляторов и библиотек, смотрите Сторонние продукты. Для подготовки переменных окружения смотрите Переменные окружения.
Image Processing Toolbox™ для чтения и отображения изображений.
Embedded Coder® для генерации отчета.
Этот пример поддерживается только на платформе Linux®.
Следующая строка кода создает папку в вашей текущей рабочей папке (pwd) и копирует все соответствующие файлы в эту папку. Если вы не хотите выполнять эту операцию или если вы не можете сгенерировать файлы в этой папке, изменить вашу текущую рабочую папку.
gpucoderdemo_setup('gpucoderdemo_fog_rectification_profile');
Используйте 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) генерировать значимый профильный отчет. Кроме того, не желательно установить 'NumCalls' на очень небольшое число (меньше чем 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'
Отчет профилирования выполнения кода обеспечивает метрики на основе данных, собранных от SIL или выполнения PIL. Времена выполнения вычисляются из данных, зарегистрированных зондами инструментирования, добавленными к SIL или тестовой обвязке PIL или в коде, сгенерированном для каждого компонента. Смотрите, что Выполнение кода Профилирует для получения дополнительной информации о Разделах 1 и 2. Обратите внимание на то, что эти числа являются представительными, и фактические значения зависят от вашей настройки оборудования. Это профилирование было сделано с помощью MATLAB 19a на машине с 8 ядрами, центральном процессоре Intel® Xeon® на 2.6 ГГц и XP Титана NVIDIA графический процессор
Разделите 3, показывает полную трассировку вызовов графического процессора, которые имеют время выполнения выше, чем 'Порог'. 'Пороговый' параметр задан как часть 'максимального времени выполнения' для запуска (исключая первый показ). Например, из 9 вызовов верхнего уровня 'fog_rectification' функция, если третий вызов занял максимальное время (скажем, t мс), то 'максимальное время выполнения' является t миллисекундами. Все вызовы графического процессора, берущие больше, чем мс (Threshold*t), покажут в этом разделе. Наведение на вызовы показывает значения во время выполнения другой соответствующей сопутствующей информации несинхронизации для каждого вызова. Например, наведение на fog_rectification_kernel10 показывает наибольшие главные размерения, размерности сетки и статический размер общей памяти в кибибайте того вызова. Эта трассировка соответствует запуску, который занял максимальное время.
Раздел 4 в отчете показывает сводные данные вызовов графического процессора, которые показывают в разделе 3. 'cudaFree' называется 25 раз на запущенный из 'fog_rectification' и среднее время, потраченное 25 вызовами 'cudaFree', более чем 9 запусков 'fog_rectification' составляют 1,9652 мс. Эти сводные данные сортируются в порядке убывания времени, потраченного, чтобы дать пользователям идею, какой звонок графического процессора принимает максимальное время.
Удалите временные файлы и возвратитесь к исходной папке
cleanup