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

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

    关注

    53

    文章

    4406

    浏览量

    137671
  • 信号
    +关注

    关注

    11

    文章

    2902

    浏览量

    79670
  • 模型
    +关注

    关注

    1

    文章

    3648

    浏览量

    51712

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    FX3板是否兼容2k和4k分辨率的视频数据流

    ,实现了 1920 * 1080 @ 60 fps 的设计,但现在我想检查与上述更高分辨率的兼容性。 关于这一点,我有几个问题 1.FX3 板是否兼容 2k 和 4k 分辨率的视频数据流? 2.视频数据流
    发表于 05-23 06:35

    通过 FX3 以 5200*3900 分辨率、15fps 的速度从我的 fpga 传输视频数据流,但无法设置最小/最大比特率描述符值,怎么解决?

    我正试图通过 FX3 以 5200*3900 分辨率、15fps 的速度从我的 fpga 传输视频数据流,但无法设置最小/最大比特率描述符值,因为描述符大小只有 32 位。 描述符的预期值应该是
    发表于 05-23 06:35

    使用FX3测试程序中的数据流时,遇到了每8字节重复的场景,是什么原因导致的?

    我在使用 FX3 测试程序中的数据流时,遇到了每 8 个字节重复的场景。
    发表于 05-21 06:59

    如何检测极管的三个

    可以用万用表初步确定极管的好坏及类型 (NPN 型还是 PNP 型 ),并辨别出e(发射极)、b(基极)、c(集电极)三个电极。
    发表于 03-08 16:40

    Linux系统中最重要的三个命令

    Linux剑客是Linux系统中最重要的三个命令,它们以其强大的功能和广泛的应用场景而闻名。这三个工具的组合使用几乎可以完美应对Shell中的数据分析场景,因此被统称为Linux
    的头像 发表于 03-03 10:37 797次阅读

    150℃无压烧结银最简单三个步骤

    150℃无压烧结银最简单三个步骤 作为烧结银的全球领航者,SHAREX善仁新材持续创新,不断超越自我,最近开发出150℃无压烧结银AS9378TB,以其独特的低温处理优势,成为了众多研究与应用中
    发表于 02-23 16:31

    使用ADS1281做调制器,两调制器都是输出1位的数据流,那合并之后数据流是几位的呢?

    ]). 现在有以下两问题: 1.两调制器都是输出1位的数据流,那合并之后数据流是几位的呢? 2.如果取所有可能的情况,Y[n]的输出范围就是-24~+25,这个又要怎么理解呢?
    发表于 02-05 09:10

    适用于Oracle的SSIS数据流组件:提供快速导入及导出功能

    使用SSIS 数据流组件,通过与关键数据库和云服务的 Oracle 数据集成改进您的 ETL 流程,这些组件提供快捷和可靠的
    的头像 发表于 01-15 10:51 1444次阅读
    适用于Oracle的SSIS<b class='flag-5'>数据流</b>组件:提供快速导入及导出功能

    STM32读取ADS1274的数据,为什么只能读到三个通道的?

    我用的是STM32读取ADS1274的数据, CLK=5MHz,周期200ns SCLK脉冲周期大概是800ns 将SYNC接到了3.3V, 目前可以读到数据,只是只能读到三个通道的,第四
    发表于 01-08 07:51

    TMETRIC:简单步骤将工作区连接到时间跟踪应用程序

    将计时器按钮添加到组合门票 完成这三个简单步骤以在 Assembla 中启用时间跟踪。设置时间不超过 3 分钟。 注册 TMetric 具有高级计费和报告功能的时间跟踪应用程序 安装浏览器扩展
    的头像 发表于 01-07 09:23 657次阅读
    TMETRIC:<b class='flag-5'>简单步骤</b>将工作区连接到时间跟踪应用程序

    Devart SSIS数据流组件

    Devart SSIS 数据流组件是功能强大的工具,旨在简化 SQL Server Integration Services (SSIS) 包内的 ETL 流程,使用户无需编写复杂的代码即可通过
    的头像 发表于 01-05 11:08 1892次阅读
    Devart SSIS<b class='flag-5'>数据流</b>组件