С помощью графического процессора Coder™ и пакета поддержки MATLAB ® Coder™ для платформ NVIDIA ® Jetson ® и NVIDIA DRIVE™ можно использовать аппаратные платформы NVIDIA DRIVE и Jetson. После подключения к аппаратным платформам можно выполнять основные операции, создавать исполняемый файл CUDA ® из функции начального уровня MATLAB и запускать исполняемый файл на оборудовании.
Примечание
Начиная с R2021a, пакет поддержки кодеров GPU для графических процессоров NVIDIA называется MATLAB Coder Support Package для платформ NVIDIA Jetson и NVIDIA DRIVE. Для использования этого пакета поддержки в R2021a необходимо иметь продукт MATLAB Coder.
В этом учебном пособии вы узнаете, как:
Подготовьте код MATLAB для создания кода CUDA с помощью kernelfun прагматика.
Подключитесь к целевой плате NVIDIA.
Создание и развертывание исполняемого файла CUDA на целевой плате.
Запустите исполняемый файл на плате и проверьте результаты.
Встроенная платформа NVIDIA DRIVE PX2 или Jetson.
Кросс-кабель Ethernet для подключения целевой платы и хост-ПК (если целевая плата не может быть подключена к локальной сети).
Набор инструментов NVIDIA CUDA, установленный на плате.
Переменные среды в целевом объекте для компиляторов и библиотек. Сведения о поддерживаемых версиях компиляторов, библиотек и их настройках см. в разделе Установка и настройка предварительных условий для плат NVIDIA (пакет поддержки кодеров MATLAB для платформ NVIDIA Jetson и NVIDIA DRIVE).
Набор инструментов NVIDIA CUDA на хосте.
Переменные среды на хосте для компиляторов и библиотек. Сведения о поддерживаемых версиях компиляторов и библиотек см. в разделе Аппаратное обеспечение сторонних производителей. Сведения о настройке переменных среды см. в разделе Переменные среды.
В этом учебном пособии используется простой пример добавления вектора для демонстрации процесса построения и развертывания на графических процессорах NVIDIA. Создание функции MATLAB myAdd.m которая выступает в качестве начальной точки для генерации кода. В качестве альтернативы можно использовать файлы примера «Начало работы с пакетом поддержки кодеров MATLAB для платформ NVIDIA Jetson и NVIDIA DRIVE». Самый простой способ создания кода CUDA для этой функции - размещение coder.gpu.kernelfun pragma в функции. При обнаружении кодера графического процессора kernelfun pragma, он пытается распараллелить вычисления внутри этой функции и отобразить их в GPU.
function out = myAdd(inp1,inp2) %#codegen coder.gpu.kernelfun(); out = inp1 + inp2; end
Программное обеспечение пакета поддержки использует SSH-соединение по TCP/IP для выполнения команд при построении и выполнении сгенерированного кода CUDA на платформах DRIVE или Jetson. Подключите целевую платформу к той же сети, что и хост-компьютер, или используйте кросс-кабель Ethernet для подключения платы непосредственно к хост-компьютеру. Обратитесь к документации NVIDIA по настройке и настройке платы.
Для взаимодействия с оборудованием NVIDIA необходимо создать объект подключения к оборудованию в реальном времени с помощью jetson(Пакет поддержки кодеров MATLAB для платформ NVIDIA Jetson и NVIDIA DRIVE) или drive(Пакет поддержки кодеров MATLAB для платформ NVIDIA Jetson и NVIDIA DRIVE). Для создания объекта аппаратного соединения в реальном времени с помощью этой функции укажите имя хоста или IP-адрес, имя пользователя и пароль целевой платы. Например, чтобы создать живой объект для оборудования 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
Кроме того, чтобы создать живой объект для оборудования DRIVE, выполните следующие действия.
hwobj = drive('drive-board-name','nvidia','nvidia');
Примечание
При сбое соединения в окне команд MATLAB появляется сообщение об ошибке диагностики. В случае сбоя подключения наиболее вероятной причиной является неправильный IP-адрес или имя узла.
Чтобы создать исполняемый файл CUDA, который можно развернуть на целевом объекте NVIDIA, создайте пользовательский основной файл (main.cu) и файл заголовка (main.h). Основной файл вызывает код, созданный для функции точки входа MATLAB. Основной файл передает вектор, содержащий первые 100 натуральных чисел, в функцию точки входа и записывает результаты в двоичный файл (myAdd.bin).
Создайте объект конфигурации кода графического процессора для создания исполняемого файла. Используйте 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 для платформ NVIDIA Jetson и NVIDIA DRIVE) | jetson(Пакет поддержки кодеров MATLAB для платформ NVIDIA Jetson и NVIDIA DRIVE)