主要内容

从NVIDIA Jetson和NVIDIA DRIVE平台的MATLAB编码支持包开始

的用法针对NVIDIA Jetson和NVIDIA DRIVE平台的MATLAB®Coder™支持包NVIDIA®嵌入式板。该示例使用了一个简单的向量加法算法来说明:

  • 从MATLAB环境中连接到嵌入式板。

  • 执行基本的操作,如文件传输到MATLAB和执行Linux®shell命令在板上。

  • 从MATLAB函数生成c++可执行文件,并在主板的ARM®CPU上运行。

  • 从MATLAB函数生成CUDA®可执行文件,并在板子中的NVIDIA GPU上运行。

先决条件

目标董事会要求

  • NVIDIA DRIVE PX2或Jetson嵌入式平台。

  • 以太网交叉网线,用于连接目标板和主机PC(如果无法连接到本地网络)。

  • NVIDIA CUDA工具包和库安装在主板上。

  • 编译器和库的目标上的环境变量。有关更多信息,请参见NVIDIA板安装和设置先决条件(针对NVIDIA Jetson和NVIDIA DRIVE平台的MATLAB编码器支持包)

开发主机要求

创建一个文件夹并复制相关文件

以下代码行在主机上的当前工作文件夹中创建了一个文件夹,并将所有相关文件复制到该文件夹中。如果无法在此文件夹中生成文件,请在运行此命令前更改当前工作文件夹。

nvidiademo_setup (“nvidia_gettingstarted”);

连接到NVIDIA硬件

该支持包使用TCP/IP上的SSH连接来执行命令,同时在Jetson或DRIVE平台上构建和运行生成的代码。将目标平台连接到与主机相同的网络中,或者使用以太网交叉电缆将板直接连接到主机。有关如何设置和配置您的板的信息,请参阅NVIDIA文档。

方法创建活动硬件连接对象,以与NVIDIA硬件通信开车(针对NVIDIA Jetson和NVIDIA DRIVE平台的MATLAB编码器支持包)杰森(针对NVIDIA Jetson和NVIDIA DRIVE平台的MATLAB编码器支持包)函数。要创建活动硬件连接对象,必须知道目标板的主机名或IP地址、用户名和密码。例如,当第一次连接到目标板时,使用以下命令为Jetson硬件创建一个活动对象:

Hwobj = jetson(“jetson-tx2-name”ubuntu的ubuntu的);

在创建硬件活动对象期间,支持包执行硬件和软件检查、IO服务器安装和收集目标的外围设备信息。该信息显示在命令窗口中。

类似地,要为DRIVE硬件创建活动对象,使用命令:

Hwobj = drive(“drive-px2-name”ubuntu的ubuntu的);

在连接失败的情况下,在MATLAB命令行中报告一个诊断错误消息。如果连接失败,最可能的原因是IP地址或主机名不正确。

在NVIDIA硬件上运行Linux命令

当成功建立到板的连接时,您可以使用board对象的系统方法从MATLAB在NVIDIA硬件上执行各种Linux shell命令。例如,要列出目标板上主文件夹的内容,使用命令:

系统(hwobj,'ls -al ~');

硬件对象提供基本的文件操作功能。将文件从主机传输到目标putFile ()方法的活动硬件对象。例如,要转移用法文件中的remoteBuildDir在目标板上使用命令:

putFile (hwobj“用法”“~ / remoteBuildDir”);

要将文件从目标板复制到主机,请使用getFile ()方法的硬件对象。例如,

getFile (hwobj,“~ / remoteBuildDir /用法”“。”);

使用MATLAB Coder为ARM CPU生成c++代码

此示例使用myAdd.m,一个简单的矢量加法,作为代码生成的入口点函数。

函数out = myAdd(inp1,inp2)% # codegen%简单的向量加法版权所有The MathWorks, Inc.Out = inp1 + inp2;结束

要生成可部署到NVIDIA目标上的可执行文件,请创建用于生成可执行文件的代码配置对象。

CFG = code .config(exe”);cfg。TargetLang =“c++”

当不同目标有多个活动连接对象时,代码生成器将在为其创建最近活动对象的目标板上执行远程构建。若要选择执行远程构建的硬件板,请使用setupCodegenContext ()方法。如果只创建了一个活动连接对象,则不需要调用此方法。

hwobj.setupCodegenContext;

为DRIVE或Jetson平台创建配置对象,并将其分配给硬件的代码配置对象cfg,使用coder.hardware函数。使用英伟达杰森的杰森的电路板和“NVIDIA驱动”驱动器板。

cfg。硬件= code . Hardware (英伟达杰森的);

要指定在目标板上执行远程构建过程的文件夹,请使用BuildDir财产。如果指定的构建文件夹在目标板上不存在,那么该软件将创建一个具有给定名称的文件夹。如果没有赋值给cfg.Hardware.BuildDir,则远程生成过程发生在最后指定的生成文件夹中。如果没有存储生成文件夹值,则生成过程将在主文件夹中进行。

cfg.Hardware.BuildDir =“~ / remoteBuildDir”

自定义main.cppFile是在生成的代码中调用入口点函数的包装器。这个主文件将一个包含前100个自然数的向量传递给入口点函数。主文件将结果写入myAdd.bin二进制文件。

cfg。CustomSource = fullfile(“main.cpp”);

要生成c++代码,请使用codegen功能和传递代码配置和和的输入大小myAdd.m入口点函数。在主机上进行代码生成之后,生成的文件被复制到目标板上并构建。

codegen (“配置”cfg,“myAdd”“参数”, {1:10 0, 1:10 0});

使用GPU Coder为目标板生成CUDA代码

验证目标板上GPU环境

要验证运行此示例所需的编译器和库是否已正确设置,请使用coder.checkGpuInstall函数。

为NVIDIA drive硬件使用'drive'envCfg = code . gpuenvconfig (“杰森”);envCfg。BasicCodegen = 1;envCfg。安静= 1;envCfg。HardwareObject = hwobj;coder.checkGpuInstall (envCfg);

生成CUDA可执行文件

要生成可以部署到NVIDIA目标上的CUDA可执行文件,请创建用于生成可执行文件的GPU代码配置对象。

cfg = code .gpu config (exe”);cfg。硬件= code . Hardware (英伟达杰森的);cfg.Hardware.BuildDir =“~ / remoteBuildDir”;cfg。CustomSource = fullfile(“main.cu”);

某些NVIDIA平台,如DRIVE PX2包含多个gpu。在这些平台上,请使用SelectCudaDevice属性来选择特定的GPU。

cfg. gpu . selectcudadevice = 0;
codegen (“配置”cfg,“myAdd”“参数”, {1:10 0, 1:10 0});

在目标板上运行可执行文件

要在目标硬件上运行可执行文件,请使用runApplication ()方法的硬件对象。

pid = runApplication(hwobj,“myAdd”);

或者,要运行可执行文件,请使用runExecutable ()方法的硬件对象。

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

从目标板验证结果

复制输出bin文件myAdd.bin在主机上对MATLAB环境进行仿真,并将计算结果与MATLAB的结果进行比较。房地产workspaceDir控件的路径codegen文件夹在目标板上。

暂停(0.3);确保可执行文件完成执行。getFile (hwobj, [hwobj.workspaceDir' / myAdd.bin ']);

MATLAB仿真结果:

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

在MATLAB中从目标读取复制的结果二进制文件:

fId = fopen(“myAdd.bin”“r”);dt = fad (fId,“双”);

找出MATLAB仿真输出与目标板输出的差异。

diff = simOut - tOut';

显示模拟输出与目标板输出之间的最大偏差。

流(' MATLAB仿真输出与目标上输出的最大偏差为:%f\n'马克斯(diff (:)));

清理

要删除示例文件并返回到原始文件夹,请调用清理函数。

清理

另请参阅

对象

  • (针对NVIDIA Jetson和NVIDIA DRIVE平台的MATLAB编码器支持包)|(针对NVIDIA Jetson和NVIDIA DRIVE平台的MATLAB编码器支持包)

相关的话题

Baidu
map