Начало работы с пакетом поддержки GPU Coder для NVIDIA графические процессоры

В этом примере показано, как использовать Пакет Поддержки GPU Coder™ для NVIDIA графические процессоры и соединиться с NVIDIA® DRIVE™ и аппаратными платформами Джетсона, выполните основные операции, сгенерируйте исполняемый файл CUDA® от функции MATLAB® и запустите исполняемый файл на оборудовании. Этот пример использует сложение простого вектора.

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

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

  • ДИСК NVIDIA PX2 или Jetson TX1/TX2 встроил платформу.

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

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

  • Переменные окружения на цели для компиляторов и библиотек. Для получения дополнительной информации смотрите Необходимые условия Установки и Setup для Советов NVIDIA (Пакет Поддержки GPU Coder для NVIDIA графические процессоры).

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

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

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

gpucoderdemo_setup('nvidia_gettingstarted');

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

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

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

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

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

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

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

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

Запустите Linux® Commands на оборудовании NVIDIA

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

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

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

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

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

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

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

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

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

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

Этот пример использует myAdd.m, сложение простого вектора, как точка входа функционируют для генерации кода. Чтобы сгенерировать исполняемый файл CUDA, который можно развернуть на цели NVIDIA, создайте объект настройки графического процессора кода для генерации исполняемого файла. cfg = coder.gpuConfig ('exe');

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

hwobj.setupCodegenContext;

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

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

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

cfg.GpuConfig.SelectCudaDevice = 0;

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

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

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

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 выходом и Кодером GPU выход с требуемой платы.

diff = simOut - tOut';

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

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

Очистка

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

cleanup
Для просмотра документации необходимо авторизоваться на сайте