主要内容

使用GPU编码器的Simulink模型生成万博1manbetx代码

GPU编码器™产生优化的CUDA®simulink的代万博1manbetx码®包含的模型Matlab功能块。您可以使用生成的代码和可执行文件在nvidia上快速原型设计®GPU。代码生成报告和跟踪性使您可以查看和分析生成的代码。使用GPU编码器的CUDA代码生成的基本步骤是:

  • 创建或打开模型。

  • 通过选择来配置代码生成模型求解器工具链以及其他GPU特定的配置参数。

  • 构建模型。

示例:Sobel边缘检测

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

MATLAB PEPPER.PNG测试图像及其边缘检测到输出。

创建边缘检测模型

  1. 创建Simulin万博1manbetxk模型并插入两个Matlab功能街区来自用户定义的函数图书馆。

  2. 添加A.持续的块并将其值设置为0.4

  3. 添加A.来自多媒体文件街区来自计算机Vision Toolbox™图书馆。

  4. 打开块参数对话框来自多媒体文件块并设置文件名参数到rhinos.avi.

    设定图像信号参数到一个多维信号

  5. 加二视频查看器街区来自电脑视觉工具箱图书馆到模型。

    万博1manbetxSimulink模型包含用于实现边缘检测算法的块。

  6. 双击其中一个Matlab功能块。将显示默认函数签名Matlab功能块编辑器。

  7. 定义一个调用的函数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);结尾

  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.

    万博1manbetxSimulink模型显示块之间的连接。

  11. 要测试错误模型,请在Simulink编辑器中模拟模型。万博1manbetx在ToolStrip上,单击跑步

    要在模拟期间查看所有视频帧,请禁用仿真>跌落框架提高性能选项视频查看器堵塞。

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

配置代码生成模型

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

  1. 打开配置参数对话框。打开求解器窗格。要编译适用于加速和生成CUDA代码的模型,请配置模型以使用固定步骤求解器。此表显示了此示例的求解器配置。

    范围 环境 对生成代码的影响
    类型 固定步骤 维护代码生成所需的常数(固定)步长
    求解器 离散(没有连续的状态) 应用一个固定步骤集成技术来计算模型的状态衍生
    固定阶梯 汽车 万博1manbetxsimulink选择阶梯大小

    显示用于模拟的Solver选项的配置参数对话框的快照。

  2. 在这一点代码生成窗格,设置系统目标文件grt.tlc.

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

  3. 设定C ++

  4. 选择生成GPU代码

  5. 在这一点代码生成窗格,选择仅生成代码

  6. 选择工具链。对于Linux.®平台,选择nvidia cuda |gmake(64位Linux)。适用于Windows.®系统,选择NVIDIA CUDA(W / Microsoft Visual C ++ 20xx)|nmake(64位窗口)

  7. 在这一点代码>界面窗格,禁用MAT文件日志记录

    在生成CUDA代码时,代码生成器不支持MAT文件日志记录万博1manbetx。

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

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

    在此示例中,您可以使用特定于GPU的参数的默认值代码> GPU代码窗格。

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

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

    你可以使用set_param.在MATLAB中以编程方式配置模型参数的功能®命令窗口。

    set_param('edgedetection''世代Pucode''CUDA');

为模型生成CUDA代码

  1. 在Simuli万博1manbetxnk编辑器中,打开万博1manbetxSimulink编码器应用程序。

  2. 生成代码。

消息出现在诊断查看器中。代码生成器会产生CUDA源和头文件和HTML代码生成报告。代码生成器将文件放在一个中构建文件夹,一个名为的子文件夹edgedetection_grt_rtw.在当前的工作文件夹下。

你可以找到CUDA内核 _eml_blk_kernel _eml_blk_kernel_c功能。三脚轮中的信息是内核的执行配置。

限制

  • GPU代码生成Matlab功能eventflow中的块®不支持图表。万博1manbetx

  • Matlab功能块不支持来自MATLAB语言的万博1manbetx所有数据类型。对于支持万博1manbetx的数据类型,请参阅块文档。

也可以看看

功能

相关话题