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