主要内容

使用GPU编码器仿真加速度

您可以使用GPU编码器™加快执行Simulink的执行万博1manbetx®在nvidia的模型®GPU。GPU加速的计算遵循异构编程模型。应用程序的高度平行化的部分映射到核心并行地执行成千上万的GPU核心,而顺序代码的其余部分仍然在CPU上运行。

要执行GPU加速模拟,使用Make Modure ModionSimultIng仿真模拟应用程序的计算密集部分万博1manbetxMatlab功能(万博1manbetxSimulink)块。当您模拟包含一个模型时Matlab功能块,软件分区并生成CUDA®马铃薯®可执行(MEX)代码并将此代码与Simulink模型集成。万博1manbetx

使用GPU编码器进行仿真加速的基本步骤是:

  • 创建或打开模型。

  • 通过选择来配置GPU加速模型求解器以及其他GPU特定的配置参数。

  • 运行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上,单击跑步

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

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

配置GPU加速模型

模型配置参数确定模拟过程中使用的加速度方法。

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

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

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

  2. 在这一点仿真目标窗格,启用GPU加速范围。

    笔记

    参数自动设置为C ++

  3. GPU编码器特定选项现在可见仿真目标> GPU加速度窗格。出于此示例的目的,您可以使用所有GPU特定参数的默认值。

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

  4. 要保存并关闭配置参数对话框,请单击好的

    你也可以使用set_param.(万博1manbetxSimulink)在Matlab命令窗口中以编程方式配置模型参数的功能。

    set_param('edgedetection''gpuacceleration''上');

构建GPU加速模型

要构建和模拟GPU加速模型,请选择跑步在这一点模拟选项卡或使用以下MATLAB命令:

SIM('edgedetection');

软件首先检查以查看CUDA代码是否已为模型编译。如果以前创建的代码,则该软件运行模型。如果先前未构建代码,则软件首先生成并编译CUDA代码,然后运行模型。代码生成工具将生成的代码放在调用的工作文件夹的子文件夹中slprj / _slprj / ededetection

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

限制

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

  • 什么时候GPU加速已启用,代码生成器不支持万博1manbetx导入自定义代码用于导入自定义撰写的CUDA源文件(* .cu)。相反,使用编码器.CEVAL.在 - 的里面Matlab功能堵塞。

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

也可以看看

职能

相关话题