使用处理器在循环(PIL)执行来检查CUDA的数值行为®您从MATLAB生成的代码®功能。PIL模拟需要目标连接,编译生成的源代码,然后下载并在NVIDIA上运行目标代码®GPU平台。PIL模拟的结果转移到MATLAB以验证模拟和代码生成结果的数值等同。
PIL验证过程是设计周期的关键部分,以检查所生成的代码的行为是否与设计匹配。PIL验证需要嵌入式编码器®执照。
笔记
在使用PIL执行时,要确保基准测试
选项的GPU编码器™设置错误的
.执行带基准的PIL会导致编译错误。
nvidia jetson.®或NVIDIA Drive™嵌入式平台。
用于连接目标板和主机PC(如果目标板无法连接本地网络)的以太网交叉线缆。
NVIDIA CUDA工具包安装在电路板上。
编译器和库的目标环境变量。有关编译器和库的支持版本的信息及其设置,请参阅万博1manbetx安装和设置NVIDIA板的先决条件.
您不必熟悉示例中的算法即可完成本教程。
Mandelbrot Set是由值组成的复平面中的区域Z.0.它的轨迹由
保持有界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地址或主机名不正确。
创建用于生成库的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编码器).
要生成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执行过程。
清晰的mandelbrot_count_pil;