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

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

    关注

    50

    文章

    4039

    浏览量

    133398
  • 信号
    +关注

    关注

    11

    文章

    2779

    浏览量

    76611
  • 模型
    +关注

    关注

    1

    文章

    3160

    浏览量

    48703

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

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

收藏 人收藏

    评论

    相关推荐

    理解ECU数据流的分析方法

    随着汽车电子化程度的提高,ECU在车辆中扮演的角色越来越重要。它们不仅控制着发动机管理、变速箱、制动系统等关键功能,还涉及到车辆的舒适性和安全性。 ECU数据流分析的重要性 故障诊断 :通过
    的头像 发表于 11-05 11:07 282次阅读

    请问TLV320AIC3254EVM-K怎么读取音频数据流

    您好,我在学习TLV320AIC3254EVM-K开发板的过程中碰到一这样的问题,TI提供的软件是否具备读取I2S的音频数据流的功能,或者是否有PC机软件可以读取音频数据流,或者其它方法?请高手帮忙解决,万分感谢!
    发表于 10-31 06:14

    简述光刻工艺的三个主要步骤

    “ 光刻作为半导体中的关键工艺,其中包括3大步骤的工艺:涂胶、曝光、显影。三个步骤有一异常,整个光刻工艺都需要返工处理,因此现场异常的处理显得尤为关键”
    的头像 发表于 10-22 13:52 311次阅读

    220v单管自激最简单三个步骤是什么

    对于220V单管自激电路,虽然“最简单三个步骤”可能因具体电路设计和应用需求而有所不同,但我可以概括出一般性的、简化的步骤,这些步骤旨在提供
    的头像 发表于 09-18 11:28 416次阅读

    快速确定升压转换器最大输出电流的三个步骤

    电子发烧友网站提供《快速确定升压转换器最大输出电流的三个步骤.pdf》资料免费下载
    发表于 09-07 10:42 0次下载
    快速确定升压转换器最大输出电流的<b class='flag-5'>三个</b><b class='flag-5'>步骤</b>

    统一日志数据流

    统一日志数据流图 日志系统数据流图 系统进行日志收集的过程可以分为三个环节: (1)日志收集和导入ElasticSearch (2)ElasticSearch进行索引等处理 (3)可视化操作,查询等
    的头像 发表于 08-21 15:00 270次阅读
    统一日志<b class='flag-5'>数据流</b>图

    示波器电流探头最简单三个步骤是什么

    具有重要意义。下面介绍示波器电流探头的三个简单步骤步骤一:选择合适的电流探头 确定测量范围 :首先,需要根据待测电路的电流大小选择合适的电流探头。电流探头通常有不同的量程,如10A、100A、1000A等,选择一
    的头像 发表于 08-09 14:24 500次阅读

    电源时序器最简单三个步骤是什么

    电源时序器是一种用于控制多个电源设备按特定顺序开启和关闭的设备。它可以广泛应用于各种电子设备、舞台音响、照明系统等领域。以下是电源时序器最简单三个步骤的介绍: 连接电源时序器 在开始使用电源时序器
    的头像 发表于 07-08 14:39 1041次阅读

    简述使用波特五力模型的三个步骤

    企业了解行业的竞争环境,从而制定相应的竞争策略。以下是使用波特五力模型的三个步骤。 第一步:识别行业 在使用波特五力模型之前,首先需要明确分析的行业范围。行业的定义可以根据产品、服务、市场、地理区域等因素来确定。这一步的目的是确保分析的焦点集中,避免将不同行业的竞争力量混
    的头像 发表于 07-05 14:34 644次阅读

    建立神经网络模型的三个步骤

    建立神经网络模型是一复杂的过程,涉及到多个步骤和细节。以下是对建立神经网络模型的三个主要步骤的介绍: 第一步:数据准备 1.1
    的头像 发表于 07-02 11:20 703次阅读

    变频器快慢调速最简单三个步骤

    调速的三个简单步骤。 一、变频器的基本原理 在了解变频器快慢调速的步骤之前,我们首先需要了解变频器的基本原理。变频器是一种将工频电源转换为可调频率电源的电气设备,通过改变输出频率的大
    的头像 发表于 06-17 15:17 1934次阅读

    研控8线步进电机最简单三个步骤

    步进电机是一种将电脉冲信号转换为机械角位移的电机,广泛应用于各种自动化设备和机器人中。研控8线步进电机是一种常见的步进电机类型,具有较高的精度和稳定性。本文将详细介绍研控8线步进电机的三个简单步骤
    的头像 发表于 06-12 09:16 1131次阅读

    RISC-V的中断处理 中断操作三个步骤

    中断操作三个步骤: 1、中断初始化 2、trap处理 3、用户中断处理
    的头像 发表于 05-20 16:38 1083次阅读

    stm32F429串口采用DMA方式发送,数据流使能失败的原因?

    , ENABLE);//使能DMA while(DMA_GetCmdStatus(DMA2_Stream7) != ENABLE);// 等待DMA数据流有效 可以看到数据流未被正常使能。 可以看到出现两错误标志。 串口
    发表于 04-17 07:05

    设置AD9122发送一组实数的数据流,应该怎样设置寄存器呢?

    我想设置AD9122发送一组实数的数据流,(利用FPGA产生的10M载波信号)应该怎样设置寄存器呢? 我的想法是这样的 1B->E4(旁路预调值,旁路反sinc-1滤波器,旁路
    发表于 12-19 07:37