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

Этот пример показывает вам, как сгенерировать отчет профилирования выполнения для сгенерированного кода 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'

Отчет Профилирования Выполнения кода для fog_rectification

Отчет профилирования выполнения кода обеспечивает метрики на основе данных, собранных от SIL или выполнения PIL. Времена выполнения вычисляются от данных, зарегистрированных зондами инструментирования, добавленными к SIL или тестовой обвязке PIL или в коде, сгенерированном для каждого компонента. Смотрите, что Выполнение кода Профилирует для получения дополнительной информации о Разделах 1 и 2. Обратите внимание на то, что эти числа являются представительными, и фактические значения зависят от вашей настройки оборудования. Это профилирование было сделано с помощью MATLAB 19a на машине с 8 ядрами, центральном процессоре Intel® Xeon® на 2.6 ГГц и XP Титана NVIDIA графический процессор

1. Сводные данные

2. Профилируемые разделы кода

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

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

4. Графический процессор Профильные Сводные данные для fog_rectification

Раздел 4 в отчете показывает сводные данные вызовов графического процессора, которые показывают в разделе 3. 'cudaFree' называется 25 раз на запущенный из 'fog_rectification' и среднее время, потраченное 25 вызовами 'cudaFree', более чем 9 выполнений 'fog_rectification' составляют 1,9652 мс. Эти сводные данные сортируются в порядке убывания времени, потраченного, чтобы дать пользователям идею, какой звонок графического процессора принимает максимальное время.

Команда выполнения: Очистка

Удалите временные файлы и возвратитесь к исходной папке

cleanup