Используя GPU Coder™ и Пакет Поддержки GPU Coder для NVIDIA® графические процессоры, можно связать с ДИСКОМ NVIDIA и аппаратными платформами Джетсона, выполнить основные операции, сгенерировать исполняемый файл CUDA® от функции MATLAB® и запустить исполняемый файл на оборудовании. Пакет поддержки автоматизирует развертывание сгенерированного кода CUDA по аппаратным платформам графического процессора, таким как Джетсон или ДИСК
В этом примере вы учитесь как:
Подготовьте свой код MATLAB к генерации кода CUDA при помощи kernelfun
прагма.
Создайте и настройте проект GPU Coder.
Измените настройки, чтобы связать с требуемой платой NVIDIA.
Сгенерируйте и разверните исполняемый файл CUDA на требуемой плате.
Запустите исполняемый файл на плате и проверьте результаты.
Прежде, чем следовать за началом работы с этим примером, рекомендуется ознакомить себя с Приложением GPU Coder. Для получения дополнительной информации смотрите Генерацию кода при помощи Приложения GPU Coder.
ДИСК NVIDIA PX2 или Jetson TX1/TX2 встроил платформу.
Кабель перекрестного соединения Ethernet, чтобы соединить требуемую плату и PC хоста (если требуемая плата не может быть соединена с локальной сетью).
NVIDIA инструментарий CUDA установлен на плате.
Переменные окружения на цели для компиляторов и библиотек. Для получения информации о поддерживаемых версиях компиляторов и библиотек и их настройки, смотрите Предпосылки Установки и Setup для Советов NVIDIA (Пакет Поддержки GPU Coder для NVIDIA графические процессоры).
NVIDIA инструментарий CUDA на хосте.
Переменные окружения на хосте к компиляторам и библиотекам. Для получения информации о поддерживаемых версиях компиляторов и библиотек, смотрите Сторонние продукты. Для подготовки переменных окружения смотрите Переменные окружения.
Этот пример использует пример сложения простого вектора, чтобы продемонстрировать сборку и рабочий процесс развертывания на NVIDIA графические процессоры. Создайте функцию MATLAB myAdd.m
это действует как entry-point для генерации кода. В качестве альтернативы используйте файлы в Начале работы с Пакетом Поддержки GPU Coder для NVIDIA пример графических процессоров для этого примера. Самый легкий способ создать код CUDA для этой функции состоит в том, чтобы поместить coder.gpu.kernelfun
прагма в функции. Когда GPU Coder сталкивается с kernelfun
прагма, это пытается параллелизировать весь расчет в этой функции и затем сопоставляет его с графическим процессором.
function out = myAdd(inp1,inp2) %#codegen coder.gpu.kernelfun(); out = inp1 + inp2; end
Чтобы сгенерировать исполняемый файл CUDA, который может быть развернут на цели NVIDIA, создайте пользовательский основной файл обертки main.cu, main.h
это вызывает функцию точки входа в сгенерированном коде. Основной файл передает вектор, содержащий первые 100 натуральных чисел к функции точки входа, и пишет результаты в myAdd.bin
двоичный файл.
Чтобы открыть приложение GPU Coder, на вкладке Apps панели инструментов MATLAB, под Code Generation, кликают по значку приложения GPU Coder. Можно также открыть приложение путем ввода gpucoder
в окне Команды MATLAB.
Приложение открывает страницу исходных файлов Select. Выберите myAdd.m
как функция точки входа. Нажмите Next.
В окне Define Input Types введите myAdd(1:100,1:100)
и нажмите Autodefine Input Types, затем нажмите Next.
Можно инициировать процесс Check for Run-Time Issues или нажать Next, чтобы перейти к шагу Generate Code.
Установите Build type на Executable
и Hardware Board к NVIDIA Jetson
.
Нажмите More Settings, на панели Custom Code, введите пользовательский основной файл main.cu
в поле для Additional source files. Пользовательский основной файл и заголовочный файл должны быть в том же месте как файл точки входа.
Под панелью Hardware введите адрес устройства, имя пользователя, пароль, и создайте папку для платы.
Закройте окно Settings и нажмите Generate. Программное обеспечение генерирует код CUDA и развертывает исполняемый файл в заданную папку. Нажмите Next и закройте приложение.
В окне команды MATLAB используйте runApplication()
метод оборудования возражает, чтобы запустить исполняемый файл на целевом компьютере.
hwobj = jetson;
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 is: %f\n', max(diff(:)));
Maximum deviation between MATLAB Simulation output and GPU coder output on Target is: 0.000000
drive
| drive
| jetson
| jetson
| killApplication
| killProcess
| openShell
| runApplication
| runExecutable
| system