处理器在循环中从命令行执行

使用处理器在环(PIL)执行检查CUDA的数值行为®从MATLAB生成的代码®功能。甲PIL仿真,这需要目标的连接,编译生成的源代码,然后下载和上NVIDIA运行目标代码®GPU平台。将PIL仿真结果转移到MATLAB中,验证仿真的数值等价性和代码生成结果。

公益诉讼验证过程中的一个重要部分设计周期检查生成的代码的行为匹配设计。PIL验证需要一个嵌入式编码器®许可证。

请注意

当使用PIL执行,确保了基准测试在GPU编码器™设置选项。执行PIL与编译错误基准测试结果。

先决条件

目标板需求

  • 英伟达驱动或Jetson嵌入式平台。

  • 以太网跨接电缆连接目标板和主机PC(如果目标板不能被连接到本地网络)。

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

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

开发主机需求

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

  • 主机上的NVIDIA CUDA工具包。

  • 主机为编译器和库的环境变量。有关编译器和库的支持版本的信息,请参阅万博1manbetx第三方硬件。对于设置环境变量,看环境变量

例如:Mandelbrot集

描述

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

曼德尔布洛特集合是复平面中由值组成的区域z0的量,通过轨迹定义

z k + 1 = z k 2 + z 0 , k = 0 , 1 ,

在保持有界k→∞。Mandelbrot集的整体几何结构如图所示。这种观点不具有分辨率只显示外边缘的细节丰富的结构设定的边界。在提高放大倍数,Mandelbrot集展示一个精心制作的边界,揭示逐渐变细的递归的细节。

算法

创建一个名为MATLAB脚本mandelbrot_count.m使用以下代码行。这段代码是曼德尔布罗特集的一个基线向量化MATLAB实现。

功能count = mandelbrot_count(maxIterations, xGrid, yGrid)% # codegen曼德布洛特百分比计算z0 = xGrid + 1i*yGrid;数= 1(大小(z0));%Kernelfun编译加入触发内核创建coder.gpu.kernelfun;z = z0;对于n = 0:maxIterations z = z.*z + z0;在= abs (z) < = 2;count = count + inside;结束数=日志(数);

对于本教程,挑一组在主心和之间的谷指定Mandelbrot集的高度放大部分限制p / q鳞茎在它的左边。一个1000x1000网格的实部(x)和虚数部分(y)在这两个极限之间产生。曼德尔布罗算法然后在每个网格位置重复。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);计数= mandelbrot_count(maxIterations,XGRID,YGRID);图(1)于imagesc(X,Y,计数);颜色表([射流(); flipud(喷射()); 0 0 0]); axis标题(“Mandelbrot集”);

创建活动硬件连接对象

为了与NVIDIA硬件进行通信,必须通过建立即时的硬件连接对象特森开车功能。要创建一个实时的硬件连接对象,提供主机名或IP地址,用户名和目标板的密码。例如创建硬件杰特森活动对象:

hwobj =杰森('192.168.1.15',ubuntu的,ubuntu的);

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

检查目标上的CUDA可用性…检查目标系统路径中的'nvcc'…检查cuDNN库在目标上的可用性…在目标上检查TensorRT库的可用性…先决库的检查已经完成。收集硬件信息…检查目标上的第三方库可用性…收集硬件细节已经完成。董事会名称:NVIDIA Jetson TX2 CUDA版本:10.0 cuDNN版本:7.5 TensorRT版本:5.1 GStreamer版本:1.14.5 V4L2版本:1.14.2- SDL版本:1.2可用网络摄像头:MicrosoftA®LifeCam Cinema(TM)可用gpu: NVIDIA Tegra X2

另外,创建驱动器硬件实时对象:

hwobj =驱动(“92.168.1.16”,“英伟达”,“英伟达”);

请注意

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

配置PIL执行

用于产生库创建GPU代码配置对象,并配置PIL的对象。使用coder.hardware函数来产生用于驱动器或杰特森平台的配置对象,并把它分配给硬件属性的代码配置对象cfg。用英伟达杰森的为杰特森板和“NVIDIA驱动”驱动板。

cfg = coder.gpuConfig (“自由”,“是”,真正的);cfg.GpuConfig。CompilerFlags =“——fmad = false”;cfg。VerificationMode =“公益诉讼”;cfg。GenerateReport = true;cfg。硬件= coder.hardware (英伟达杰森的);

——fmad = false当传递给标志学校网站,指示编译器禁用浮点乘法-添加(FMAD)优化。设置这个选项是为了防止生成的代码中由于CPU和GPU架构的不同而导致的数字不匹配。有关更多信息,请参见CPU和GPU之间的数值差异

生成代码并运行PIL执行

要生成CUDA库和PIL接口,使用codegen命令,并传递GPU代码配置对象以及输入的大小mandelbrot_count入口点函数。的以及选项运行MATLAB测试文件,mandelbrot_test。测试文件使用mandelbrot_count_pil为。生成的PIL接口mandelbrot_count

codegen配置cfgarg游戏{0, 0 (1000), 0 (1000)}mandelbrot_count以及mandelbrot_test
函数“mandelbrot_count”的连接配置:“NVIDIA Jetson”代码生成成功:查看报告运行测试文件:“mandelbrot_test”与MEX函数“mandelbrot_count_pilor .mexa64”。启动应用程序:'codegen/lib/mandelbrot_count/pil/mandelbrot_count。elf'终止执行:清除mandelbrot_count_pil ###启动应用程序mandelbrot_count.elf…

该软件创建以下文件夹的输出:

  • codegen \ lib \ mandelbrot_count- 对独立代码mandelbrot_count

  • codegen \ lib \ mandelbrot_count \公益诉讼PIL接口代码mandelbrot_count

验证此运行的输出是否与原始运行的输出匹配mandelbrot_count.m功能。

请注意

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

终止PIL执行过程。

终止PIL执行过程。

清晰的mandelbrot_count_pil;

另请参阅

功能

对象

相关的例子

更多关于