Графический процессор 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);

Создайте модель 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 выбирает размер шага |

На панели «Создание кода» задайте для целевого системного файла значение grt.tlc.
Также можно использовать целевой файл Embedded Coder ®ert.tlc.
Установите язык в значение C++.
Выберите Создать код графического процессора.
На панели Создание кода (Code Generation) выберите Только генерировать код (Generate code only).
Выберите «Цепь инструментов». Для платформ Linux ® выберитеNVIDIA CUDA | gmake (64-bit Linux). Для систем Windows ® выберитеNVIDIA CUDA (w/Microsoft Visual C++ 20XX) | nmake (64-bit windows).
На панели «Создание кода» > «Интерфейс» отключите ведение журнала MAT-файлов.
Генератор кода не поддерживает ведение журнала MAT-файлов при создании кода CUDA.
На панели Создание кода > Отчет выберите Создать отчет о создании кода и Открыть отчет автоматически.
Если параметр Generate GPU code включен, параметры, относящиеся к кодеру GPU, отображаются на панели Code Generation (Создание кода) > GPU Code (Код графического процессора).
В этом примере можно использовать значения по умолчанию параметров, специфичных для графического процессора, в окне «Создание кода» > «Код графического процессора».

Нажмите кнопку ОК, чтобы сохранить и закрыть диалоговое окно Параметры конфигурации (Configuration Parameters).
Вы можете использовать set_param используется для программной настройки параметра модели в окне команд MATLAB ®.
set_param('edgeDetection','GenerateGPUCode','CUDA');
В редакторе Simulink откройте приложение Simulink Coder.
Создать код.
Сообщения появляются в программе Diagnostics Viewer. Генератор кода создает исходные и заголовочные файлы CUDA и отчет о создании кода HTML. Генератор кода помещает файлы в папку построения, подпапку с именем edgeDetection_grt_rtw в текущей рабочей папке.
Ядра CUDA можно найти в <model_name>_eML_blk_kernel и <model_name>_eML_blk_kernel_c функции. Информация в тройном шевроне является конфигурацией выполнения для ядра.
Генерация кода графического процессора для функциональных блоков MATLAB в диаграммах Stateflow ® не поддерживается.
Функциональный блок 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 (Симулинк)