此示例显示如何使用MATLAB®Coder™支持万博1manbetx包,用于NVIDIA Jetson和NVIDIA Drive Platforms使用NVIDIA®的嵌入式电路板。该示例使用简单的向量添加算法来说明:
从MATLAB环境连接到嵌入式板。
执行基本操作,例如与MATLAB之间的文件传输,以及在板上执行Linux®shell命令。
从一个Matlab函数生成C++可执行文件,并在该板上运行ARM®CPU的可执行文件。
从MATLAB函数生成CUDA®可执行文件,并在NVIDIA GPU上运行可执行文件。
目标板要求
NVIDIA驱动PX2或Jetson嵌入式平台。
以太网交叉电缆连接目标板和主机PC(如果您无法将目标板连接到本地网络)。
NVIDIA CUDA工具包和安装在主板上的库。
编译器和库的目标环境变量。有关更多信息,请参阅安装和设置NVIDIA板的先决条件(MATLAB编码器支持包为万博1manbetxNVIDIA Jetson和NVIDIA Drive Platforms)。
开发主机要求
用于C++代码生成的MATLAB编码器。有关教程,请参见开始使用Matlab编码器。
用于CUDA代码生成的GPU编码器。对于教程,看GPU编码器开始。
对于CUDA代码生成,NVIDIA CUDA toolkit提供了编译器和库的主机和环境变量。有关详细信息,请参阅第三方硬件和设置必备产品s manbetx 845。
以下代码行在主机上的当前工作文件夹中创建一个文件夹,并将所有相关文件复制到此文件夹中。如果无法在此文件夹中生成文件,请在运行此命令之前更改当前工作文件夹。
nvidiademo_setup(“nvidia_即将启动”);
支持包使万博1manbetx用TCP/IP上的SSH连接来执行命令,同时在Jetson或DRIVE平台上构建和运行生成的代码。将目标平台与主机连接到同一网络,或者使用以太网交叉网线直接将单板与主机连接。有关如何设置和配置主板的信息,请参阅NVIDIA文档。
要与NVIDIA硬件进行通信,请通过使用“创建实时硬件连接对象”驾驶
(MATLAB编码器支持包为万博1manbetxNVIDIA Jetson和NVIDIA Drive Platforms)或杰森
(MATLAB编码器支持包为万博1manbetxNVIDIA Jetson和NVIDIA Drive Platforms)功能。您必须知道目标板的主机名或IP地址,用户名和密码以创建实时硬件连接对象。例如,在第一次连接到目标板时,使用命令为Jetson硬件创建Live对象:
hwobj =杰森('jetson-tx2-name'那'ubuntu'那'ubuntu');
在硬件实时对象创建过程中,支持包执行硬件和软件检查、IO服务器安装,并收集目标上的外围信息。万博1manbetx此信息显示在命令窗口中。
同样,要为驱动器硬件创建实时对象,请使用命令:
hwobj = drive(“drive-px2-name”那'ubuntu'那'ubuntu');
在连接失败的情况下,Matlab命令行报告了诊断错误消息。如果连接失败,则最可能的原因是IP地址或主机名不正确。
当成功连接到板时,可以使用板对象的系统方法,从MATLAB在NVIDIA硬件上执行各种Linux shell命令。例如,要列出目标板的home文件夹的内容,使用命令:
系统(hwobj,'ls -al〜');
硬件对象提供基本的文件操作能力。要将文件从主机传输到目标,请使用putFile()
实时硬件对象的方法。例如,转移test.txt.
文件中的文件在当前文件夹中RemoteBuilddir.
在目标板上使用命令:
putfile(hwobj,'test.txt'那'〜/ remotebuilddir');
要将文件从目标板复制到主机,请使用getFile()
硬件对象的方法。例如,
getfile(hwobj,“~ / remoteBuildDir /用法”那'。');
这个例子用途myadd.m.
,一个简单的向量添加,作为代码生成的入口点函数。
功能Out = MyAdd(Inp1,Inp2)%#codegen.%简单矢量添加%版权所有2018-2021 The MathWorks,Inc。Out = inp1 + inp2;结尾
要生成可部署到NVIDIA目标的可执行文件,请创建用于生成可执行文件的代码配置对象。
cfg = coder.config('可执行程序');cfg.targetlang ='c ++';
当不同目标有多个实时连接对象时,代码生成器会在为其创建最近的实时对象的目标板上执行远程构建。要选择用于执行远程生成的硬件板,请使用setupcodegencontext()
相应实时硬件对象的方法。如果仅创建一个实时连接对象,则无需调用此方法。
hwobj.setupCodegenContext;
要为DRIVE或Jetson平台创建配置对象并将其分配给硬件
属性CFG.
, 使用编码器。硬件
功能。用'nvidia jetson'
对于Jetson板和“NVIDIA驱动”
用于驱动板。
cfg.Hardware=coder.Hardware('nvidia jetson');
要指定用于在目标板上执行远程构建过程的文件夹,请使用BuildDir
财产。如果目标板上不存在指定的构建文件夹,则该软件将创建具有给定名称的文件夹。如果没有分配任何值cfg.Hardware.BuildDir
,远程构建过程发生在最后一个指定的构建文件夹中。如果没有存储的构建文件夹值,则构建过程将在主文件夹中进行。
cfg.hardware.builddir =.'〜/ remotebuilddir';
习俗main.cpp.
文件是在生成的代码中调用入口点函数的包装器。此主文件将包含前100个自然数的向量传递给入口点函数。主文件将结果写入myAdd.bin
二进制文件。
cfg.customsource = fullfile('main.cpp');
要生成C ++代码,请使用Codegen.
功能并通过代码配置和输入的大小myadd.m.
入口点函数。在主机上生成代码后,生成的文件将被复制并构建到目标板上。
Codegen(“-config”,cfg,“myAdd”那'-args',{1:100,1:100});
验证目标板上的GPU环境
要验证运行此示例所需的编译器和库是否正确设置,请使用coder.checkGpuInstall
功能。
%对NVIDIA驱动器硬件使用“驱动器”envCfg=coder.gpuEnvConfig(“杰森”); envCfg.BasicCodegen=1;envCfg.Quiet=1;envCfg.HardwareObject=hwobj;编码器。检查GPUInstall(envCfg);
生成CUDA可执行文件
要生成可部署到NVIDIA目标的CUDA可执行文件,请创建用于生成可执行文件的GPU代码配置对象。
cfg = coder.gpuconfig('可执行程序'); cfg.Hardware=coder.Hardware('nvidia jetson');cfg.hardware.builddir =.'〜/ remotebuilddir'; cfg.CustomSource=fullfile('main.cu');
某些NVIDIA平台(如驱动器PX2)包含多个GPU。在此类平台上,使用SelectCudadevice.
GPU配置对象中的属性选择特定的GPU。
cfg.GpuConfig.selectCudDevice=0;
Codegen(“-config”,cfg,“myAdd”那'-args',{1:100,1:100});
要在目标硬件上运行可执行文件,请使用运行应用程序()
硬件对象的方法。
pid=运行应用程序(hwobj,“myAdd”);
或者,要运行可执行文件,请使用runExecutable ()
硬件对象的方法。
exe = [hwobj.workspacedir'/ myadd.elf']; pid=运行可执行文件(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'); tOut=fread(fId,“双人”);
找出MATLAB仿真输出与目标板输出之间的差异。
diff = simout - tout';
显示仿真输出和目标板输出之间的最大偏差。
fprintf(“MATLAB仿真输出与目标上输出的最大偏差为:%f\n”,最大值(差值(:);
要删除示例文件并返回原始文件夹,请调用清理
功能。
清理
驾驶
(MATLAB编码器支持包为万博1manbetxNVIDIA Jetson和NVIDIA Drive Platforms)|杰森
(MATLAB编码器支持包为万博1manbetxNVIDIA Jetson和NVIDIA Drive Platforms)