Создайте и запустите исполняемый файл на оборудовании NVIDIA

Использование 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. Создайте функцию 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

Создайте объект Оборудование Connection

Программное обеспечение пакета поддержки использует 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, используя GPU Coder

Чтобы сгенерировать исполняемый файл CUDA, который можно развернуть на целевом устройстве NVIDIA, создайте пользовательский основной файл (main.cu) и заголовочный файл (main.h). Основной файл вызывает код, сгенерированный для функции точки входа MATLAB. Основной файл передает вектор, содержащий первые 100 натуральных чисел, в функцию точки входа и записывает результаты в двоичный файл (myAdd.bin).

 main.cu

 main.h

Создайте объект строения кода 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

См. также

Объекты

  • (Пакет поддержки MATLAB CODER для платформ NVIDIA Jetson и NVIDIA DRIVE) | (Пакет поддержки MATLAB CODER для платформ NVIDIA Jetson и NVIDIA DRIVE)

Похожие темы