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

Используя GPU Coder™ и MATLAB® Coder™ Support Package для NVIDIA® Jetson® и NVIDIA Платформы Drive™, можно предназначаться для ДИСКА NVIDIA и аппаратных платформ Джетсона. После соединения с аппаратными платформами можно выполнить основные операции, сгенерировать исполняемый файл CUDA® от функции точки входа MATLAB и запустить исполняемый файл на оборудовании.

Примечание

Начиная в R2021a, Пакет Поддержки GPU Coder для NVIDIA, графические процессоры называют Пакетом Поддержки MATLAB Coder для NVIDIA Джетсоном и NVIDIA, УПРАВЛЯЕТ Платформами. Чтобы использовать этот пакет поддержки в R2021a, у вас должен быть продукт MATLAB Coder.

Изучение целей

В этом примере вы учитесь как:

  • Подготовьте свой код MATLAB к генерации кода CUDA при помощи kernelfun прагма.

  • Свяжите с требуемой платой NVIDIA.

  • Сгенерируйте и разверните исполняемый файл CUDA на требуемой плате.

  • Запустите исполняемый файл на плате и проверьте результаты.

Учебные необходимые условия

Требования требуемой платы

  • ДИСК NVIDIA PX2 или Джетсон встроил платформу.

  • Кабель перекрестного соединения Ethernet, чтобы соединить требуемую плату и PC хоста (если требуемая плата не может быть соединена с локальной сетью).

  • NVIDIA инструментарий CUDA установлен на плате.

  • Переменные окружения на цели для компиляторов и библиотек. Для получения информации о поддерживаемых версиях компиляторов библиотеки и их настройка, видят Необходимые условия Установки и Setup для Советов NVIDIA (Пакет Поддержки MATLAB Coder для NVIDIA, Джетсон и NVIDIA УПРАВЛЯЮТ Платформами).

Требования узла разработки

  • NVIDIA инструментарий CUDA на хосте.

  • Переменные окружения на хосте к компиляторам и библиотекам. Для получения информации о поддерживаемых версиях компиляторов и библиотек, смотрите Стороннее Оборудование. Для подготовки переменных окружения смотрите Переменные окружения.

Пример: векторное сложение

Этот пример использует пример сложения простого вектора, чтобы продемонстрировать сборку и рабочий процесс развертывания на NVIDIA графические процессоры. Создайте функцию MATLAB myAdd.m это действует как entry-point для генерации кода. В качестве альтернативы используйте файлы в Начале работы с Пакетом Поддержки MATLAB Coder для NVIDIA, Джетсон и NVIDIA УПРАВЛЯЮТ примером Платформ для этого примера. Самый легкий способ создать код CUDA для этой функции состоит в том, чтобы поместить coder.gpu.kernelfun прагма в функции. Когда GPU Coder сталкивается с kernelfun прагма, это пытается параллелизировать расчеты в этой функции и сопоставить их с графическим процессором.

function out = myAdd(inp1,inp2) %#codegen
coder.gpu.kernelfun();
out = inp1 + inp2;
end

Создайте живой аппаратный объект связи

Программное обеспечение пакета поддержки использует связь SSH по TCP/IP, чтобы выполнить команды при создании и выполнении сгенерированного кода CUDA по платформам Джетсона или ДИСКУ. Соедините целевую платформу с той же сетью как хост - компьютер или используйте кабель перекрестного соединения Ethernet, чтобы соединить плату непосредственно с хостом - компьютером. Обратитесь к документации NVIDIA относительно того, как настроить и сконфигурировать вашу плату.

Чтобы связаться с оборудованием NVIDIA, необходимо создать живой аппаратный объект связи при помощи jetson (Пакет поддержки MATLAB Coder для NVIDIA Джетсон и NVIDIA УПРАВЛЯЕТ платформами), или drive (Пакет Поддержки MATLAB Coder для NVIDIA Джетсон и NVIDIA УПРАВЛЯЕТ Платформами), функция. Чтобы создать живой аппаратный объект связи использование функции, обеспечьте имя хоста или IP-адрес, имя пользователя и пароль требуемой платы. Например, создать живой объект для оборудования Джетсона:

hwobj = jetson('jetson-board-name','ubuntu','ubuntu');

Программное обеспечение выполняет проверку оборудования, инструментов компилятора, библиотек, установки сервера IO, и собирает периферийную информацию о цели. Эта информация отображена в командном окне.

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

В качестве альтернативы создать живой объект для оборудования ДИСКА:

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

Создайте объект настройки графического процессора кода для генерации исполняемого файла. Используйте coder.hardware функция, чтобы создать настройку возражает для ДИСКА или платформы Джетсона и присвоить его 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 команда и передача настройка графического процессора кода возражают наряду с размером входных параметров для и 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 Джетсон и NVIDIA УПРАВЛЯЕТ платформами), | (Пакет поддержки MATLAB Coder для NVIDIA Джетсон и NVIDIA УПРАВЛЯЕТ платформами),

Похожие темы