0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何通过三个简单步骤来设置数据流

MATLAB 来源:MATLAB 作者:MATLAB 2021-09-10 10:03 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

MathWorks信号处理系统设计往往涉及复杂的算法或者数据密集型应用,因此通常具有较高的计算复杂度。构建和仿真这些复杂系统可能相当耗时。Simulink 中的数据流执行域功能是减少模型仿真时间的方法之一。该功能可以对 Simulink 模型自动分区,然后使用主机上闲置的 CPU 内核并行执行各分区,从而加速仿真。本文说明如何通过三个简单步骤来设置数据流。然后,我们用无线电模型作为示例来演示数据流的实际运用,并比较启用和未启用数据流的模型仿真时间。此示例中使用的模型可以直接点击文末“阅读原文”下载。

数据流使用的并行机制类型

为进行模型分区和并行执行,数据流会采用以下数据和任务并行机制组合之一(图 1):

显式并行机制通过不同算法处理不同数据集。

展开并行机制通过同一算法处理一个数据流的连续帧。

管道并行机制通过不同算法处理同一数据的不同部分。

设置数据流

要在 Simulink 模型中启用数据流执行域,首先要实现子系统。实现方式取决于您的具体设计进度。如果您的设计刚刚开始,请使用 DSP System Toolbox 中的 Dataflow Subsystem 模块(图 2)。该模块经过预配置,可以直接使用。您只需将它拖到 Simulink 模型中,然后在其中填充算法组件。 如果您的设计模型已构建完毕,请将表示要并行化的算法的模块放在子系统中,并按如下方式设置数据流:

选择您刚刚创建的子系统。

在属性检查器的“执行”选项卡下,勾选设置执行域复选框。

将域选项设置为数据流。

在子系统内部,左下角的 》 图标表示子系统设置为数据流执行域。数据流执行域首先通过在单线程上运行模型来分析模型,然后自动进行子系统分区以用于多线程执行。

数据流的实际运用

该示例模型对无线电发射机和接收机进行仿真。它包含数字上变频器和下变频器来调整信号频率,并实现调制器和解调器(图 3)。输入是以 8 kHz 采样的录制语音。输出是两个频谱分析仪和一个音频接收端。

首先,我们测量在不启用数据流的情况下仿真该模型所需的时间1。我们可以注释掉输出模块,以便专注于仿真算法,而不受运行示波器和音频输出所需的固定时长的限制。(1. 所有仿真都在 Windows 桌面计算机上运行,该计算机采用 Intel Xeon CPU W-2133 @ 3.6 GHz 6 核 12 线程处理器。)我们使用 tic-toc 命令测量仿真时间:

modelname = ‘mono_radiomodel’;

tic;

simData = sim(modelname);

t = toc

运行该模型的执行时间为 3.67 秒。现在我们引入数据流。我们将表示算法的模块放入子系统中,并将域设置为数据流(图 4)。

助手建议的更改之一是添加延迟。当数据流发现并行机制可能增大吞吐量时,通常会向模型添加延迟。沿信号线添加的延迟用 z-n 标签表示。我们接受更改,并将启用了数据流的模型保存为 mono_radiomodel_dataflow。然后,我们使用与之前相同的 tic-toc 命令来测量新子系统的执行时间。

modelname = ‘mono_radiomodel_dataflow’;

tic;

simData2 = sim(modelname);

t_Dataflow = toc

启用数据流后的执行时间为 2.5 秒,比正常的单线程执行速度快 1.7 倍。加速得益于编译器优化、模型设置更改和数据流添加的延迟。然而,该模型仅在单线程上执行,加速并不显著。这是因为大部分计算负载都集中在上下变频器模块中。当计算负载分散在整个模型中时,数据流效果最佳,因为这为创建并行线程提供了更多机会。在下一节中,我们将扩展模型,展示数据流的实现如何进一步提高仿真性能。

处理大型模型

我们通过引入多通道音频输入信号来增大模型的计算复杂度。这会使需要处理的数据量倍增,也为数据流提供了更多优化仿真性能的机会。图 6 显示经过修改、采用立体声音频输入的模型,运行时间为 18.6 秒。通过启用信号维度信息叠加,我们可以看到信号输入确实有两个音频通道。

在启用数据流并重新运行模型后,我们观察到模型在 5 个并发线程上运行,执行时间为 4.5 秒,几乎实现了 4 倍加速(图 7)。

使用数据流的多线程代码生成数据流支持使用 Simulink Coder 和 Embedded Coder 的单核和多核 C/C++ 代码生成。首先在 Simulink 模型的“求解器”窗格中启用允许任务在目标上并发执行参数,然后使用 Ctrl + B 生成代码。为桌面目标生成的代码通过 OpenMP 实现多线程化。为 Embedded Coder 目标生成的代码通过 POSIX 实现多线程化。图 8 显示基于以上无线电模型生成的 OpenMP C 代码,包括由数据流创建的并发任务。

数据流的限制

虽然数据流有助于加速大多数仿真,但它对有些模型可能并不适用,例如较小的模型、不太复杂的模型,或者计算负载集中在少数几个模块中的模型。在这些情况下,数据流实现的速度提升不会抵消在并行线程上同步和执行模型所需的开销。如无线电模型示例所示,当计算负载在模型中均匀分布时,数据流效果最佳,因为均匀分布的负载意味着有更多机会进行模型分区和并行执行。就建模限制而言,从版本 2020b 开始,数据流不支持连续模块、可变大小信号或虚拟 Simulink 总线的多线程仿真。

小结

通过数据流执行域,您可以在 Simulink 模型中识别可以分布到多个线程中并行执行的建模模式。这种方法可利用主机 CPU 上闲置的处理能力,优化吞吐量,并减少模型仿真时间。数据流执行域最适合计算负载分散在整个模型中的情形(此时可引入并行机制),并且只能处理离散信号。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真
    +关注

    关注

    55

    文章

    4567

    浏览量

    138816
  • 信号
    +关注

    关注

    12

    文章

    2950

    浏览量

    80506
  • 模型
    +关注

    关注

    1

    文章

    3873

    浏览量

    52337

原文标题:加速 Simulink 模型中的信号处理算法仿真

文章出处:【微信号:MATLAB,微信公众号:MATLAB】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    系统讲解从Deployment到Service的完整数据流

    从一线运维视角出发,系统讲解从 Deployment 到 Service 的完整数据流,剖析每个环节的工作原理、常见故障点以及排障方法。
    的头像 发表于 04-22 14:52 296次阅读

    EsDA科普 | AWFlow数据流图开发:让嵌入式开发像搭积木一样简单

    数据流图概念爆火,但如何真正落地嵌入式开发?AWFlow以纯C语言打造可视化图编程,拖拽节点即可实现硬件控制、云端连接、数据处理——无需关心底层适配,专注业务逻辑本身。什么是数据流
    的头像 发表于 03-27 11:42 269次阅读
    EsDA科普 | AWFlow<b class='flag-5'>数据流</b>图开发:让嵌入式开发像搭积木一样<b class='flag-5'>简单</b>

    工作节点说明---工作节点

    平台提供工作节点,实现工作嵌套工作的效果。 节点说明 在一工作中,开发者可以将另一
    发表于 03-24 21:05

    变频器PID参数设置步骤

    变频器PID控制是工业自动化领域中实现精确调节的关键技术之一,其核心在于通过比例(P)、积分(I)、微分(D)三个参数的协同作用,实现对电机转速、压力、流量等物理量的闭环控制。本文将结合西门子
    的头像 发表于 03-03 17:14 1307次阅读
    变频器PID参数<b class='flag-5'>设置</b><b class='flag-5'>步骤</b>

    MAX1916:高性能低 dropout 恒通道白光 LED 偏置电源

    MAX1916 是传统白光 LED 设计中简单镇流电阻的高性能替代方案。它只需一电阻就能为三个 LED 设置偏置电流,且三个 LED 的
    的头像 发表于 02-03 14:55 365次阅读

    基于Matter over Thread的照明应用示例简要设置步骤

    在Silicon Labs(芯科科技)近期更新的技术支持文档页面中,我们详细描述了运行一基于Matter over Thread的照明应用示例的简要设置步骤
    的头像 发表于 02-03 14:03 860次阅读
    基于Matter over Thread的照明应用示例简要<b class='flag-5'>设置</b><b class='flag-5'>步骤</b>

    束管式光缆最简单三个步骤

    束管式光缆的安装或施工可简化为以下三个核心步骤,确保光纤传输性能稳定且操作高效: 第一步:路由规划与准备 路径勘察 确定光缆敷设路线,避开强电磁干扰源(如高压线)、尖锐物体或易受外力破坏的区域(如
    的头像 发表于 01-07 10:12 538次阅读

    使用简仪科技产品构建高速数据流盘与回放系统解决方案

    本案例面向国产自主可控PXI软硬件平台,构建了一套运行于银河麒麟实时操作系统环境下的高速数据流盘与回放系统。系统以高速数字化仪为核心,实现多通道高速信号的实时采集、连续盘存储及离线回放分析,保障
    的头像 发表于 12-30 10:52 806次阅读
    使用简仪科技产品构建高速<b class='flag-5'>数据流</b>盘与回放系统解决方案

    如何查看电能质量在线监测装置的数据自动清理规则参数设置是否成功?

    查看电能质量在线监测装置数据自动清理规则参数设置是否成功,需通过 参数核对 、 日志验证 、 模拟测试 三个维度进行,以下是完整操作方法: 一、参数配置核对(确认
    的头像 发表于 12-10 16:29 468次阅读
    如何查看电能质量在线监测装置的<b class='flag-5'>数据</b>自动清理规则参数<b class='flag-5'>设置</b>是否成功?

    欧姆龙推出全新数据流边缘控制器DX1

    2025年11月,欧姆龙自动化(中国)有限公司发布新品【数据流控制器DX1】。DX1作为一款数据流边缘控制器,面对生产现场数据采集与活用困难、数据需求因人/设备而异、需关停设备才能引入
    的头像 发表于 11-26 18:02 1469次阅读
    欧姆龙推出全新<b class='flag-5'>数据流</b>边缘控制器DX1

    在以下嵌入式软件设计模型中,属于数据流模型的是,哪里有设计模型的介绍?

    在以下嵌入式软件设计模型中,属于数据流模型的是()。A. CCSB. CSPC. FSMD. Petri Net
    发表于 11-24 15:55

    如何在大核rtt上把kd_mpi_vicap_start_stream三个摄像头各自出的拼成一呢?

    内容为空就行,三个格对应三个摄像头 最后目的是进行这个frame编解码然后uvc 你好,实现多个摄像头画面的合成显示,可借助 VO(视频输出)的 WBC(窗口合成)功能,具体步骤如下: 首先在 VO
    发表于 09-09 07:20

    求助,关于stm32H7多DMA数据流问题求解

    情况如下:stm32H7配置了一adc进行采样,通过dma进行数据传输,串口接收和发送命令,用两dma数据流通道,采用的空闲中断。 问题
    发表于 07-29 15:02

    如何使用WaveDac8设置简单数据采集系统,以生成不同持续时间的脉冲?

    我目前正在尝试使用 WaveDac8 设置简单数据采集系统,以生成不同持续时间的脉冲,并应用于 RC 简单电路。我成功生成了 250
    发表于 07-25 07:55

    用IS8000软件和WT5000功率分析仪的DS波形数据流功能分析形数据

    横河IS8000集成软件平台,将功率分析仪的波形采集与示波器的波形数据分析融为一体,提高测试效率。下面我们将为您揭晓如何通过IS8000软件和WT5000的DS波形数据流功能轻松保存并分析相关波形
    的头像 发表于 07-03 18:30 866次阅读
    用IS8000软件和WT5000功率分析仪的DS波形<b class='flag-5'>数据流</b>功能分析形<b class='flag-5'>数据</b>