Использование GPU Coder™ и MATLAB® Coder™ поддержки для NVIDIA® Джетсон® и NVIDIA DRIVE™ Platforms, вы можете использовать платформы NVIDIA DRIVE и Jetson оборудования. После подключения к аппаратным платформам можно выполнить основные операции, сгенерировать CUDA® исполняемый файл из функции точки входа MATLAB и запуск исполняемого файла на оборудовании.
Примечание
Начиная с R2021a, пакет поддержки GPU Coder для графических процессоров NVIDIA называется пакетом поддержки MATLAB CODER для платформ NVIDIA Jetson и NVIDIA DRIVE. Чтобы использовать этот пакет поддержки в R2021a, вы должны иметь продукт MATLAB Coder.
В этом руководстве вы узнаете, как:
Подготовьте код MATLAB для генерации кода CUDA с помощью kernelfun
прагма.
Подключение к целевой плате NVIDIA.
Сгенерируйте и разверните исполняемый файл CUDA на целевой плате.
Запустите исполняемый файл на плате и проверьте результаты.
NVIDIA DRIVE PX2 или встроенная платформа Jetson.
Перекрестный кабель Ethernet для подключения целевой платы и хост-ПК (если целевая плата не может быть подключена к локальной сети).
На плате установлен набор инструментов NVIDIA CUDA.
Переменные окружения целевого компьютера для компиляторов и библиотек. Дополнительные сведения о поддерживаемых версиях компиляторов, библиотек и их настройке см. в разделе Предварительные необходимые условия установки и Setup плат NVIDIA (Пакет поддержки MATLAB CODER для платформ NVIDIA Jetson и NVIDIA DRIVE).
Набор инструментов NVIDIA CUDA на хосте.
Переменные окружения на хосте для компиляторов и библиотек. Дополнительные сведения о поддерживаемых версиях компиляторов и библиотек см. в разделе Оборудование сторонних производителей. Для настройки переменных окружений смотрите Окружение Переменные.
Это руководство использует простой пример сложения векторов, чтобы продемонстрировать рабочий процесс сборки и развертывания на графических процессорах NVIDIA. Создайте функцию MATLAB myAdd.m
который действует как entry-point для генерации кода. Кроме того, используйте файлы в примере «Начало работы с пакетом поддержки MATLAB Coder для NVIDIA Jetson и NVIDIA DRIVE Platforms» для этого руководства. Самый легкий способ создать код CUDA для этой функции - это разместить coder.gpu.kernelfun
прагма в функции. Когда GPU Coder встречается kernelfun
pragma, она пытается параллелизировать расчеты в рамках этой функции и сопоставить их с графическим процессором.
function out = myAdd(inp1,inp2) %#codegen coder.gpu.kernelfun(); out = inp1 + inp2; end
Программное обеспечение пакета поддержки использует SSH-соединение через TCP/IP для выполнения команд во время создания и выполнения сгенерированного кода CUDA на платформах DRIVE или Jetson. Подключите целевую платформу к той же сети, что и хосту-компьютеру, или используйте перекрестный кабель Ethernet, чтобы подключить плату непосредственно к хосту-компьютеру. См. документацию NVIDIA по настройке и конфигурированию системной платы.
Для связи с оборудованием NVIDIA необходимо создать объект подключения к активному оборудованию при помощи jetson
(Пакет поддержки MATLAB CODER для платформ NVIDIA Jetson и NVIDIA DRIVE) или drive
(MATLAB Coder Support Package for NVIDIA Jetson и NVIDIA DRIVE Platforms). Чтобы создать объект подключения к активному оборудованию с помощью функции, укажите имя хоста или IP-адрес, имя пользователя и пароль целевой платы. Для примера создания объекта live для оборудования Jetson:
hwobj = jetson('jetson-board-name','ubuntu','ubuntu');
Программа выполняет проверку оборудования, инструментов компилятора, библиотек, установки сервера ввода-вывода и собирает периферийную информацию о цели. Эта информация отображается в командном окне.
Checking for CUDA availability on the Target... Checking for NVCC in the target system path... Checking for CUDNN library availability on the Target... Checking for TensorRT library availability on the Target... Checking for Prerequisite libraries is now complete. Gathering hardware details... Checking for third-party library availability on the Target... Gathering hardware details is complete. Board name : NVIDIA Jetson TX2 CUDA Version : 10.0 cuDNN Version : 7.6 TensorRT Version : 6.0 GStreamer Version : 1.14.5 V4L2 Version : 1.14.2-1 SDL Version : 1.2 OpenCV Version : 4.1.1 Available Webcams : UVC Camera (046d:0809) Available GPUs : NVIDIA Tegra X2
Кроме того, чтобы создать объект live для оборудования DRIVE:
hwobj = drive('drive-board-name','nvidia','nvidia');
Примечание
В случае отказа соединения в командном окне MATLAB выводится сообщение об ошибке диагностики. Если подключение не удалось, наиболее вероятной причиной является неправильный IP-адрес или имя узла.
Чтобы сгенерировать исполняемый файл CUDA, который можно развернуть на целевом устройстве NVIDIA, создайте пользовательский основной файл (main.cu
) и заголовочный файл (main.h
). Основной файл вызывает код, сгенерированный для функции точки входа MATLAB. Основной файл передает вектор, содержащий первые 100 натуральных чисел, в функцию точки входа и записывает результаты в двоичный файл (myAdd.bin
).
Создайте объект строения кода GPU для генерации исполняемого файла. Используйте coder.hardware
функция, чтобы создать объект строения для платформы DRIVE или Jetson и назначить его Hardware
свойство объекта строения кода cfg
. Используйте BuildDir
Свойство, чтобы указать папку для выполнения процесса удаленной сборки на целевом компьютере. Если заданная папка сборки не существует в целевой папке, то программа создает папку с заданным именем. Если значение не назначено cfg.Hardware.BuildDir
процесс удаленной сборки происходит в последней указанной папке сборки. Если нет значения сохраненной папки сборки, процесс сборки происходит в домашней папке.
cfg = coder.gpuConfig('exe'); cfg.Hardware = coder.hardware('NVIDIA Jetson'); cfg.Hardware.BuildDir = '~/remoteBuildDir'; cfg.CustomSource = fullfile('main.cu');
Чтобы сгенерировать код CUDA, используйте codegen
команда и передать объект строения кода GPU вместе с размером входов для и myAdd
функция точки входа. После того, как генерация кода происходит на хосте, сгенерированные файлы копируются и строятся на целевом компьютере.
codegen('-config ',cfg,'myAdd','-args',{1:100,1:100});
Чтобы запустить исполняемый файл на целевом компьютере, используйте runApplication()
метод аппаратного объекта. В командном окне MATLAB введите:
pid = runApplication(hwobj,'myAdd');
### Launching the executable on the target... Executable launched successfully with process ID 26432. Displaying the simple runtime log for the executable...
Скопируйте выходной файл интервала myAdd.bin
в окружение MATLAB на хосте и сравните вычисленные результаты с результатами MATLAB.
outputFile = [hwobj.workspaceDir '/myAdd.bin'] getFile(hwobj,outputFile); % Simulation result from the MATLAB. simOut = myAdd(0:99,0:99); % Read the copied result binary file from target in MATLAB. fId = fopen('myAdd.bin','r'); tOut = fread(fId,'double'); diff = simOut - tOut'; fprintf('Maximum deviation : %f\n', max(diff(:)));
Maximum deviation between MATLAB Simulation output and GPU coder output on Target is: 0.000000
drive
(Пакет поддержки MATLAB CODER для платформ NVIDIA Jetson и NVIDIA DRIVE) | jetson
(Пакет поддержки MATLAB CODER для платформ NVIDIA Jetson и NVIDIA DRIVE)