数值等价测试

通过使用GPU加速和处理器在环(PIL)仿真,测试模型组件和从组件生成的生产代码之间的数值等效性。

使用GPU加速模拟,您可以在开发计算机上测试源代码。使用PIL模拟,您可以通过在实际目标硬件上运行目标代码来测试要部署到目标硬件上的已编译目标代码。要确定模型组件和生成的代码在数值上是否等效,请比较GPU加速离子和PIL结果与正常模式结果相反。

PIL的目标连接配置

在运行PIL模拟之前,必须配置目标连接。目标连接配置使PIL模拟能够:

  • 构建目标应用程序。

  • 下载、启动和停止目标上的应用程序。

  • 万博1manbetx支持Simulink之间的通信万博1manbetx®和目标。

为NVIDIA等硬件平台生成目标连接配置®驱动器和Jetson,您必须安装支持NVIDIA GP万博1manbetxU的GPU编码器.

目标板要求

  • NVIDIA DRIVE或Jetson嵌入式平台。

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

  • 英伟达酒店®工具箱安装在板上。

  • 目标上的编译器和库的环境变量。有关编译器、库及其设置所支持的版本的信息,请参万博1manbetx见安装和设置NVIDIA主板的先决条件(适用于NVIDIA 万博1manbetxGPU的GPU编码器支持包).

创建实时硬件连接对象

支持包软万博1manbetx件使用TCP/IP上的SSH连接来执行命令,同时在驱动器或Jetson平台上构建和运行生成的CUDA代码。将目标平台连接到与主机相同的网络,或使用以太网交叉电缆将板直接连接到主机。请参阅英伟达文档关于如何设置和配置您的板。

要与NVIDIA硬件通信,必须使用杰森(适用于NVIDIA 万博1manbetxGPU的GPU编码器支持包)驾驶(适用于NVIDIA 万博1manbetxGPU的GPU编码器支持包)函数。使用该功能创建实时硬件连接对象时,需要提供目标单板的主机名或IP地址、用户名和密码。例如,为Jetson硬件创建活动对象:

hwobj =杰森(“192.168.1.15”、“ubuntu”、“ubuntu”);

该软件执行硬件、编译工具、库、IO服务器安装检查,并收集目标上的外围信息。此信息将显示在命令窗口中。

检查CUDA在目标上的可用性…在目标系统路径中检查NVCC…检查CUDNN库在目标上的可用性…在Target上检查TensorRT库的可用性…现在已经完成了对先决条件库的检查。获取硬件细节……获取硬件细节现在已经完成。显示详细信息。主板名称:NVIDIA Jetson TX2 CUDA Version: 9.0 cuDNN Version: 7.0 TensorRT Version: 3.0可用摄像头:UVC Camera (046d:0809)可用gpu: NVIDIA Tegra X2

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

hwobj=驱动器('92.168.1.16'、'nvidia'、'nvidia');

笔记

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

例如:Mandelbrot集合

描述

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

Mandelbrot集是由值组成的复平面中的区域Z0该方程定义的轨迹保持有界于K→∞.

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

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

算法

对于本教程,选择一组限制,指定在主心脏线和之间的谷中Mandelbrot集合的高度放大部分p/q灯泡在它的左边。一个1000x1000网格的真实部分(x)和虚部(Y)是在这两个界限之间创建的。然后在每个网格位置迭代Mandelbrot算法。迭代次数为500就足以以全分辨率呈现图像。

maxIterations=500;gridSize=1000;xlim=[-0.748766713922161,-0.748766707771757];ylim=[0.123640844894862,0.123640851045266];

本教程使用在CPU上运行的标准MATLAB命令来实现Mandelbrot集。方法中提供的代码为基础用MATLAB进行实验克里夫·莫勒(Cleve Moler)的电子书。这个计算被向量化,这样每个位置都是同时更新的。

GPU加速或PIL模拟与一个顶级模型

测试生成的模型代码运行一个顶模型PIL模拟。用这种方法:

  • 您将测试从顶部模型生成的代码,该模型使用独立的代码接口。

  • 您可以配置模型以加载测试向量或来自MATLAB工作空间的刺激输入。

  • 您可以轻松地切换顶部模型之间的正常,GPU加速和PIL模拟模式。

创建Mandelbrot Top Model

  1. 创建一个新的Simulin万博1manbetxk模型并插入一个MATLAB函数用户定义函数图书馆。

  2. 双击其中一个MATLAB函数块中出现默认函数签名MATLAB函数块编辑器。

  3. 定义一个名为mandelbrot_count,它实现了Mandelbrot算法。函数头文件声明最大迭代次数,xGrid,yGrid作为一个论点mandelbrot_count函数,计数作为返回值。将编辑器文档保存到文件。

    函数count=mandelbrot\u count(最大迭代次数、xGrid、yGrid)曼德布洛特百分比计算z0=xGrid+1i*yGrid;计数=个(尺寸(z0));将计算映射到GPUcoder.gpu.kernelfun;z=z0;n=0:maxz=z.*z+z0;内部=abs(z)<=2;计数=计数+内部;结束数=日志(数);

  4. 右键单击MATLAB函数块,并选择块参数(子系统).

  5. 代码生成选项卡上,选择可重用的功能功能包装.

  6. 添加轮廓尺寸(万博1manbetx模型)块和外港(万博1manbetx模型)来源图书馆。

  7. 如图所示连接这些块。将模型保存为mandelbrot_top.slx.

    万博1manbetx显示块之间连接的Simulink模型。

配置GPU加速的型号

要关注数值等效性测试,请关闭:

  • 模型覆盖

  • 代码覆盖率

  • 执行时间分析

模型=“mandelbrot_top”; 关闭系统(型号0);开放式系统(模型)设置参数(gcs、,“记录覆盖率”,“关闭”); 覆盖率设置=获取参数(型号,“CodeCoverageSettings”);coverageSettings。CoverageTool =“没有”;设置参数(模型,“CodeCoverageSettings”, coverageSettings);设置参数(模型,“CodeExecutionProfiling”,“关闭”);

配置输入的刺激数据。下面几行代码生成了一个1000 x 1000的实际部件网格(x)和虚部(Y)在xlimylim.

网格大小=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);[xG,yG]=meshgrid(x,y);最大迭代次数=时间序列(500,0);xGrid=timeseries(xG,0);yGrid=timeseries(yG,0);

在模型中配置日志记录选项。

设置参数(模型,“LoadExternalInput”,“上”);设置参数(模型,“ExternalInput”,“maxIterations、xGrid、yGrid”);设置参数(模型,“SignalLogging”,“上”);设置参数(模型,“SignalLoggingName”,“logsOut”);设置参数(模型,“SaveOutput”,“上”)

运行正常和PIL模拟

运行普通模式模拟。

设置参数(模型,“模拟模式”,“正常”) set_param(模型,“GPUAcceleration”,“上”); sim_输出=sim(型号10);count_normal=sim_output.yout{1}.Values.Data(:,:,1);

运行一个顶级模型PIL模拟。

设置参数(模型,“模拟模式”,“Processor-in-the-Loop(公益诉讼))sim_output=sim(model,10);count_pil=sim_output.yout{1}.Values.Data(:,:,1);
###目标设备没有本机通信支持。万博1manbetx检查连接配置注册…# # #开始构建过程:mandelbrot_top和工件生成代码的# # # # # #生成模型特定的文件夹结构代码构建文件夹:/ mathworks /例子/ sil_pil mandelbrot_top_ert_rtw # # #为“mandelbrot_top”所生成的代码是最新的,因为没有结构,参数或代码替换库的变化被发现。### #使用工具链:NVCC for NVIDIA Embedded Processors ### # '/mathworks/examples/sil_pil/mandelbrot_top_ert_rtw/mandelbrot_top. ### #使用工具链:NVCC for NVIDIA Embedded Processors### # build 'mandelbrot_top':mkbuildobj ###成功完成的构建过程为:mandelbrot_top构建摘要顶部模型目标构建:模型动作重建原因============================================================================= mandelbrot_top代码编译编译工件已经过时。Build duration: 0h 0m 22.94s ###目标设备没有本机通信支持。万博1manbetx检查连接配置注册…### NVIDIA Jetson的PIL执行使用端口17725公益诉讼执行使用30秒来接收超时。###准备启动PIL模拟… ### Using toolchain: NVCC for NVIDIA Embedded Processors ### '/mathworks/examples/sil_pil/mandelbrot_top_ert_rtw/pil/mandelbrot_top.mk' is up to date ### Building 'mandelbrot_top': make -f mandelbrot_top.mk all ### Starting application: 'mandelbrot_top_ert_rtw/pil/mandelbrot_top.elf' ### Launching application mandelbrot_top.elf... PIL execution terminated on target.

除非存在此模型的最新代码,否则将生成并编译新代码。生成的代码在计算机上作为单独的进程运行。

绘制和比较正常和PIL模拟的结果。观察结果是否匹配。

图()(“Mandelbrot集正态模拟”);轴;Subplot (1,2,2) imagesc(x, y, count_pil);Colormap ([jet();flipud(jet());0 0 0]);标题(“Mandelbrot Set PIL”);轴

Mandelbrot设置从正常和PIL模拟输出

清理。

close_system(模型中,0);如果ishandle(图一),关闭(图一),结束清晰的图一simResults = {“count_sil”,“count_normal”,“模型”};保存([模型"结果"],simResults{:});清除(simResults{:},“simResults”)

限制

使用GPU编码器进行Processor-in-the-loop (PIL)模拟有以下局限性:

  • 不支持mat文件日志记录。万博1manbetx

另见

功能

相关的话题