主要内容

使用GPU编码器从Simulink模型中生成代码

GPU Coder™生成优化的CUDA®代码从仿真软件®模型包含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(单(grayImage), k,“相同”);V = conv2(单(grayImage), k’,“相同”);E =√H。* H + V * V);edgeImage = uint8((E >阈值)* 255);

MATLAB pepper .png测试图像及其边缘检测输出。

创建边缘检测模型

  1. 创建一个Simulink模型并插入两个MATLAB函数块的用户定义函数图书馆。

  2. 添加一个常数块,并将其值设置为0.4

  3. 添加一个从多媒体文件块的计算机视觉工具箱™图书馆。

  4. 打开块的参数对话框。从多媒体文件块,并设置文件名称参数rhinos.avi

    设置图像信号参数一个多维信号

  5. 添加两个视频查看器块的计算机视觉的工具箱库到模型。

    Simulink模型包含块,用于实现边缘检测算法。

  6. 控件中的一个MATLAB函数块。控件中出现默认函数签名MATLAB函数块编辑器。

  7. 定义一个函数索贝尔,实现了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);结束

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

    如果函数包装参数设置为任何其他值,CUDA内核可能不会生成。

  9. 修改其他MATLAB函数块在Sobel边缘检测操作之前实现RGB到灰度的转换。设置函数包装参数的MATLAB函数可重用的功能

    函数灰色= RGB2gray (RGB)% # codegen将彩色图像转换为灰色图像gray = (0.2989 * double(RGB(:,:,1)) +...0.5870 * double(RGB(:,:,2)) +...0.1140 *双(RGB (:,:, 3)));结束
  10. 如图所示将这些块连接起来。将模型保存为edgeDetection.slx

    Simulink模型显示块之间的连接。

  11. 要测试模型的错误,在Simulink编辑器中模拟模型。在工具条上,单击运行

    若要在模拟过程中查看所有视频帧,请禁用模拟>下降帧以提高性能选择的视频查看器块。

    来自视频查看器块的边缘检测输出。

为代码生成配置模型

模型配置参数为代码生成和构建过程提供了许多选项。

  1. 打开“配置参数”对话框。打开解算器窗格。要编译加速模型并生成CUDA代码,请将模型配置为使用固定步长求解器。该表显示了本示例的求解器配置。

    参数 设置 对生成代码的影响
    类型 固定步 维护代码生成所需的恒定(固定)步长
    解算器 离散(无连续状态) 应用固定步长积分技术计算模型的状态导数
    固定的大小 汽车 Simulink选择步长

    显示模拟求解器选项的配置参数对话框的快照。

  2. 代码生成窗格中,设置系统目标文件grt.tlc

    您也可以使用嵌入式编码器®目标文件ert.tlc或者自定义系统目标文件。

    对于GPU代码生成,自定义目标文件必须基于grt.tlcert.tlc.有关开发自定义目标文件的信息,请参见自定义系统目标文件(仿真软件编码器)

  3. 设置语言c++

  4. 选择生成GPU的代码

  5. 代码生成窗格中,选择只生成代码

  6. 选择工具链.Linux®平台,选择NVIDIA CUDA | gmake(64位Linux).对于Windows®系统,选择NVIDIA CUDA (w/Microsoft Visual c++ 20XX) | nmake(64位windows)

    当使用自定义系统目标文件时,您必须为工具链方法设置构建控件。要了解关于自定义目标的工具链方法的更多信息,请参见支持自定义目标工具链方法(仿真软件编码器)

  7. 代码生成>接口窗格中,禁用MAT-file日志

  8. 代码生成>报告窗格中,选择创建代码生成报告而且自动打开报告

  9. 启用生成GPU的代码参数,特定于GPU Coder的选项出现在代码生成> GPU代码窗格。

    对于本例,您可以使用中特定于gpu的参数的默认值代码生成> GPU代码窗格。

    模型配置参数对话框上的“GPU Code”面板。

  10. 点击好吧保存并关闭“配置参数”对话框。

    您可以使用set_param函数在MATLAB中编程配置模型参数®命令窗口。

    set_param (“edgeDetection”“GenerateGPUCode”CUDA的);

为模型生成CUDA代码

  1. 在Simulink编辑器中,打开仿真软件编码器应用程序。

  2. 生成的代码。

消息出现在诊断查看器中。代码生成器生成CUDA源文件和头文件,以及HTML代码生成报告。代码生成器将文件放在建立文件夹,子文件夹名为edgeDetection_grt_rtw在您当前的工作文件夹下。

你可以在< model_name > _eML_blk_kernel而且< model_name > _eML_blk_kernel_c功能。三个v字形中的信息是内核的执行配置。

限制

  • GPU代码生成MATLAB函数块Stateflow®不支持图表。

  • MATLAB函数块不支持MATLAB语言中的所有数据类型。关于支持的数据类型,请参阅块文档。

  • 对于GPU代码生成,自定义目标文件必须基于grt.tlcert.tlc

另请参阅

功能

相关的话题

Baidu
map