代码生成从Simulink模型与GPU编码器
GPU Coder™生成优化的CUDA®Simulink代码®模型包含MATLAB函数块。您可以使用生成的代码和可执行文件在NVIDIA上快速创建原型®gpu。代码生成报告和可跟踪性使您能够查看和分析生成的代码。使用GPU Coder生成CUDA代码的基本步骤是:
创建或打开一个模型。
属性配置用于代码生成的模型解算器,语言,工具链,以及其他特定于gpu的配置参数。
构建模型。
示例:Sobel边缘检测
Sobel边缘检测算法是一种简单的边缘检测算法,它对灰度图像进行二维空间梯度操作。该算法强调与输入图像边缘相对应的高空间频率区域。
Sobel边缘算法计算水平梯度(H
)和垂直梯度(V
),用两个正交的滤波核(k
而且k”
).在滤波操作之后,算法计算梯度幅度,并应用阈值来寻找图像中被认为是边缘的区域。
K = single([1 2 1;0 0 0;-1 -2 -1]);H = conv2(single(grayImage),k,“相同”);V = conv2(single(grayImage),k',“相同”);E =根号下(H。* h + v * v);edgeImage = uint8((E > threshold) * 255);
创建边缘检测模型
创建一个Simulink模型并插入两个MATLAB函数街区之外用户定义函数图书馆。
添加一个常数块,并将其值设置为
0.4
.添加一个来自多媒体文件从计算机视觉工具箱图书馆。
打开块的参数对话框。来自多媒体文件块,并设置文件名称参数
rhinos.avi
.设置图像信号参数
一个多维信号
.添加两个视频查看器街区之外计算机视觉工具箱库的模型。
双击其中一个MATLAB函数块。属性中出现默认函数签名MATLAB函数块编辑器。
定义一个函数
索贝尔
,实现了Sobel边缘检测算法。函数头声明grayImage
而且阈值
作为一个参数索贝尔
函数,edgeImage
作为返回值。保存编辑器文档到文件。函数edgeImage = sobel(灰度图像,阈值)% # codegen定义用于Sobel边缘检测的内核K = single([1 2 1;0 0 0;-1 -2 -1]);%检测边缘H = conv2(single(grayImage),k,“相同”);V = conv2(single(grayImage),k',“相同”);E =根号下(H。* h + v * v);edgeImage = uint8((E > threshold) * 255);结束
的块参数MATLAB函数块。在代码生成选项卡上,选择
可重用的功能
为函数包装参数。如果函数包装参数被设置为任何其他值,CUDA内核可能不会生成。
修改另一个MATLAB函数块在Sobel边缘检测操作之前实现RGB到灰度的转换。设置函数包装参数。MATLAB函数块
可重用的功能
.函数灰色= RGB2gray(RGB)% # codegen将彩色图像转换为灰色图像gray = (0.2989 * double(RGB(:,:,1)) +...0.5870 * double(RGB(:,:,2)) +...0.1140 * double(RGB(:,:,3)));结束
如图所示,把这些块连接起来。将模型另存为
edgeDetection.slx
.要测试模型的错误,请在Simulink Editor中模拟模型。在工具条上,单击运行.
若要在模拟期间查看所有视频帧,请禁用模拟>掉落帧来提高性能选项视频查看器块。
配置代码生成模型
模型配置参数为代码生成和构建过程提供了许多选项。
打开“配置参数”对话框。打开解算器窗格。要编译您的模型以加速并生成CUDA代码,请将模型配置为使用固定步骤求解器。下表显示了本例的求解器配置。
参数 设置 对生成代码的影响 类型 固定步
维护一个常量(固定的)步长,这是代码生成所需要的 解算器 离散(无连续状态)
采用固定步长积分法计算模型的状态导数 固定的大小 汽车
Simulink选择步长 在代码生成窗格中,设置系统目标文件来
grt.tlc
.你也可以使用嵌入式编码器®目标文件
ert.tlc
或自定义系统目标文件。对于GPU代码生成,自定义目标文件必须基于
grt.tlc
或ert.tlc
.有关开发自定义目标文件的信息,请参见自定义系统目标文件(仿真软件编码器).设置语言来
c++
.选择生成GPU代码.
在代码生成窗格中,选择只生成代码.
选择工具链.Linux®平台,选择
NVIDIA CUDA | gmake(64位Linux)
.对于Windows®系统,选择NVIDIA CUDA (w/Microsoft Visual c++ 20XX) | nmake(64位windows)
.当使用自定义系统目标文件时,必须为工具链方法设置构建控件。要了解用于自定义目标的工具链方法的更多信息,请参见支持自定义目标的工具链方法(仿真软件编码器).
在代码生成>接口窗格中,禁用MAT-file日志.
在代码生成>报表窗格中,选择创建代码生成报告而且自动打开报表.
当您启用生成GPU代码参数,特定于GPU Coder的选项将出现在代码生成> GPU代码窗格。
对于本例,您可以使用中特定于gpu参数的默认值代码生成> GPU代码窗格。
点击好吧保存并关闭“配置参数”对话框。
您可以使用
set_param
在MATLAB中编程配置模型参数的函数®命令窗口。set_param (“edgeDetection”,“GenerateGPUCode”,CUDA的);
为模型生成CUDA代码
在Simulink编辑器中,打开仿真软件编码器应用程序。
生成的代码。
消息出现在诊断查看器中。代码生成器生成CUDA源文件和头文件,以及HTML代码生成报告。代码生成器将文件放在建立文件夹的子文件夹edgeDetection_grt_rtw
在当前工作文件夹下。
你可以在< model_name > _eML_blk_kernel
而且< model_name > _eML_blk_kernel_c
功能。三个v字型内的信息是内核的执行配置。
限制
GPU代码生成MATLAB函数块在状态流®不支持图表。
的MATLAB函数block不支持MATLAB语言中的所有数据类型。有关支持的数据类型,请参阅块文档。
对于GPU代码生成,自定义目标文件必须基于
grt.tlc
或ert.tlc
.
另请参阅
功能
open_system
(模型)|load_system
(模型)|save_system
(模型)|close_system
(模型)|bdclose
(模型)|get_param
(模型)|set_param
(模型)|sim卡
(模型)|slbuild
(模型)