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

    文章

    3904

    浏览量

    132603
  • 信号
    +关注

    关注

    11

    文章

    2685

    浏览量

    75770
  • 模型
    +关注

    关注

    1

    文章

    2841

    浏览量

    48067

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

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

收藏 人收藏

    评论

    相关推荐

    ESP32如何在不漏数据的情况下采集数据流

    esp32作为spi从机连接一款AD,该AD芯片上电后就会持续不断地向外发送数据,如果循环调用spi_slave_transmit(),那么两次调用之间就会漏掉一些数据。 请问从机有没有办法在不漏数据的情况下采集这个
    发表于 06-19 08:02

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

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

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

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

    让YUV2演示在FX3的内存上运行,启动数据流时却无法正常工作,应用程序会崩溃,为什么?

    的 bAlternate 设置错误,导致等时无法启动: 应该是 1,就像这个 mjpeg 截图中的命令一样,它确实启动了流媒体: 这会导致代码出现问题,无法启动数据流: /* Start
    发表于 05-28 08:18

    TSN时间敏感网络QoS数据流传输中干扰的种模式#TSN #时间敏感网络

    数据流TSN
    北汇信息POLELINK
    发布于 :2024年04月24日 12:29:11

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

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

    TIM_PWM+DMA输出三个不同占空比的单脉冲,为什么第三个数据总是第一输出?

    使用TIM_PWM + DMA,DMA传输长度为3,即顺序输出3不同占空比的单脉冲(10%,20%,50%),三个脉冲输出完成后进入DMA传输完成中断,关闭定时器。通过抓图形发现,实际输出是50%,10%,20%,请问这是为什
    发表于 04-03 07:23

    AN75779 FX3 + UVC切换到异步模式时丢失数据的原因?

    (WireShark)比较通过 USB 接收的数据时,该数据在主机 USB 的接收处已经丢失,这意味着它是不是由 FX3 发送的。 数据流由 1950x1150 帧组成,每个像素由 2
    发表于 03-06 07:19

    fx3进行视频数据流的传输的时候,请问如何修改可以达到同步传输的要求?

    在fx3的固件中给出的slavefifo 是通过bulk传输的demo 我想进行视频数据流的传输的时候,请问如何修改可以达到同步传输的要求 我目前在固件里面只看到了bulk的方式,如果有同步传输的demo或者修改教程请不吝赐教 FX3中的ISO
    发表于 02-28 07:50

    ADXL345的三个轴的偏置寄存器中的值有什么意义呢?

    ADXL345的三个轴的偏置寄存器中的值有什么意义呢?为什么一定要有偏置才能工作呢?而且偏置最大才2g。如果我设置成满偏置,那么静止的时候读出来的数据寄存器的值是多少呢?
    发表于 01-02 07:17

    有没有通过设置ad减少噪声的方法?

    电路板已经做出来了,并且能成像了。但是电路的噪声很大,空载时噪声到第7位,想问下有没有通过设置ad减少噪声的方法。 另外请教下: cds增益:这个是通过减小输入动态范围
    发表于 12-22 06:29

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

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

    51单片机如何用三个开关控制三个直流电机?

    51单片机用三个开关控制三个直流电机要做到现先启动先停止
    发表于 10-26 06:09

    变压器维护的简单步骤

    有计划的维修或更换。紧急维修或更换的成本要高得多,并导致生产损失。 日常变压器维护的简单步骤 日常维护对于延长变压器寿命至关重要,涉及一些基本步骤。 对于较小的封装变压器,定期清洁变压器外壳对于防止灰尘和污垢积聚会阻碍
    的头像 发表于 10-24 16:26 1119次阅读

    无线路由设置步骤

    电子发烧友网站提供《无线路由设置步骤.pdf》资料免费下载
    发表于 10-20 09:54 0次下载
    无线路由<b class='flag-5'>设置</b><b class='flag-5'>步骤</b>