主要内容

开始使用MATLAB编码器为NVIDIA杰森和NVIDIA驱动平台支持包万博1manbetx

这个例子展示了如何使用MATLAB®编码器™为NVI万博1manbetxDIA杰森和NVIDIA驱动平台支持包英伟达®的嵌板。使用一个简单的例子说明向量加法的算法:

  • 连接到嵌入式董事会从MATLAB环境。

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

  • 生成c++执行从MATLAB函数和手臂®CPU上运行的可执行文件。

  • 从MATLAB函数生成CUDA®可执行和运行可执行的NVIDIA GPU的董事会。

先决条件

目标板需求

  • NVIDIA驱动PX2或杰森嵌入式平台。

  • 以太网交叉电缆来连接目标板和主机PC(如果你本地网络不能连接目标板)。

  • NVIDIA CUDA工具包和库安装在董事会。

  • 环境变量的目标编译器和库。有关更多信息,请参见安装和设置先决条件NVIDIA董事会

开发主机需求

创建一个文件夹,复制有关文件

下面的代码创建了一个文件夹在您当前的工作目录主机和所有相关文件复制到这个文件夹。如果你不能生成文件在这个文件夹中,在运行此命令之前,改变当前工作目录。

nvidiademo_setup (“nvidia_gettingstarted”);

连接到NVIDIA硬件

支持包使万博1manbetx用SSH连接的TCP / IP来构建和运行时执行命令生成的代码在杰森或驱动平台。将目标平台连接到同一网络主机或者使用以太网交叉电缆董事会直接连接到主机。信息如何设置和配置你的董事会,看到英伟达文档。

与NVIDIA硬件进行通信,通过创建一个生活硬件连接对象开车杰森函数。你必须知道主机名或IP地址,用户名和密码的目标板创建一个生活硬件连接对象。例如,当连接到目标板第一次创建一个活动对象为杰森硬件使用命令:

hwobj =杰森(“jetson-tx2-name”,ubuntu的,ubuntu的);

在硬件生活对象创建,支持包执行硬件和软件检查,IO服务器安装,收集周边信息的目标。万博1manbetx这些信息显示在命令窗口。

类似地,创建生活对象驱动硬件,使用命令:

hwobj =驱动(“drive-px2-name”,ubuntu的,ubuntu的);

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

NVIDIA硬件上运行的Linux命令

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

系统(hwobj,“ls过程~”);

硬件对象提供了基本的文件操作功能。将文件从主机到目标使用putFile ()方法现场硬件的对象。例如,转让用法文件在当前文件夹remoteBuildDir在目标板上,使用命令:

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

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

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

生成c++代码的手臂CPU使用MATLAB编码器

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

函数= myAdd (inp1 inp2)% # codegen%简单向量加法% 2018 - 2021版权MathWorks公司。= inp1 + inp2;结束

生成一个可执行文件,您可以部署一个NVIDIA的目标,创建一个配置对象生成一个可执行的代码。

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

当有多个活连接为不同的目标对象,代码生成器执行远程为最近的生活建立在目标板上创建对象。选择硬件板执行远程构建、使用setupCodegenContext ()各自的生活硬件对象的方法。如果只有一个生活创建连接对象,您不需要调用这个方法。

hwobj.setupCodegenContext;

创建一个配置对象的驱动器或杰森平台,并将其分配给硬件代码配置对象的属性cfg,可以使用coder.hardware函数。使用英伟达杰森的杰森董事会和“NVIDIA驱动”驱动板。

cfg。硬件= coder.hardware (英伟达杰森的);

指定的文件夹执行远程构建过程在目标板上,使用BuildDir财产。如果指定的目标董事会建立文件夹不存在,那么该软件创建一个文件夹的名字。如果没有指定值cfg.Hardware.BuildDir指定远程构建过程发生在过去建立的文件夹。如果没有建立文件夹存储值,构建过程发生在主文件夹中。

cfg.Hardware.BuildDir=“~ / remoteBuildDir”;

自定义main.cpp文件是一个调用的入口点函数的包装器生成的代码。这个主文件通过向量包含第一个100自然数的入口点函数。主要将结果写入文件myAdd.bin二进制文件。

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

生成c++代码,使用codegen功能和通过代码和配置和输入的大小myAdd.m入口点函数。代码生成发生在主机后,生成的文件复制,建立在目标板。

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

生成目标板的CUDA代码使用GPU编码器

验证GPU环境目标板上

验证所需的编译器和库运行这个示例设置正确,使用coder.checkGpuInstall(GPU编码器)函数。

%使用NVIDIA驱动硬件的驱动envCfg = coder.gpuEnvConfig (“杰森”);envCfg。BasicCodegen = 1;envCfg。安静= 1;envCfg。HardwareObject = hwobj;coder.checkGpuInstall (envCfg);

生成CUDA执行

生成CUDA可执行,您可以部署一个NVIDIA的目标,创建一个GPU用于生成可执行代码的配置对象。

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

某些NVIDIA平台如驱动PX2包含多个gpu。在这样的平台上,使用SelectCudaDevice属性在GPU配置对象来选择特定的GPU。

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

运行可执行目标板上

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

pid = runApplication (hwobj,“myAdd”);

此外,运行可执行文件,使用runExecutable ()方法的硬件对象。

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

验证结果的目标

复制本文件的输出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”);兜售=从文件中读(fId,“双”);

找到的区别MATLAB模拟输出和目标板的输出。

diff = simOut——兜售”;

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

流(之间的最大偏差MATLAB模拟输出和输出目标是:% f \ n '马克斯(diff (:)));

清理

删除示例文件并返回到原来的文件夹中,调用清理函数。

清理