主要内容

在NVIDIA硬件上构建和运行一个可执行文件

MATLAB®NVIDIA 金宝appCoder™支持包®杰森®和NVIDIA驱动®平台使用GPU编码器™产品生成CUDA®代码(内核)从MATLAB算法。这些内核可以在任何支持CUDA的GPU平台上运行。支持包自金宝app动将生成的CUDA代码部署到GPU硬件平台上,如NVIDIA DRIVE或Jetson。

学习目标

在本教程中,您将学习如何:

  • 为CUDA代码生成准备您的MATLAB代码使用kernelfun编译指示。

  • 连接到NVIDIA目标板。

  • 在目标板上生成和部署CUDA可执行文件。

  • 在板上运行可执行文件并验证结果。

教程的先决条件

目标板需求

  • NVIDIA DRIVE或Jetson嵌入式平台。

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

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

  • 目标上的编译器和库的环境变量。有关编译器和库的支持版本及其设置的信息,请参见金宝appNVIDIA主板的安装和设置必备事项

开发主机需求

  • 用于CUDA代码生成的GPU编码器。有关开始使用GPU编码器的帮助,请参阅开始使用GPU编码器(GPU编码器)

  • NVIDIA CUDA工具包上的主机。

  • 主机上编译器和库的环境变量。有关编译器和库支持的版本的信息,请参见金宝app第三方硬件(GPU编码器).有关设置环境变量,请参见环境变量(GPU编码器)

例如:向量加法

本教程使用一个简单的矢量添加示例来演示NVIDIA gpu上的构建和部署工作流。创建MATLAB函数myAdd.m就像入口点代码生成。或者,您可以使用您现在的位置是:虫虫下载站>资源下载> MATLAB编程器> MATLAB 金宝appCoder Support Package for NVIDIA Jetson and NVIDIA DRIVE platform的例子。为MATLAB算法生成CUDA内核的最简单的方法是放置coder.gpu.kernelfun(GPU编码器)入口点函数中的Pragma。当GPU编码器遇到kernelfunpragma,它尝试并行化这个函数中的所有计算,然后将它映射到GPU。

函数= myAdd (inp1 inp2)% # codegencoder.gpu.kernelfun ();Out = inp1 + inp2;结束

创建活动硬件连接对象

支持包软金宝app件使用TCP/IP上的SSH连接来执行在DRIVE或Jetson平台上构建和运行生成的CUDA代码所需的命令。将目标平台连接到与主机相同的网络。您也可以使用以太网交叉网线直接将单板与上位机连接。请参考NVIDIA的文档,了解如何设置和配置您的主板。

要与NVIDIA硬件通信,必须使用杰森开车函数。要创建实时硬件连接对象,请提供目标板的主机名或IP地址、用户名和密码。例如,为Jetson硬件创建活动对象:

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

该软件执行硬件检查、编译器工具和库、IO服务器安装,并收集连接到目标器的外设的信息。这些信息显示在MATLAB命令窗口中。

检查CUDA在目标上的可用性…在目标系统路径中检查'nvcc'…检查cuDNN库在目标上的可用性…在Target上检查TensorRT库的可用性…检查先决库已经完成。收集硬件信息…在Target上检查第三方库的可用性…收集硬件细节已经完成。NVIDIA Jetson TX2 CUDA版本:10.0 cuDNN版本:7.6 TensorRT版本:6.0 GStreamer版本:1.14.5 V4L2版本:1.14.2-1 SDL版本:1.2 OpenCV版本:4.1.1可用Webcams: Microsoft®LifeCam Cinema(TM)可用图形:NVIDIA Tegra X2

或者,为DRIVE硬件创建活动对象:

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

请注意

如果有一个连接失败,诊断错误消息报告在MATLAB命令窗口。连接失败最可能的原因是错误的IP地址或主机名。

生成CUDA可执行的使用GPU编码器

要生成一个可部署到NVIDIA目标的CUDA可执行文件,请创建一个自定义的主包装文件main.cu及其相关的头文件main.h.主文件在生成的代码中调用入口点函数。主文件将包含前100个自然数的向量传递给入口点函数,并将结果写入myAdd.bin二进制文件。

自定义main.cu文件

自定义main.h文件

创建用于生成可执行文件的GPU代码配置对象。使用coder.hardware函数创建DRIVE或Jetson平台的配置对象,并将其分配给硬件属性cfg.使用BuildDir属性指定用于在目标上执行远程构建过程的文件夹。如果目标上不存在指定的构建文件夹,软件将使用指定的名称创建一个文件夹。如果没有赋值cfg.Hardware.BuildDir,则远程生成过程发生在最后指定的生成文件夹中。如果没有存储生成文件夹值,则生成过程将在主文件夹中进行。

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

请注意

图形处理器代码配置对象使用默认的计算能力值coder.gpuConfig(GPU编码器).要使用CUDA GPU支持的完整功能集并减少数值不匹配,请设置金宝appComputeCapability属性的代码配置对象以匹配您的GPU规格。你可以使用GPUInfo属性获取目标GPU的计算能力值。

要生成CUDA代码,使用codegen命令,并将图形处理器代码配置对象连同输入的大小传递给myAdd入口点函数。在主机上进行代码生成之后,将复制生成的文件并在目标上构建。

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

运行可执行文件并验证结果

要在目标硬件上运行可执行文件,请使用runApplication方法的硬件对象。在MATLAB命令窗口中,输入:

pid = runApplication (hwobj,“myAdd”);
###在目标上启动可执行文件…可执行文件已成功启动,进程ID为26432。显示可执行文件的简单运行时日志…

复制输出的bin文件myAdd.bin并将计算结果与MATLAB仿真结果进行比较。

outputFile = [hwobj.workspaceDir' / myAdd.bin '] getFile (hwobj outputFile);%仿真结果来自MATLAB。simOut = myAdd (0:99 0:99);在MATLAB中从target中读取复制的结果二进制文件。fId = fopen (“myAdd.bin”“r”);兜售=从文件中读(fId,“双”);diff = simOut - tOut';流('最大偏差:%f\n'马克斯(diff (:)));
MATLAB Simulation输出与GPU编码器在Target上输出的最大偏差为:0.000000

另请参阅

功能

对象

相关的例子

更多关于