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);

Создайте модель Simulink и вставьте два функциональных блока MATLAB из библиотеки пользовательских функций.
Добавление блока константы и установка для него значения 0.4.
Добавьте блок из мультимедийного файла из библиотеки Computer Vision Toolbox™.
Откройте диалоговое окно «Параметры блока» для блока «Из мультимедийного файла» и задайте для параметра «Имя файла» значение rhinos.avi.
Установите для параметра Image signal значение One multidimensional signal.
Добавьте в модель два блока Video Viewer из библиотеки инструментов Computer Vision Toolbox.

Дважды щелкните по одному из функциональных блоков MATLAB. Сигнатура функции по умолчанию появляется в редакторе функциональных блоков MATLAB.
Определение функции с именем 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
Откройте параметры блока для функционального блока MATLAB. На вкладке Создание кода выберите Reusable function для параметра упаковки функций.
Если параметр Function packaging имеет любое другое значение, ядра CUDA могут не генерироваться.
Измените другой функциональный блок 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
Подключите эти блоки, как показано на схеме. Сохранить модель как edgeDetection.slx.

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

Параметры конфигурации модели определяют метод ускорения, используемый при моделировании.
Откройте диалоговое окно «Параметры конфигурации». Откройте панель Решатель (Solver). Чтобы скомпилировать модель для ускорения и создать код CUDA, настройте модель на использование решателя с фиксированным шагом. В этой таблице показана конфигурация решателя для этого примера.
| Параметр | Настройка | Влияние на сгенерированный код |
|---|---|---|
| Напечатать | Fixed-step | Поддерживает постоянный (фиксированный) размер шага. |
| Решающее устройство | discrete (no continuous states) | Применяет метод интеграции с фиксированным шагом для вычисления производной состояния модели. |
| Фиксированный размер шага | auto | Simulink выбирает размер шага. |

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

Чтобы сохранить и закрыть диалоговое окно Параметры конфигурации (Configuration Parameters), нажмите кнопку ОК.
Вы также можете использовать set_param Функция (Simulink) используется для программной настройки параметров модели в окне команд MATLAB.
set_param('edgeDetection','GPUAcceleration','on');
Чтобы построить и смоделировать ускоренную модель графического процессора, выберите команду Выполнить (Run) на вкладке Моделирование (Simulation) или используйте следующую команду MATLAB:
sim('edgeDetection');
Сначала программа проверяет, был ли предварительно скомпилирован код CUDA для модели. Если код был создан ранее, программа запускает модель. Если код ранее не создавался, программное обеспечение сначала генерирует и компилирует код CUDA, а затем запускает модель. Инструмент создания кода помещает созданный код в подпапку рабочей папки с именем slprj/_slprj/edgeDetection.

Генерация кода графического процессора для функциональных блоков MATLAB в диаграммах Stateflow ® не поддерживается.
Если включено ускорение графического процессора, генератор кода не поддерживает импорт пользовательского кода для импорта пользовательских исходных файлов CUDA (* .cu). Вместо этого используйтеcoder.ceval внутри функционального блока MATLAB.
Функциональный блок MATLAB поддерживает не все типы данных из языка MATLAB. Поддерживаемые типы данных см. в документации по блокам.
bdclose (Simulink) | close_system (Simulink) | get_param (Simulink) | load_system (Simulink) | open_system (Simulink) | save_system (Simulink) | set_param (Simulink) | sim (Simulink) | slbuild (Симулинк)