主要内容

使用GPU编码器的Simulink模型代码金宝app生成

GPU编码器™ 生成优化的CUDA®来自Simulink金宝app的代码®模型包含MATLAB函数阻碍。您可以使用生成的代码和可执行文件在NVIDIA上进行快速原型制作®gpu。代码生成报告和可跟踪性使您能够查看和分析生成的代码。使用GPU编码器生成CUDA代码的基本步骤如下:

  • 创建或打开模型。

  • 通过选择解算器语言工具链,以及其他特定于gpu的配置参数。

  • 建立模型。

示例:Sobel边缘检测

Sobel边缘检测算法是一种简单的边缘检测算法,它对灰度图像进行二维空间梯度运算。该算法强调与输入图像边缘相对应的高空间频率区域。

Sobel边缘算法计算水平梯度(H)及垂直梯度(V)利用两个正交滤波核对输入图像进行滤波(kk”).滤波后,算法计算梯度大小,并应用一个阈值来找到图像中被认为是边缘的区域。

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);

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

建立边缘检测模型

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

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

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

  4. 打开块参数对话框的从多媒体文件阻塞并设置文件名称参数犀牛

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

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

    金宝app包含用于实现边缘检测算法的块的Simulink模型。

  6. 双击其中一个MATLAB函数块。默认函数签名出现在MATLAB函数块编辑器。

  7. 定义一个名为索贝尔,它实现了Sobel边缘检测算法grayImage门槛作为对索贝尔函数,边缘图像作为返回值。保存编辑器文档到文件。

    作用edgeImage =索贝尔(grayImage阈值)% # codegen%定义Sobel边缘检测的核函数K = single([1 2 1;0 0 0;1 2 1]);%检测边缘H = conv2(单(grayImage), k,“一样”); V=conv2(单个(灰度图像),k',“一样”); E=sqrt(H.*H+V.*V);边缘图像=uint8((E>阈值)*255);结束

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

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

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

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

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

  11. 要测试模型的错误,请在Simulink编辑器中模拟模型。在toolstrip上,单击金宝app运行

    要在模拟期间查看所有视频帧,请禁用模拟>丢弃帧以提高性能选择的视频查看器块。

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

为代码生成配置模型

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

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

    参数 背景 对生成代码的影响
    类型 固定步 保持代码生成所需的恒定(固定)步长
    解算器 离散(无连续状态) 应用定步积分技术计算模型的状态导数
    固定的大小 汽车 金宝appSimulink选择步长

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

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

    您也可以使用嵌入式编码器®目标文件ert.tlc

  3. 设置语言c++

  4. 选择生成GPU代码

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

  6. 选择工具链.Linux®平台,选择NVIDIA CUDA | gmake(64位Linux).对于Windows®系统,选择NVIDIA CUDA(W/微软Visual C++ 20XX)NFUE(64位窗口)

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

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

  9. 当您启用生成GPU代码参数,特定于GPU编码器的选项将显示在代码生成>GPU代码窗玻璃

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

    在模型配置参数对话框的“GPU代码”窗格中。

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

    你可以使用设置参数函数在MATLAB中以编程方式配置模型参数®命令窗口。

    设置参数(“edgeDetection”“GenerateGPUCode”“库达”);

为模型生成CUDA代码

  1. 在Simuli金宝appnk编辑器中,打开金宝appSimulink编码器应用程序。

  2. 生成的代码。

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

您可以在< model_name > _eML_blk_kernel\u eML\u blk\u kernel\u c功能。三个chevrons中的信息是内核的执行配置。

局限性

  • 图形处理器代码生成MATLAB函数块Stateflow®不支持图表。金宝app

  • MATLAB函数块不支持来自MATLAB语言的金宝app所有数据类型。有关受支金宝app持的数据类型,请参阅块文档。

另请参阅

功能

相关话题