0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何通過三個簡單步驟來設(shè)置數(shù)據(jù)流

MATLAB ? 來源:MATLAB ? 作者:MATLAB ? 2021-09-10 10:03 ? 次閱讀

MathWorks信號處理系統(tǒng)設(shè)計(jì)往往涉及復(fù)雜的算法或者數(shù)據(jù)密集型應(yīng)用,因此通常具有較高的計(jì)算復(fù)雜度。構(gòu)建和仿真這些復(fù)雜系統(tǒng)可能相當(dāng)耗時(shí)。Simulink 中的數(shù)據(jù)流執(zhí)行域功能是減少模型仿真時(shí)間的方法之一。該功能可以對 Simulink 模型自動分區(qū),然后使用主機(jī)上閑置的 CPU 內(nèi)核并行執(zhí)行各分區(qū),從而加速仿真。本文說明如何通過三個簡單步驟來設(shè)置數(shù)據(jù)流。然后,我們用無線電模型作為示例來演示數(shù)據(jù)流的實(shí)際運(yùn)用,并比較啟用和未啟用數(shù)據(jù)流的模型仿真時(shí)間。此示例中使用的模型可以直接點(diǎn)擊文末“閱讀原文”下載

數(shù)據(jù)流使用的并行機(jī)制類型

為進(jìn)行模型分區(qū)和并行執(zhí)行,數(shù)據(jù)流會采用以下數(shù)據(jù)和任務(wù)并行機(jī)制組合之一(圖 1):

顯式并行機(jī)制通過不同算法處理不同數(shù)據(jù)集。

展開并行機(jī)制通過同一算法處理一個數(shù)據(jù)流的連續(xù)幀。

管道并行機(jī)制通過不同算法處理同一數(shù)據(jù)的不同部分。

設(shè)置數(shù)據(jù)流

要在 Simulink 模型中啟用數(shù)據(jù)流執(zhí)行域,首先要實(shí)現(xiàn)子系統(tǒng)。實(shí)現(xiàn)方式取決于您的具體設(shè)計(jì)進(jìn)度。如果您的設(shè)計(jì)剛剛開始,請使用 DSP System Toolbox 中的 Dataflow Subsystem 模塊(圖 2)。該模塊經(jīng)過預(yù)配置,可以直接使用。您只需將它拖到 Simulink 模型中,然后在其中填充算法組件。 如果您的設(shè)計(jì)模型已構(gòu)建完畢,請將表示要并行化的算法的模塊放在子系統(tǒng)中,并按如下方式設(shè)置數(shù)據(jù)流:

選擇您剛剛創(chuàng)建的子系統(tǒng)。

在屬性檢查器的“執(zhí)行”選項(xiàng)卡下,勾選設(shè)置執(zhí)行域復(fù)選框。

將域選項(xiàng)設(shè)置為數(shù)據(jù)流。

在子系統(tǒng)內(nèi)部,左下角的 》 圖標(biāo)表示子系統(tǒng)設(shè)置為數(shù)據(jù)流執(zhí)行域。數(shù)據(jù)流執(zhí)行域首先通過在單線程上運(yùn)行模型來分析模型,然后自動進(jìn)行子系統(tǒng)分區(qū)以用于多線程執(zhí)行。

數(shù)據(jù)流的實(shí)際運(yùn)用

該示例模型對無線電發(fā)射機(jī)和接收機(jī)進(jìn)行仿真。它包含數(shù)字上變頻器和下變頻器來調(diào)整信號頻率,并實(shí)現(xiàn)調(diào)制器和解調(diào)器(圖 3)。輸入是以 8 kHz 采樣的錄制語音。輸出是兩個頻譜分析儀和一個音頻接收端。

首先,我們測量在不啟用數(shù)據(jù)流的情況下仿真該模型所需的時(shí)間1。我們可以注釋掉輸出模塊,以便專注于仿真算法,而不受運(yùn)行示波器和音頻輸出所需的固定時(shí)長的限制。(1. 所有仿真都在 Windows 桌面計(jì)算機(jī)上運(yùn)行,該計(jì)算機(jī)采用 Intel Xeon CPU W-2133 @ 3.6 GHz 6 核 12 線程處理器。)我們使用 tic-toc 命令測量仿真時(shí)間:

modelname = ‘mono_radiomodel’;

tic;

simData = sim(modelname);

t = toc

運(yùn)行該模型的執(zhí)行時(shí)間為 3.67 秒。現(xiàn)在我們引入數(shù)據(jù)流。我們將表示算法的模塊放入子系統(tǒng)中,并將域設(shè)置為數(shù)據(jù)流(圖 4)。

助手建議的更改之一是添加延遲。當(dāng)數(shù)據(jù)流發(fā)現(xiàn)并行機(jī)制可能增大吞吐量時(shí),通常會向模型添加延遲。沿信號線添加的延遲用 z-n 標(biāo)簽表示。我們接受更改,并將啟用了數(shù)據(jù)流的模型保存為 mono_radiomodel_dataflow。然后,我們使用與之前相同的 tic-toc 命令來測量新子系統(tǒng)的執(zhí)行時(shí)間。

modelname = ‘mono_radiomodel_dataflow’;

tic;

simData2 = sim(modelname);

t_Dataflow = toc

啟用數(shù)據(jù)流后的執(zhí)行時(shí)間為 2.5 秒,比正常的單線程執(zhí)行速度快 1.7 倍。加速得益于編譯器優(yōu)化、模型設(shè)置更改和數(shù)據(jù)流添加的延遲。然而,該模型僅在單線程上執(zhí)行,加速并不顯著。這是因?yàn)榇蟛糠钟?jì)算負(fù)載都集中在上下變頻器模塊中。當(dāng)計(jì)算負(fù)載分散在整個模型中時(shí),數(shù)據(jù)流效果最佳,因?yàn)檫@為創(chuàng)建并行線程提供了更多機(jī)會。在下一節(jié)中,我們將擴(kuò)展模型,展示數(shù)據(jù)流的實(shí)現(xiàn)如何進(jìn)一步提高仿真性能。

處理大型模型

我們通過引入多通道音頻輸入信號來增大模型的計(jì)算復(fù)雜度。這會使需要處理的數(shù)據(jù)量倍增,也為數(shù)據(jù)流提供了更多優(yōu)化仿真性能的機(jī)會。圖 6 顯示經(jīng)過修改、采用立體聲音頻輸入的模型,運(yùn)行時(shí)間為 18.6 秒。通過啟用信號維度信息疊加,我們可以看到信號輸入確實(shí)有兩個音頻通道。

在啟用數(shù)據(jù)流并重新運(yùn)行模型后,我們觀察到模型在 5 個并發(fā)線程上運(yùn)行,執(zhí)行時(shí)間為 4.5 秒,幾乎實(shí)現(xiàn)了 4 倍加速(圖 7)。

使用數(shù)據(jù)流的多線程代碼生成數(shù)據(jù)流支持使用 Simulink Coder 和 Embedded Coder 的單核和多核 C/C++ 代碼生成。首先在 Simulink 模型的“求解器”窗格中啟用允許任務(wù)在目標(biāo)上并發(fā)執(zhí)行參數(shù),然后使用 Ctrl + B 生成代碼。為桌面目標(biāo)生成的代碼通過 OpenMP 實(shí)現(xiàn)多線程化。為 Embedded Coder 目標(biāo)生成的代碼通過 POSIX 實(shí)現(xiàn)多線程化。圖 8 顯示基于以上無線電模型生成的 OpenMP C 代碼,包括由數(shù)據(jù)流創(chuàng)建的并發(fā)任務(wù)。

數(shù)據(jù)流的限制

雖然數(shù)據(jù)流有助于加速大多數(shù)仿真,但它對有些模型可能并不適用,例如較小的模型、不太復(fù)雜的模型,或者計(jì)算負(fù)載集中在少數(shù)幾個模塊中的模型。在這些情況下,數(shù)據(jù)流實(shí)現(xiàn)的速度提升不會抵消在并行線程上同步和執(zhí)行模型所需的開銷。如無線電模型示例所示,當(dāng)計(jì)算負(fù)載在模型中均勻分布時(shí),數(shù)據(jù)流效果最佳,因?yàn)榫鶆蚍植嫉呢?fù)載意味著有更多機(jī)會進(jìn)行模型分區(qū)和并行執(zhí)行。就建模限制而言,從版本 2020b 開始,數(shù)據(jù)流不支持連續(xù)模塊、可變大小信號或虛擬 Simulink 總線的多線程仿真。

小結(jié)

通過數(shù)據(jù)流執(zhí)行域,您可以在 Simulink 模型中識別可以分布到多個線程中并行執(zhí)行的建模模式。這種方法可利用主機(jī) CPU 上閑置的處理能力,優(yōu)化吞吐量,并減少模型仿真時(shí)間。數(shù)據(jù)流執(zhí)行域最適合計(jì)算負(fù)載分散在整個模型中的情形(此時(shí)可引入并行機(jī)制),并且只能處理離散信號。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 仿真
    +關(guān)注

    關(guān)注

    50

    文章

    3976

    瀏覽量

    132992
  • 信號
    +關(guān)注

    關(guān)注

    11

    文章

    2751

    瀏覽量

    76224
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3036

    瀏覽量

    48389

原文標(biāo)題:加速 Simulink 模型中的信號處理算法仿真

文章出處:【微信號:MATLAB,微信公眾號:MATLAB】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    220v單管自激最簡單三個步驟是什么

    對于220V單管自激電路,雖然“最簡單三個步驟”可能因具體電路設(shè)計(jì)和應(yīng)用需求而有所不同,但我可以概括出一般性的、簡化的步驟,這些步驟旨在提供
    的頭像 發(fā)表于 09-18 11:28 ?120次閱讀

    快速確定升壓轉(zhuǎn)換器最大輸出電流的三個步驟

    電子發(fā)燒友網(wǎng)站提供《快速確定升壓轉(zhuǎn)換器最大輸出電流的三個步驟.pdf》資料免費(fèi)下載
    發(fā)表于 09-07 10:42 ?0次下載
    快速確定升壓轉(zhuǎn)換器最大輸出電流的<b class='flag-5'>三個</b><b class='flag-5'>步驟</b>

    統(tǒng)一日志數(shù)據(jù)流

    統(tǒng)一日志數(shù)據(jù)流圖 日志系統(tǒng)數(shù)據(jù)流圖 系統(tǒng)進(jìn)行日志收集的過程可以分為三個環(huán)節(jié): (1)日志收集和導(dǎo)入ElasticSearch (2)ElasticSearch進(jìn)行索引等處理 (3)可視化操作,查詢等
    的頭像 發(fā)表于 08-21 15:00 ?187次閱讀
    統(tǒng)一日志<b class='flag-5'>數(shù)據(jù)流</b>圖

    示波器電流探頭最簡單三個步驟是什么

    具有重要意義。下面介紹示波器電流探頭的三個簡單步驟步驟一:選擇合適的電流探頭 確定測量范圍 :首先,需要根據(jù)待測電路的電流大小選擇合適的電流探頭。電流探頭通常有不同的量程,如10A、100A、1000A等,選擇一
    的頭像 發(fā)表于 08-09 14:24 ?268次閱讀

    電源時(shí)序器最簡單三個步驟是什么

    電源時(shí)序器是一種用于控制多個電源設(shè)備按特定順序開啟和關(guān)閉的設(shè)備。它可以廣泛應(yīng)用于各種電子設(shè)備、舞臺音響、照明系統(tǒng)等領(lǐng)域。以下是電源時(shí)序器最簡單三個步驟的介紹: 連接電源時(shí)序器 在開始使用電源時(shí)序器
    的頭像 發(fā)表于 07-08 14:39 ?626次閱讀

    簡述使用波特五力模型的三個步驟

    企業(yè)了解行業(yè)的競爭環(huán)境,從而制定相應(yīng)的競爭策略。以下是使用波特五力模型的三個步驟。 第一步:識別行業(yè) 在使用波特五力模型之前,首先需要明確分析的行業(yè)范圍。行業(yè)的定義可以根據(jù)產(chǎn)品、服務(wù)、市場、地理區(qū)域等因素來確定。這一步的目的是確保分析的焦點(diǎn)集中,避免將不同行業(yè)的競爭力量混
    的頭像 發(fā)表于 07-05 14:34 ?332次閱讀

    建立神經(jīng)網(wǎng)絡(luò)模型的三個步驟

    建立神經(jīng)網(wǎng)絡(luò)模型是一復(fù)雜的過程,涉及到多個步驟和細(xì)節(jié)。以下是對建立神經(jīng)網(wǎng)絡(luò)模型的三個主要步驟的介紹: 第一步:數(shù)據(jù)準(zhǔn)備 1.1
    的頭像 發(fā)表于 07-02 11:20 ?391次閱讀

    變頻器快慢調(diào)速最簡單三個步驟

    調(diào)速的三個簡單步驟。 一、變頻器的基本原理 在了解變頻器快慢調(diào)速的步驟之前,我們首先需要了解變頻器的基本原理。變頻器是一種將工頻電源轉(zhuǎn)換為可調(diào)頻率電源的電氣設(shè)備,通過改變輸出頻率的大
    的頭像 發(fā)表于 06-17 15:17 ?1326次閱讀

    研控8線步進(jìn)電機(jī)最簡單三個步驟

    步進(jìn)電機(jī)是一種將電脈沖信號轉(zhuǎn)換為機(jī)械角位移的電機(jī),廣泛應(yīng)用于各種自動化設(shè)備和機(jī)器人中。研控8線步進(jìn)電機(jī)是一種常見的步進(jìn)電機(jī)類型,具有較高的精度和穩(wěn)定性。本文將詳細(xì)介紹研控8線步進(jìn)電機(jī)的三個簡單步驟
    的頭像 發(fā)表于 06-12 09:16 ?772次閱讀

    RISC-V的中斷處理 中斷操作三個步驟

    中斷操作三個步驟: 1、中斷初始化 2、trap處理 3、用戶中斷處理
    的頭像 發(fā)表于 05-20 16:38 ?812次閱讀

    stm32F429串口采用DMA方式發(fā)送,數(shù)據(jù)流使能失敗的原因?

    , ENABLE);//使能DMA while(DMA_GetCmdStatus(DMA2_Stream7) != ENABLE);// 等待DMA數(shù)據(jù)流有效 可以看到數(shù)據(jù)流未被正常使能。 可以看到出現(xiàn)兩錯誤標(biāo)志。 串口
    發(fā)表于 04-17 07:05

    設(shè)置AD9122發(fā)送一組實(shí)數(shù)的數(shù)據(jù)流,應(yīng)該怎樣設(shè)置寄存器呢?

    我想設(shè)置AD9122發(fā)送一組實(shí)數(shù)的數(shù)據(jù)流,(利用FPGA產(chǎn)生的10M載波信號)應(yīng)該怎樣設(shè)置寄存器呢? 我的想法是這樣的 1B->E4(旁路預(yù)調(diào)值,旁路反sinc-1濾波器,旁路
    發(fā)表于 12-19 07:37

    LED總愛被“燒掉”?用這三個方法,能讓它更“長壽”!

    LED總愛被“燒掉”?用這三個方法,能讓它更“長壽”!
    的頭像 發(fā)表于 11-23 09:08 ?576次閱讀

    變壓器維護(hù)的簡單步驟

    有計(jì)劃的維修或更換。緊急維修或更換的成本要高得多,并導(dǎo)致生產(chǎn)損失。 日常變壓器維護(hù)的簡單步驟 日常維護(hù)對于延長變壓器壽命至關(guān)重要,涉及一些基本步驟。 對于較小的封裝變壓器,定期清潔變壓器外殼對于防止灰塵和污垢積聚會阻礙
    的頭像 發(fā)表于 10-24 16:26 ?1791次閱讀

    TGAM數(shù)據(jù)流格式說明

    電子發(fā)燒友網(wǎng)站提供《TGAM數(shù)據(jù)流格式說明.pdf》資料免費(fèi)下載
    發(fā)表于 10-07 14:30 ?0次下載
    TGAM<b class='flag-5'>數(shù)據(jù)流</b>格式說明