GPU编码器™产生优化的CUDA®simulink的代万博1manbetx码®包含的模型Matlab功能块。您可以使用生成的代码和可执行文件在nvidia上快速原型设计®GPU。代码生成报告和跟踪性使您可以查看和分析生成的代码。使用GPU编码器的CUDA代码生成的基本步骤是:
创建或打开模型。
通过选择来配置代码生成模型求解器那语那工具链以及其他GPU特定的配置参数。
构建模型。
Sobel边缘检测算法是一种简单的边缘检测算法,其在灰度图像上执行二维空间梯度操作。该算法强调对应于输入图像的边缘的高空间频率区域。
Sobel Edge算法计算水平梯度(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);edgeImage = UINT8((e>阈值)* 255);
创建Simulin万博1manbetxk模型并插入两个Matlab功能街区来自用户定义的函数图书馆。
添加A.持续的块并将其值设置为0.4
。
添加A.来自多媒体文件街区来自计算机Vision Toolbox™图书馆。
打开块参数对话框来自多媒体文件块并设置文件名参数到rhinos.avi.
。
设定图像信号参数到一个多维信号
。
加二视频查看器街区来自电脑视觉工具箱图书馆到模型。
双击其中一个Matlab功能块。将显示默认函数签名Matlab功能块编辑器。
定义一个调用的函数Sobel.
,实现Sobel边缘检测算法。函数头声明灰度
和临界点
作为一个争论Sobel.
功能,有edgeImage.
作为返回值。将编辑器文档保存到文件。
功能edgeImage = Sobel(灰度,阈值)%#codegen.%定义了Sobel边缘检测的内核K =单身([1 2 1; 0 0 0; -1 -2 -1]);%检测边缘h = conv2(单个(灰度),k,'相同的');v = conv2(单个(灰度),k','相同的');E = SQRT(H. * H + V. * V);edgeImage = 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编辑器中模拟模型。万博1manbetx在ToolStrip上,单击跑步。
要在模拟期间查看所有视频帧,请禁用仿真>跌落框架提高性能选项视频查看器堵塞。
模型配置参数为代码生成和构建过程提供了许多选项。
打开配置参数对话框。打开求解器窗格。要编译适用于加速和生成CUDA代码的模型,请配置模型以使用固定步骤求解器。此表显示了此示例的求解器配置。
范围 | 环境 | 对生成代码的影响 |
---|---|---|
类型 | 固定步骤 |
维护代码生成所需的常数(固定)步长 |
求解器 | 离散(没有连续的状态) |
应用一个固定步骤集成技术来计算模型的状态衍生 |
固定阶梯 | 汽车 |
万博1manbetxsimulink选择阶梯大小 |
在这一点代码生成窗格,设置系统目标文件到grt.tlc.
。
您还可以使用嵌入式编码器®目标文件ert.tlc.
。
设定语到C ++
。
选择生成GPU代码。
在这一点代码生成窗格,选择仅生成代码。
选择工具链。对于Linux.®平台,选择nvidia cuda |gmake(64位Linux)
。适用于Windows.®系统,选择NVIDIA CUDA(W / Microsoft Visual C ++ 20xx)|nmake(64位窗口)
。
在这一点代码>界面窗格,禁用MAT文件日志记录。
在生成CUDA代码时,代码生成器不支持MAT文件日志记录万博1manbetx。
在这一点代码>报告窗格,选择创建代码生成报告和自动打开报告。
当你启用生成GPU代码参数,GPU编码器特定的选项出现在代码> GPU代码窗格。
在此示例中,您可以使用特定于GPU的参数的默认值代码> GPU代码窗格。
点击行保存并关闭配置参数对话框。
你可以使用set_param.
在MATLAB中以编程方式配置模型参数的功能®命令窗口。
set_param('edgedetection'那'世代Pucode'那'CUDA');
在Simuli万博1manbetxnk编辑器中,打开万博1manbetxSimulink编码器应用程序。
生成代码。
消息出现在诊断查看器中。代码生成器会产生CUDA源和头文件和HTML代码生成报告。代码生成器将文件放在一个中构建文件夹,一个名为的子文件夹edgedetection_grt_rtw.
在当前的工作文件夹下。
你可以找到CUDA内核
和
功能。三脚轮中的信息是内核的执行配置。
GPU代码生成Matlab功能eventflow中的块®不支持图表。万博1manbetx
这Matlab功能块不支持来自MATLAB语言的万博1manbetx所有数据类型。对于支持万博1manbetx的数据类型,请参阅块文档。
bdClose.
(万博1manbetxSimulink)|close_system.
(万博1manbetxSimulink)|get_param.
(万博1manbetxSimulink)|load_system.
(万博1manbetxSimulink)|Open_System.
(万博1manbetxSimulink)|save_system.
(万博1manbetxSimulink)|set_param.
(万博1manbetxSimulink)|SIM
(万博1manbetxSimulink)|SLBUILD.
(万博1manbetxSimulink)