exponenta event banner

Ускорение моделирования с помощью кодера графического процессора

Coder™ графического процессора можно использовать для ускорения выполнения модели Simulink ® на графических процессорах NVIDIA ®. Вычисления с ускорением GPU следуют гетерогенной модели программирования. Части приложения с высокой степенью параллелизма отображаются в ядра, которые выполняются на тысячах ядрах графического процессора параллельно, в то время как остальная часть последовательного кода по-прежнему выполняется на CPU.

Чтобы выполнить моделирование с ускорением графического процессора, смоделируйте интенсивные вычислительные части приложения в Simulink с помощью блоков MATLAB Function (Simulink). При моделировании модели, содержащей функциональный блок MATLAB, программное обеспечение секционирует и генерирует исполняемый код (MEX) CUDA ® MATLAB ® и интегрирует этот код с моделью Simulink.

Основные шаги для ускорения моделирования с помощью кодера графического процессора:

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

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

  • Запустите ускоренную модель графического процессора.

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

Алгоритм обнаружения ребер Собеля - это простой алгоритм обнаружения ребер, который выполняет 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. На панели «Цель моделирования» включите параметр ускорения графического процессора.

    Примечание

    Для параметра Язык автоматически устанавливается значение C++.

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

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

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

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

    set_param('edgeDetection','GPUAcceleration','on');
    

Ускоренная модель графического процессора сборки

Чтобы построить и смоделировать ускоренную модель графического процессора, выберите команду Выполнить (Run) на вкладке Моделирование (Simulation) или используйте следующую команду MATLAB:

sim('edgeDetection');

Сначала программа проверяет, был ли предварительно скомпилирован код CUDA для модели. Если код был создан ранее, программа запускает модель. Если код ранее не создавался, программное обеспечение сначала генерирует и компилирует код CUDA, а затем запускает модель. Инструмент создания кода помещает созданный код в подпапку рабочей папки с именем slprj/_slprj/edgeDetection.

Edge detected output from the Video Viewer block.

Ограничения

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

  • Если включено ускорение графического процессора, генератор кода не поддерживает импорт пользовательского кода для импорта пользовательских исходных файлов CUDA (* .cu). Вместо этого используйтеcoder.ceval внутри функционального блока MATLAB.

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

См. также

Функции

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