exponenta event banner

Создание кода из моделей Simulink с кодером GPU

Графический процессор Coder™ генерирует оптимизированный код CUDA ® из моделей Simulink ®, содержащих функциональные блоки MATLAB. Созданный код и исполняемый файл можно использовать для быстрого создания прототипов на графических процессорах NVIDIA ®. Отчеты по созданию и отслеживанию кода позволяют просматривать и анализировать созданный код. Основные шаги для генерации кода CUDA с помощью кодера графического процессора:

  • Создание или открытие модели.

  • Настройте модель для генерации кода, выбрав решатель, язык, схему инструментов и другие параметры конфигурации, специфичные для графического процессора.

  • Создайте модель.

Пример: Обнаружение краев Собеля

Алгоритм обнаружения ребер Собеля - это простой алгоритм обнаружения ребер, который выполняет 2-D операцию пространственного градиента для изображения в градациях серого. Этот алгоритм подчеркивает области высокой пространственной частоты, которые соответствуют краям входного изображения.

Алгоритм ребра Собеля вычисляет горизонтальный градиент (H) и вертикальный градиент (V) входного изображения с использованием двух ортогональных ядер фильтра (k и k'). После операции фильтрации алгоритм вычисляет величину градиента и применяет порог для поиска областей изображений, которые считаются краями.

k = single([1 2 1; 0 0 0; -1 -2 -1]);
H = conv2(single(grayImage),k, 'same');
V = conv2(single(grayImage),k','same');
E = sqrt(H.*H + V.*V);
edgeImage = uint8((E > threshold) * 255);

MATLAB peppers.png test image and its edge detected output.

Создание модели обнаружения кромок

  1. Создайте модель Simulink и вставьте два функциональных блока MATLAB из библиотеки пользовательских функций.

  2. Добавление блока константы и установка для него значения 0.4.

  3. Добавьте блок из мультимедийного файла из библиотеки Computer Vision Toolbox™.

  4. Откройте диалоговое окно «Параметры блока» для блока «Из мультимедийного файла» и задайте для параметра «Имя файла» значение rhinos.avi.

    Установите для параметра Image signal значение One multidimensional signal.

  5. Добавьте в модель два блока Video Viewer из библиотеки инструментов Computer Vision Toolbox.

    Simulink model containing blocks for implementing edge detection algorithm.

  6. Дважды щелкните по одному из функциональных блоков MATLAB. Сигнатура функции по умолчанию появляется в редакторе функциональных блоков MATLAB.

  7. Определение функции с именем sobel, который реализует алгоритм обнаружения ребер Собеля. Заголовок функции объявляет grayImage и threshold в качестве аргумента для sobel функция, с edgeImage в качестве возвращаемого значения. Сохранить документ редактора в файл.

    function edgeImage  = sobel(grayImage,threshold)   %#codegen
    
    % Define Kernel for Sobel edge detection
    k = single([1 2 1; 0 0 0; -1 -2 -1]);
    
    % Detect Edge
    H = conv2(single(grayImage),k, 'same');
    V = conv2(single(grayImage),k','same');
    E = sqrt(H.*H + V.*V);
    edgeImage = uint8((E > threshold) * 255);
    
    end
    

  8. Откройте параметры блока для функционального блока MATLAB. На вкладке Создание кода выберите Reusable function для параметра упаковки функций.

    Если параметр Function packaging имеет любое другое значение, ядра CUDA могут не генерироваться.

  9. Измените другой функциональный блок MATLAB, чтобы реализовать преобразование RGB в градации серого до операции обнаружения края Sobel. Установите для параметра Function packaging блока MATLAB Function значение Reusable function.

    function gray = RGB2gray(RGB)   %#codegen
    % Convert color image to grey image
    
    gray = (0.2989 * double(RGB(:,:,1)) + ...
        0.5870 * double(RGB(:,:,2)) + ...
        0.1140 * double(RGB(:,:,3)));
    
    end
  10. Подключите эти блоки, как показано на схеме. Сохранить модель как edgeDetection.slx.

    Simulink model showing connection between the blocks.

  11. Чтобы проверить модель на наличие ошибок, смоделируйте модель в редакторе Simulink Editor. На панели инструментов нажмите «Выполнить».

    Чтобы просмотреть все видеокадры во время моделирования, отключите команду «Моделирование» > «Удалить кадры», чтобы повысить производительность блока Video Viewer.

    Edge detected output from the Video Viewer block.

Настройка модели для создания кода

Параметры конфигурации модели предоставляют множество опций для процесса генерации и построения кода.

  1. Откройте диалоговое окно «Параметры конфигурации». Откройте панель Решатель (Solver). Чтобы скомпилировать модель для ускорения и создать код CUDA, настройте модель на использование решателя с фиксированным шагом. В этой таблице показана конфигурация решателя для этого примера.

    ПараметрНастройкаВлияние на сгенерированный код
    НапечататьFixed-stepПоддерживает постоянный (фиксированный) размер шага, необходимый для создания кода
    Решающее устройствоdiscrete (no continuous states)Применение метода интеграции с фиксированным шагом для вычисления производной состояния модели
    Фиксированный размер шагаautoSimulink выбирает размер шага

    Snapshot of the configuration parameters dialog showing solver options for simulation.

  2. На панели «Создание кода» задайте для целевого системного файла значение grt.tlc.

    Также можно использовать целевой файл Embedded Coder ®ert.tlc.

  3. Установите язык в значение C++.

  4. Выберите Создать код графического процессора.

  5. На панели Создание кода (Code Generation) выберите Только генерировать код (Generate code only).

  6. Выберите «Цепь инструментов». Для платформ Linux ® выберитеNVIDIA CUDA | gmake (64-bit Linux). Для систем Windows ® выберитеNVIDIA CUDA (w/Microsoft Visual C++ 20XX) | nmake (64-bit windows).

  7. На панели «Создание кода» > «Интерфейс» отключите ведение журнала MAT-файлов.

    Генератор кода не поддерживает ведение журнала MAT-файлов при создании кода CUDA.

  8. На панели Создание кода > Отчет выберите Создать отчет о создании кода и Открыть отчет автоматически.

  9. Если параметр Generate GPU code включен, параметры, относящиеся к кодеру GPU, отображаются на панели Code Generation (Создание кода) > GPU Code (Код графического процессора).

    В этом примере можно использовать значения по умолчанию параметров, специфичных для графического процессора, в окне «Создание кода» > «Код графического процессора».

    GPU Code pane on the configuration parameters dialog of the model.

  10. Нажмите кнопку ОК, чтобы сохранить и закрыть диалоговое окно Параметры конфигурации (Configuration Parameters).

    Вы можете использовать set_param используется для программной настройки параметра модели в окне команд MATLAB ®.

    set_param('edgeDetection','GenerateGPUCode','CUDA');
    

Создание кода CUDA для модели

  1. В редакторе Simulink откройте приложение Simulink Coder.

  2. Создать код.

Сообщения появляются в программе Diagnostics Viewer. Генератор кода создает исходные и заголовочные файлы CUDA и отчет о создании кода HTML. Генератор кода помещает файлы в папку построения, подпапку с именем edgeDetection_grt_rtw в текущей рабочей папке.

Ядра CUDA можно найти в <model_name>_eML_blk_kernel и <model_name>_eML_blk_kernel_c функции. Информация в тройном шевроне является конфигурацией выполнения для ядра.

Ограничения

  • Генерация кода графического процессора для функциональных блоков MATLAB в диаграммах Stateflow ® не поддерживается.

  • Функциональный блок MATLAB поддерживает не все типы данных из языка MATLAB. Поддерживаемые типы данных см. в документации по блокам.

См. также

Функции

Связанные темы