主要内容

从命令行的处理器内执行

使用处理器在循环(PIL)执行来检查CUDA的数值行为®您从MATLAB生成的代码®功能。PIL模拟需要目标连接,编译生成的源代码,然后下载并在NVIDIA上运行目标代码®GPU平台。PIL模拟的结果转移到MATLAB以验证模拟和代码生成结果的数值等同。

PIL验证过程是设计周期的关键部分,以检查所生成的代码的行为是否与设计匹配。PIL验证需要嵌入式编码器®执照。

笔记

在使用PIL执行时,要确保基准测试选项的GPU编码器™设置错误的.执行带基准的PIL会导致编译错误。

先决条件

目标板要求

  • nvidia jetson.®或NVIDIA Drive™嵌入式平台。

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

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

  • 编译器和库的目标环境变量。有关编译器和库的支持版本的信息及其设置,请参阅万博1manbetx安装和设置NVIDIA板的先决条件

开发主机要求

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

  • NVIDIA CUDA Toolkit在主机上。

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

例如:Mandelbrot集合

描述

您不必熟悉示例中的算法即可完成本教程。

Mandelbrot Set是由值组成的复平面中的区域Z.0.它的轨迹由

Z. K. + 1 = Z. K. 2 + Z. 0. K. = 0. 1 ......

保持有界k→∞.Mandelbrot集合的整体几何结构如图所示。这个观点没有分辨率显示丰富详细的结构边缘的边界以外的集合。在不断放大的情况下,Mandelbrot集合展示了一个复杂的边界,揭示了越来越精细的递归细节。

算法

创建一个MATLAB脚本调用mandelbrot_count.m.使用以下代码行。此代码是Mandelbrot集的基线矢量化MATLAB实现。

函数count = mandelbrot_count(maxIrtations,xgrid,ygrid)%#codegen.%mandelbrot计算z0 = xgrid + 1i * ygrid;count = =(大小(z0));添加Kernelfun指令以触发内核创建coder.gpu.kernelfun;z = z0;为了n = 0:maxIterations z = z。* z + z0;内部= abs(z)<= 2;count =内部计数+;结尾count = log(count);

对于本教程,请选择一组限制,该限制指定在主心形和主题之间的谷中的高度缩放部分的曼德布特。P / Q.灯泡到左边。一个1000x1000的实体栅格(X)和虚部(y)是在这两个界限之间创建的。然后在每个网格位置迭代Mandelbrot算法。迭代次数为500就足以以全分辨率呈现图像。创建一个MATLAB脚本调用mandelbrot_test.m使用以下代码行。它还叫了mandelbrot_count函数并绘制得到的Mandelbrot集合。

maxIterations = 500;gridSize = 1000;Xlim = [-0.748766713922161, -0.748766707771757];Ylim = [0.123640844894862, 0.123640851045266];x = linspace(xlim(1), xlim(2), gridSize);y = linspace(ylim(1), ylim(2), gridSize);[xGrid,yGrid] = meshgrid(x, y);count = mandelbrot_count(maxIterations, xGrid, yGrid);图(1)imagesc(x, y, count);Colormap ([jet();flipud(jet());0 0 0]); axis标题('mandelbrot set');

创建实时硬件连接对象

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

hwobj =杰森('jetson-board-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(“drive-board-name”“英伟达”“英伟达”);

笔记

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

配置PIL执行

创建用于生成库的GPU代码配置对象,并为PIL配置对象。使用编码器。硬件功能为驱动器或Jetson平台创建配置对象并将其分配给硬件属性CFG..使用'nvidia jetson'对于Jetson板和“NVIDIA驱动”对于驱动板。

cfg = coder.gpuconfig('lib''ecoder',真的);cfg.g.guconfig.compilerflags =.“——fmad = false”;cfg.verificationMode =.“公益诉讼”;cfg.generateReport = true;cfg.hardware = coder.hardware('nvidia jetson');

--fmad = false.当传递给NVCC.,指示编译器禁用浮点乘法(FMAD)优化。根据CPU和GPU的架构差异,设置此选项以防止生成代码中的数值不匹配。有关更多信息,请参阅CPU与GPU之间的数值差异(GPU编码器)

生成代码并运行PIL执行

要生成CUDA库和PIL界面,请使用Codegen.命令并通过GPU代码配置对象以及输入的输入大小mandelbrot_count入口点函数。这-测试选项运行MATLAB测试文件,mandelbrot_test.测试文件使用mandelbrot_count_pil,生成的PIL接口mandelbrot_count

Codegen.-Config.CFG.-  args.{0,Zeros(1000),零(1000)}mandelbrot_count-测试mandelbrot_test
###功能'mandelbrot_count'的连接配置:'nvidia jetson'代码生成成功:查看报告运行测试文件:'mandelbrot_test'与mex函数'mandelbrot_count_pil.mexa64'。###启动应用程序:'codegen / lib / mandelbrot_count / pil / mandelbrot_count.elf'终止执行:clear mandelbrot_count_pil ###启动应用程序mandelbrot_count.elf ...

软件将创建以下输出文件夹:

  • Codegen \ lib \ mandelbrot_count-独立代码mandelbrot_count

  • Codegen \ lib \ mandelbrot_count \ pil- PIL接口代码mandelbrot_count

验证此运行的输出是否与原始的输出相匹配mandelbrot_count.m.函数。

笔记

在微软®窗户®系统,Windows防火墙可以潜在地阻止PIL执行。更改Windows防火墙设置以允许访问。

终止PIL执行过程。

终止PIL执行过程。

清晰的mandelbrot_count_pil;

也可以看看

功能

对象

相关例子

更多关于