主要内容

数值等价测试

测试数值之间的等价模型组件和产品代码生成的组件利用GPU加速和processor-in-the-loop(公益诉讼)模拟。

GPU加速仿真,测试源代码开发计算机上。公益诉讼仿真,测试编译后的目标代码,你打算部署在目标硬件通过运行在真正的目标硬件对象代码。确定模型组件和生成的代码是数值相等,比较GPU加速和公益诉讼结果正常模式的结果。

为公益诉讼目标连接配置

在公益诉讼模拟运行之前,您必须配置目标连接。目标连接配置使公益诉讼仿真:

  • 构建目标应用程序。

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

  • 万博1manbetx支持动态仿真模块之间的通信万博1manbetx®和目标。

产生一个目标的连接配置英伟达等硬件平台®动力和杰森,安装MATLAB®编码器™万博1manbetx支持NVIDIA杰森包®和NVIDIA驱动™平台。

请注意

从R2021a,MATLAB编码器支持NV万博1manbetxIDIA杰森和NVIDIA驱动包®平台被命名为MATLAB编码器万博1manbetx支持NVIDIA杰森和NVIDIA驱动平台的方案。在R2021a使用这种支万博1manbetx持包,你必须有MATLAB编码器产品。

目标板需求

  • NVIDIA驱动或杰森嵌入式平台。

  • 以太网交叉电缆来连接目标板和主机PC(如果你本地网络不能连接目标板)。

  • NVIDIA CUDA®工具箱安装在董事会。

  • 环境变量的目标编译器和库。信息支持版本的编译器、库及其设置,请参阅万博1manbetx安装和设置先决条件NVIDIA董事会(MATLAB编码器支持包为万博1manbetxNVIDIA杰森和NVIDIA驱动平台)

创造生活硬件连接对象

支持包软万博1manbetx件使用SSH连接在TCP / IP来构建和运行时执行命令生成的CUDA在开车或杰森平台代码。将目标平台连接到同一网络主机或者使用以太网交叉电缆董事会直接连接到主机。如何设置和配置你的董事会,看到英伟达文档。

与NVIDIA硬件进行通信,通过创建一个生活硬件连接对象杰森(MATLAB编码器支持包为万博1manbetxNVIDIA杰森和NVIDIA驱动平台)开车(MATLAB编码器支持包为万博1manbetxNVIDIA杰森和NVIDIA驱动平台)函数。创建一个生活硬件连接对象通过使用功能,提供主机名或IP地址,用户名和密码的目标。例如,要创建活动对象为杰森硬件:

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

的软件执行检查硬件、编译器工具,图书馆,IO服务器安装,收集周边信息的目标。这些信息显示在命令窗口。

检查CUDA可用性目标……检查学校网站在目标系统路径…检查CUDNN库可用性目标……检查TensorRT库可用性目标……检查先决条件库现在已经完成。获取硬件细节……获取硬件细节现在已经完成。显示详细信息。委员会名称:英伟达杰森TX2 CUDA版本:9.0 cuDNN版本:7.0 TensorRT版本:3.0可用的网络摄像头:短波紫外线相机(046 d: 0809)可用gpu: NVIDIA Tegra X2

另外,创建生活对象驱动的硬件:

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

请注意

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

例子:了曼德尔勃特集合

描述

了曼德尔勃特集合中该地区复平面组成的值z0的定义的轨迹方程仍然有限k→∞

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

曼德尔勃特集合的整体几何图所示。这种观点没有边缘的分辨率显示丰富详细的结构的边界外。在不断的放大,一个精心设计的边界,揭示了曼德尔勃特集合展品逐步精细递归的细节。

曼德尔勃特集合的几何

算法

对于本教程,选择一组限制,指定一个高度放大了曼德尔勃特集合的一部分主心形和之间的山谷p / q灯泡了。1000 - 1000年电网的实际部分(x)和虚部(y这两个极限之间创建)。曼德布洛特然后在每个迭代算法网格的位置。迭代500全部呈现图像分辨率。

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

本教程使用了曼德尔勃特集合的实现通过使用标准的MATLAB命令在CPU上运行。这个计算是每个位置矢量化,同时更新。

GPU加速或公益诉讼仿真模型

测试生成的模型代码运行一个顶级模特公益诉讼模拟。用这种方法:

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

  • 你配置模型加载测试向量或刺激输入MATLAB工作区。

  • 你可以很容易地切换正常,之间的顶级模特GPU加速,公益诉讼模拟模式。

曼德布洛特创建顶级模特

  1. 创建一个仿真软件模万博1manbetx型和插入MATLAB函数块的用户定义函数图书馆。

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

  3. 定义一个函数调用mandelbrot_count,实现了曼德布洛特算法。函数头声明maxIterations,xGrid,yGrid作为一个参数mandelbrot_count函数,的返回值。

    函数数= mandelbrot_count (maxIterations xGrid yGrid)曼德布洛特百分比计算z0 = xGrid + 1我* yGrid;数= 1(大小(z0));%计算映射到GPUcoder.gpu.kernelfun;z = z0;n = 0: maxIterations z z =。* z + z0;在= abs (z) < = 2;数=数+内部;结束数=日志(数);

  4. 打开块参数MATLAB函数块。在代码生成选项卡上,选择可重用的功能函数包装参数。

    如果函数包装参数设置为其它值,CUDA内核可能不会得到生成。

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

  6. 连接这些块如图表所示。保存模型mandelbrot_top.slx

    万博1manbetx仿真软件模型显示模块之间的连接。

为GPU加速配置模型

专注于数字等价测试,关闭:

  • 模型覆盖

  • 代码覆盖率

  • 执行时间分析

模型=“mandelbrot_top”;close_system(模型中,0);open_system(模型)set_param (gcs,“RecordCoverage”,“关闭”);coverageSettings = get_param(模型,“CodeCoverageSettings”);coverageSettings.CoverageTool =“没有”;set_param(模型,“CodeCoverageSettings”,coverageSettings);set_param(模型,“CodeExecutionProfiling”,“关闭”);

配置输入刺激数据。下面的代码行生成一个1000 -,- 1000网格的部分(x)和虚部(y)之间的限制规定xlimylim

gridSize = 1000;xlim = [-0.748766713922161, -0.748766707771757];ylim = [0.123640844894862, 0.123640851045266];xlim x = linspace (xlim (1), (2), gridSize);ylim y = linspace (ylim (1), (2), gridSize);[xG, yG] = meshgrid (x, y);maxIterations = timeseries (500 0);xGrid = timeseries (xG, 0);yGrid = timeseries (yG, 0);

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

set_param(模型,“LoadExternalInput”,“上”);set_param(模型,“ExternalInput”,“maxIterations xGrid yGrid”);set_param(模型,“SignalLogging”,“上”);set_param(模型,“SignalLoggingName”,“logsOut”);set_param(模型,“SaveOutput”,“上”)

运行正常,公益诉讼的模拟

正常模式模拟运行。

set_param(模型,“SimulationMode”,“正常”)set_param(模型,“GPUAcceleration”,“上”);sim_output = sim(模型、10);count_normal = sim_output.yout {1} .Values.Data (:,: 1);

运行一个顶级模特公益诉讼模拟。

set_param(模型,“SimulationMode”,“Processor-in-the-Loop(公益诉讼))sim_output = sim(模型、10);count_pil = sim_output.yout {1} .Values.Data (:,: 1);
# # #目标设备没有本机通信支持。万博1manbetx检查连接配置注册…# # #开始构建过程:mandelbrot_top和工件生成代码的# # # # # #生成模型特定的文件夹结构代码构建文件夹:/ mathworks /例子/ sil_pil mandelbrot_top_ert_rtw # # #为“mandelbrot_top”所生成的代码是最新的,因为没有结构,参数或代码替换库的变化被发现。评估模型中指定PostCodeGenCommand # # # # # #使用工具链:NVCC NVIDIA嵌入式处理器# # #的/ mathworks / / sil_pil / mandelbrot_top_ert_rtw / mandelbrot_top例子。可“是最新的# # #建筑”mandelbrot_top”:让- f mandelbrot_top。可buildobj # # #成功完成构建过程:mandelbrot_top模型建立目标:总结构建模型重建行动的原因= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = mandelbrot_top编译的代码编译工件是过时了。1 1模型的建立(0模型已经更新)构建持续时间:0 h 0米22.94秒# # #目标设备没有本机通信支持。万博1manbetx检查连接配置注册…# # #连接配置组件“mandelbrot_top”: NVIDIA杰森# # #公益诉讼执行使用端口17725。公益诉讼执行使用接收超时30秒(s)。# # #准备启动公益诉讼模拟…… ### 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.

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

情节和比较正常和公益诉讼模拟的结果。观察结果匹配。

图();次要情节(1、2、1)显示亮度图像(x, y, count_normal);colormap([飞机();flipud(飞机());0 0 0));标题(曼德尔勃特集合正常模拟的);轴;次要情节(1、2、2)显示亮度图像(x, y, count_pil);colormap([飞机();flipud(飞机());0 0 0));标题(曼德尔勃特集合公益诉讼的);轴;

曼德尔勃特集合和公益诉讼模拟输出正常

清理。

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

限制

MAT-file日志不支持Processor-i万博1manbetxn-the-loop(公益诉讼)模拟GPU编码器™。

另请参阅

功能

相关的话题