主要内容

利用GPU编码器实现仿真加速

您可以使用GPU Coder™来加快Simulink的执行速度万博1manbetx®NVIDIA模型®gpu。gpu加速计算遵循异构编程模型。应用程序中高度可并行的部分被映射到在数千个GPU内核上并行执行的内核中,而其余的顺序代码仍然在CPU上运行。

要执行gpu加速的仿真,请在Simulink中通过使用对应用程序的计算密集型部分建模万博1manbetxMATLAB函数(万博1manbetx模型)块。当您模拟一个包含MATLAB函数块,软件进行分区并生成CUDA®MATLAB®可执行(MEX)代码,并将此代码与Simulink模型集成。万博1manbetx

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

  • 创建或打开一个模型。

  • 配置图形处理器加速的模型解算器语言,以及其他特定于gpu的配置参数。

  • 运行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);

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

创建边缘检测模型

  1. 创建一个Simul万博1manbetxink模型并插入两个MATLAB函数街区之外用户定义函数图书馆。

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

  3. 添加一个来自多媒体文件计算机视觉工具箱图书馆。

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

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

  5. 添加两个视频查看器街区之外计算机视觉工具箱库的模型。

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

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

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

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

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

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

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

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

  11. 要测试模型的错误,请在Simulink Editor中模拟模型。万博1manbetx在工具条上,单击运行

    若要在模拟期间查看所有视频帧,请禁用模拟>掉落帧来提高性能选项视频查看器块。

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

配置GPU加速的型号

模型配置参数决定了仿真过程中使用的加速方法。

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

    参数 设置 对生成代码的影响
    类型 固定步 保持一个固定的步长。
    解算器 离散(无连续状态) 采用固定步长积分法计算模型的状态导数。
    固定的大小 汽车 万博1manbetxSimulink选择步长。

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

  2. 模拟目标窗格中,使GPU加速参数。

    请注意

    语言参数自动设置为c++

  3. 图形处理器编码器特定的选项现在可见模拟目标> GPU加速窗格。对于本例,您可以对所有特定于gpu的参数使用默认值。

    模型配置参数对话框中的GPU加速面板。

  4. 单击,保存并关闭“配置参数”对话框好吧

    你也可以使用set_param(万博1manbetx模型)函数在MATLAB命令窗口中以编程方式配置模型参数。

    set_param (“edgeDetection”“GPUAcceleration”“上”);

构建GPU加速模型

要构建和模拟GPU加速模型,请选择运行模拟tab或使用下面的MATLAB命令:

sim卡(“edgeDetection”);

该软件首先检查CUDA代码之前是否为模型编译过。如果之前创建了代码,那么软件将运行模型。如果之前没有构建代码,则软件首先生成并编译CUDA代码,然后运行模型。代码生成工具将生成的代码放在工作文件夹的子文件夹中slprj / _slprj / edgeDetection

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

限制

  • GPU代码生成MATLAB函数块在状态流®不支持图表。万博1manbetx

  • GPU加速是否启用,代码生成器不支持万博1manbetx导入自定义代码用于导入自定义编写的CUDA源文件(*.cu)。相反,使用coder.cevalMATLAB函数块。

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

另请参阅

功能

相关的话题