你可以使用GPU编码器™来加速你的Simulink的执行金宝app®模型英伟达®gpu。gpu加速计算遵循异构编程模型。应用程序的高度并行化部分被映射到内核中,这些内核在成千上万的GPU内核上并行执行,而其余的顺序代码仍然在CPU上运行。
要执行GPU加速模拟,请使用金宝appMATLAB函数(金宝app模型)块。当您模拟包含MATLAB函数块,软件进行分区并生成CUDA®MATLAB®可执行(MEX)代码,并将此代码与Simulink模型集成。金宝app
使用GPU编码器进行模拟加速的基本步骤如下:
创建或打开模型。
通过选择解算器,语言,以及其他特定于gpu的配置参数。
运行GPU加速模型。
Sobel边缘检测算法是一种简单的边缘检测算法,它对灰度图像进行二维空间梯度运算。该算法强调与输入图像边缘相对应的高空间频率区域。
Sobel边缘算法计算水平梯度(H
)及垂直梯度(V
)利用两个正交滤波核对输入图像进行滤波(k
和k'
).滤波后,算法计算梯度大小,并应用一个阈值来找到图像中被认为是边缘的区域。
k=单个([1 2 1;0 0 0;-1-2-1]);H=conv2(单个(灰度图像),k,“一样”); V=conv2(单个(灰度图像),k',“一样”); E=sqrt(H.*H+V.*V);边缘图像=uint8((E>阈值)*255);
创建一个Simul金宝appink模型并插入两个MATLAB函数块的用户定义函数图书馆
添加常数块并将其值设置为0.4
.
添加从多媒体文件块的计算机视觉工具箱™图书馆
打开块参数对话框从多媒体文件阻塞并设置文件名参数犀牛
.
设置图像信号参数一个多维信号
.
添加两个视频查看器块的计算机视觉的工具箱模型的库。
双击其中一个MATLAB函数块。默认函数签名出现在MATLAB函数块编辑器。
定义一个名为索贝尔
,它实现了Sobel边缘检测算法灰度图像
和门槛
作为对索贝尔
函数,边缘图像
作为返回值。保存编辑器文档到文件。
作用edgeImage=sobel(灰度图像,阈值)% # codegen%定义Sobel边缘检测的核函数K = single([1 2 1;0 0 0;1 2 1]);%检测边缘H=conv2(单个(灰度图像),k,“一样”); V=conv2(单个(灰度图像),k',“一样”); E=sqrt(H.*H+V.*V);边缘图像=uint8((E>阈值)*255);结束
的块参数MATLAB函数街区,在街上代码生成选项卡,选择可重用函数
为函数包装参数。
如果函数包装参数设置为任何其他值时,可能不会生成CUDA内核。
修改另一个MATLAB函数块以在Sobel边缘检测操作之前实现RGB到灰度的转换。设置函数包装参数MATLAB函数块可重用函数
.
作用灰色= RGB2gray (RGB)% # codegen%将彩色图像转换为灰色图像灰度= (0.2989 * double(RGB(:,:,1)) +...0.5870 * double(RGB(:,:,2)) +...0.1140 *双(RGB (:,:, 3)));结束
如图所示连接这些模块。将模型另存为edgeDetection.slx
.
要测试模型的错误,请在Simulink编辑器中模拟模型。在toolstrip上,单击金宝app运行.
要在模拟期间查看所有视频帧,请禁用模拟>丢弃帧以提高性能选择的视频查看器块。
模型配置参数决定了仿真过程中使用的加速度方法。
打开“配置参数”对话框。打开解算器窗玻璃要编译加速模型并生成CUDA代码,请将模型配置为使用固定步长解算器。此表显示了此示例的解算器配置。
参数 | 背景 | 对生成代码的影响 |
---|---|---|
类型 | 固定步 |
保持一个固定的步长。 |
解算器 | 离散(无连续状态) |
应用定步积分技术计算模型的状态导数。 |
固定的大小 | 汽车 |
金宝appSimulink选择步长。 |
在模拟目标窗格,启用GPU加速参数。
请注意
的语言参数自动设置为c++
.
GPU编码器的特定选项现在在模拟目标> GPU加速在本例中,您可以使用所有GPU特定参数的默认值。
单击,保存并关闭“配置参数”对话框好啊.
你也可以用the设置参数
(金宝app模型)函数在MATLAB命令窗口中以编程方式配置模型参数。
设置参数(“edgeDetection”,“GPUAcceleration”,“上”);
要构建和模拟GPU加速模型,请选择运行上模拟选项卡或使用以下MATLAB命令:
sim卡(“edgeDetection”);
该软件首先检查CUDA代码之前是否为模型编译过。如果代码是先前创建的,则软件运行模型。如果之前没有构建代码,软件首先生成并编译CUDA代码,然后运行模型。代码生成工具将生成的代码放在名为slprj/_slprj/边缘检测
.
图形处理器代码生成MATLAB函数块Stateflow®不支持图表。金宝app
什么时候GPU加速启用时,代码生成器不支持金宝app导入自定义代码用于导入自定义编写的CUDA源文件(*.cu)。相反,使用塞瓦尔编码员
在MATLAB函数块。
的MATLAB函数块不支持来自MATLAB语言的金宝app所有数据类型。有关受支金宝app持的数据类型,请参阅块文档。
open_system
(金宝app模型)|加载系统
(金宝app模型)|保存系统
(金宝app模型)|封闭系统
(金宝app模型)|bdclose
(金宝app模型)|get_param
(金宝app模型)|设置参数
(金宝app模型)|sim卡
(金宝app模型)|slbuild
(金宝app模型)