开始使用GPU编码器为NVIDIA GPU的支持包万博1manbetx
这个例子展示了如何使用GPU编码器™NVID万博1manbetxIA GPU的支持包并连接到NVIDIA®驱动™和杰森硬件平台,执行基本的操作,生成CUDA从MATLAB®®可执行功能和硬件上运行的可执行文件。一个简单的向量加法的例子是用来说明这个概念。
先决条件
目标板需求
NVIDIA驱动PX2或杰森TX1 / TX2嵌入式平台。
以太网交叉电缆来连接目标板和主机PC(如果目标不能被连接到一个本地网络)。
NVIDIA CUDA工具包安装在董事会。
环境变量的目标编译器和库。信息支持版本的编译器和库及其设置,明白了万博1manbetx安装和设置先决条件NVIDIA董事会。
开发主机需求
GPU编码器™代码生成。概述和教程,参观GPU编码器产品页面。
NVIDIA CUDA工具包在主机。
环境变量在主机的编译器和库。信息的支持版本的编译器和库,明白了万博1manbetx第三方产品s manbetx 845。设置环境变量,看到环境变量。
创建一个文件夹,复制有关文件
以下代码在当前工作目录中创建一个文件夹(主机),和所有相关文件复制到这个文件夹中。如果你不能生成文件在这个文件夹中,改变当前工作目录中运行此命令。
gpucoderdemo_setup (“nvidia_gettingstarted”);
连接到NVIDIA硬件
GPU编码器支持NVIDIA万博1manbetx GPU包使用SSH连接在TCP / IP来构建和运行时执行命令生成的CUDA在开车或杰森平台代码。你必须将目标平台连接到同一网络主机或者使用以太网交叉电缆董事会直接连接到主机。请参阅NVIDIA文档如何设置和配置你的董事会。
与NVIDIA硬件进行通信,您必须创建一个生活硬件连接对象使用开车或杰森函数。你必须知道主机名或IP地址,用户名和密码的目标板创建一个生活硬件连接对象。例如,使用以下命令创建对象住杰森硬件,
hwobj =杰森(“jetson-tx2-name”,ubuntu的,ubuntu的);
在硬件生活对象创建检查硬件,IO服务器安装和收集周边信息将被执行。这些信息显示在命令窗口。
同样,使用下面的命令来创建活动对象为驱动硬件,
hwobj =驱动(“drive-px2-name”,ubuntu的,ubuntu的);
注意:
在连接失败的情况下,诊断错误消息报道在MATLAB命令行。如果连接失败,最可能的原因是不正确的IP地址或主机名。
建立一个成功的连接板时,您可以使用系统方法的对象来执行各种Linux shell命令从MATLAB在NVIDIA硬件。例如,清单上的主目录的内容目标:
系统(hwobj,“ls过程~”);
硬件对象提供了基本的文件操作功能。将文件从从主机到目标使用putFile ()
方法现场硬件的对象。例如,下面的命令传输文件用法
在当前目录remoteBuildDir
在目标。
hwobj.putFile (“用法”,“~ / remoteBuildDir”);
并复制文件从目标主机,使用getFile ()
方法的硬件对象。例如,下面的命令传输文件用法
在remoteBuildDir
目录的目标当前目录
在主机上。
hwobj.getFile (“~ / remoteBuildDir /用法”,“。”);
验证了GPU的环境
使用coder.checkGpuInstall功能和验证所需的编译器和库运行这个例子是正确设置。
envCfg = coder.gpuEnvConfig (“杰森”);%使用NVIDIA驱动硬件的驱动envCfg。BasicCodegen = 1;envCfg。安静= 1;envCfg。HardwareObject = hwobj;coder.checkGpuInstall (envCfg);
使用GPU编码器生成CUDA代码为目标
这个示例使用myAdd.m,一个简单的向量加法的入口点函数代码生成。生成一个CUDA可执行文件可以部署在一个NVIDIA的目标,创建一个GPU用于生成可执行代码的配置对象。
cfg = coder.gpuConfig (exe”);
当有多个活连接为不同的目标对象,代码生成器执行远程为最近的生活建立在目标对象被创建。选择硬件板执行远程构建、使用setupCodegenContext ()
各自的生活硬件对象的方法。如果只有一个连接对象被创建时,它没有必要调用这个方法。
hwobj.setupCodegenContext;
使用coder.hardware函数创建一个配置对象的驱动器或杰森平台,并将其分配给硬件
代码配置对象的属性cfg
。使用英伟达杰森的
杰森TX1或TX2董事会和“NVIDIA驱动”
驱动板。
cfg。硬件= coder.hardware (英伟达杰森的);
使用BuildDir
属性指定的目录在目标系统上执行远程构建过程。如果指定的目标然后构建目录不存在软件创建一个目录的名字。如果没有指定值cfg.Hardware.BuildDir
,远程构建过程发生在最后一个指定的构建目录。如果没有存储构建目录值,构建过程发生在主目录。
cfg.Hardware.BuildDir=“~ / remoteBuildDir”;
某些NVIDIA平台如驱动PX2包含多个gpu。在这样的平台上,使用SelectCudaDevice
属性在GPU配置对象来选择特定的GPU。
cfg.GpuConfig。SelectCudaDevice = 0;
自定义主要文件是一个调用的入口点函数的包装器生成的代码。主文件通过一个向量包含第一个100自然数的入口点。它将结果写入“myAdd。本的二进制文件。
cfg。CustomSource = fullfile (“main.cu”);
生成CUDA代码,使用codegen功能和通过GPU代码配置随着输入的大小myAdd
入口点函数。代码生成发生在主机后,生成的文件复制,建立在目标。
codegen (“配置”cfg,“myAdd”,“参数”,{1:10 0,1:10 0});
在目标系统上运行的可执行文件
使用runApplication ()
方法的硬件对象启动exectuable在目标硬件。
pid = hwobj.runApplication (“myAdd”);
或者,您可以使用runExecutable ()
方法的硬件对象运行可执行文件。
exe = [hwobj.workspaceDir' / myAdd.elf '];pid = hwobj.runExecutable (exe);
验证结果的目标
复制本文件的输出myAdd.bin
在主机和MATLAB环境比较计算结果与MATLAB。房地产workspaceDir
包含的路径codegen
在目标文件夹。
暂停(0.3);%,以确保执行执行完成。hwobj.getFile ([hwobj.workspaceDir' / myAdd.bin ']);
从MATLAB仿真结果。
simOut = myAdd (0:99 0:99);
读二进制文件复制结果在MATLAB的目标。
fId = fopen (“myAdd.bin”,“r”);兜售=从文件中读(fId,“双”);
找到MATLAB仿真输出的区别和GPU编码器输出目标。
diff = simOut——兜售”;
显示模拟输出之间的最大偏差和GPU编码器输出目标。
流(MATLAB仿真输出之间的最大偏差和GPU编码器输出的目标是:% f \ n '马克斯(diff (:)));
清理
删除并返回到原始文件夹的文件。
清理