При начале работы с пакетом поддержки MATLAB Coder для NVIDIA Джетсон и NVIDIA УПРАВЛЯЮТ платформами

В этом примере показано, как использовать MATLAB® Coder™ Support Package для NVIDIA, Джетсон и NVIDIA УПРАВЛЯЮТ Платформами со встроенными платами от NVIDIA®. Пример использует алгоритм сложения простого вектора, чтобы проиллюстрировать:

  • Связь со встроенной платой средой MATLAB.

  • Выполните основные операции, такие как передача файлов к и из MATLAB и выполняющихся команд интерпретатора Linux® на плате.

  • Сгенерируйте исполняемый файл C++ от функции MATLAB и запустите исполняемый файл на центральном процессоре ARM® в плате.

  • Сгенерируйте исполняемый файл CUDA® от функции MATLAB и запустите исполняемый файл на графическом процессоре NVIDIA в плате.

Необходимые условия

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

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

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

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

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

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

Создайте папку и скопируйте соответствующие файлы

Следующая строка кода создает папку в вашей текущей рабочей папке на хосте и копирует все соответствующие файлы в эту папку. Если вы не можете сгенерировать файлы в этой папке, прежде, чем запустить эту команду, изменить вашу текущую рабочую папку.

nvidiademo_setup('nvidia_gettingstarted');

Свяжите с оборудованием NVIDIA

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

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

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

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

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

hwobj = drive('drive-px2-name','ubuntu','ubuntu');

В случае отказа связи о сообщении об ошибке диагностики сообщают в командной строке MATLAB. Если связь прервалась, наиболее вероятной причиной является неправильный IP-адрес или имя хоста.

Запустите команды Linux на оборудовании NVIDIA

Когда успешная связь с платой устанавливается, можно использовать системный метод объекта платы выполнить различные команды интерпретатора Linux на оборудовании NVIDIA из MATLAB. Например, чтобы перечислить содержимое домашней папки на требуемой плате, используйте команду:

system(hwobj,'ls -al ~');

Аппаратный объект предусматривает основные возможности манипуляции с файлами. Чтобы передать файлы от хоста до цели используют putFile() метод живого аппаратного объекта. Например, чтобы передать test.txt файл в текущей папке к remoteBuildDir на требуемой плате используйте команду:

putFile(hwobj,'test.txt','~/remoteBuildDir');

Чтобы скопировать файл от требуемой платы до хоста - компьютера, используйте getFile() метод аппаратного объекта. Например,

getFile(hwobj,'~/remoteBuildDir/test.txt','.');

Сгенерируйте Код С++ для центрального процессора ARM Используя MATLAB Coder

Этот пример использует myAdd.m, сложение простого вектора, как точка входа функционируют для генерации кода.

function out = myAdd(inp1,inp2) %#codegen
% Simple vector addition
% Copyright 2018-2021 The MathWorks, Inc.
out = inp1 + inp2;
end

Чтобы сгенерировать исполняемый файл, который можно развернуть на цели NVIDIA, создайте объект настройки кода для генерации исполняемого файла.

cfg = coder.config('exe');
cfg.TargetLang = 'C++';

Когда существует несколько живых объектов связи для различных целей, генератор кода выполняет удаленную сборку на требуемой плате, для которой был создан недавний живой объект. Чтобы выбрать аппаратное управление по выполнению удаленной сборки, используйте setupCodegenContext() метод соответствующего живого аппаратного объекта. Если только один живой объект связи был создан, вы не должны вызывать этот метод.

hwobj.setupCodegenContext;

Чтобы создать настройку возражают для ДИСКА или платформы Джетсона и присвоить его Hardware свойство объекта cfg настройки кода, используйте coder.hardware функция. Используйте 'NVIDIA Jetson' для плат Джетсона и 'NVIDIA Drive' для платы ДИСКА.

cfg.Hardware = coder.hardware('NVIDIA Jetson');

Чтобы задать папку для выполнения удаленного процесса сборки на требуемой плате, используйте BuildDir свойство. Если заданная папка сборки не существует на требуемой плате, то программное обеспечение создает папку с именем. Если никакое значение не присвоено cfg.Hardware.BuildDir, удаленный процесс сборки происходит в последней заданной папке сборки. Если нет никакого сохраненного значения папки сборки, процесс сборки происходит в домашней папке.

cfg.Hardware.BuildDir = '~/remoteBuildDir';

Пользовательский main.cpp файл является оберткой, которая вызывает функцию точки входа в сгенерированном коде. Этот основной файл передает вектор, содержащий первые 100 натуральных чисел к функции точки входа. Основной файл пишет результаты в myAdd.bin двоичный файл.

cfg.CustomSource  = fullfile('main.cpp');

Чтобы сгенерировать Код С++, используйте codegen функционируйте и передайте настройку кода и размер входных параметров для и myAdd.m функция точки входа. После того, как генерация кода происходит на хосте, сгенерированные файлы скопированы и основаны на требуемой плате.

codegen('-config ',cfg,'myAdd','-args',{1:100,1:100});

Сгенерируйте код CUDA для требуемой платы Используя GPU Coder

Проверьте среду графического процессора в требуемой плате

Чтобы проверить, что компиляторы и библиотеки, необходимые для выполнения этого примера, настраиваются правильно, используйте coder.checkGpuInstall функция.

% Use 'drive' for NVIDIA DRIVE hardware
envCfg = coder.gpuEnvConfig('jetson');
envCfg.BasicCodegen = 1;
envCfg.Quiet = 1;
envCfg.HardwareObject = hwobj;
coder.checkGpuInstall(envCfg);

Сгенерируйте исполняемый файл CUDA

Чтобы сгенерировать исполняемый файл CUDA, который можно развернуть на цели NVIDIA, создайте объект настройки графического процессора кода для генерации исполняемого файла.

cfg = coder.gpuConfig('exe');
cfg.Hardware = coder.hardware('NVIDIA Jetson');
cfg.Hardware.BuildDir = '~/remoteBuildDir';
cfg.CustomSource  = fullfile('main.cu');

Определенные платформы NVIDIA, такие как ДИСК PX2 содержат несколько графических процессоров. На таких платформах используйте SelectCudaDevice свойство в настройке графического процессора возражает, чтобы выбрать определенный графический процессор.

cfg.GpuConfig.SelectCudaDevice = 0;
codegen('-config ',cfg,'myAdd','-args',{1:100,1:100});

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

Чтобы запустить исполняемый файл на целевом компьютере, используйте runApplication() метод аппаратного объекта.

pid = runApplication(hwobj,'myAdd');

В качестве альтернативы, чтобы запустить исполняемый файл, используйте runExecutable() метод аппаратного объекта.

exe = [hwobj.workspaceDir '/myAdd.elf'];
pid = runExecutable(hwobj,exe);

Проверьте результат требуемой платы

Скопируйте выходной файл интервала myAdd.bin к среде MATLAB на хосте и сравнивают вычисленные результаты с теми из MATLAB. Свойство workspaceDir содержит путь к codegen папка на требуемой плате.

pause(0.3); % To ensure that the executable completed the execution.
getFile(hwobj,[hwobj.workspaceDir '/myAdd.bin']);

Результат симуляции из MATLAB:

simOut = myAdd(0:99,0:99);

Считайте скопированный двоичный файл результата из цели в MATLAB:

fId  = fopen('myAdd.bin','r'); tOut = fread(fId,'double');

Найдите различие между симуляцией MATLAB выходом и выходом с требуемой платы.

diff = simOut - tOut';

Отобразите максимальное отклонение между симуляцией выход и выходом с требуемой платы.

fprintf('Maximum deviation between MATLAB Simulation output and the output on Target is: %f\n', max(diff(:)));

Очистка

Чтобы удалить файлы в качестве примера и возвратиться к исходной папке, вызовите cleanup функция.

cleanup

Смотрите также

Объекты

  • (Пакет поддержки MATLAB Coder для NVIDIA Джетсон и NVIDIA УПРАВЛЯЕТ платформами), | (Пакет поддержки MATLAB Coder для NVIDIA Джетсон и NVIDIA УПРАВЛЯЕТ платформами),

Похожие темы