從Dataflow領域(domain)可以看出Simulink模型中的建模型式,這些型式可以被分配到多個執行緒來平行地執行。這種方法利用主機CPU所提供的處理能力帶來的優勢,藉以優化吞吐量、縮短模擬時間。由於在運算工作被分散到整個模型時可以加入平行處理,Dataflow領域(domain)的效果最好。不過,這種方式僅適用於離散訊號。
訊號處理系統設計因為涉及了演算法或資料密集的應用,通常具備高度的運算複雜度,這些複雜系統的建立及模擬可能相當耗時。Simulink中的Dataflow領域(domain)功能提供了一種方式,可以縮短模型模擬時間。這項功能透過將Simulink模型自動地分割,並且使用電腦主機上的CPU核心平行地執行來加快模擬速度。
本文將說明如何以三個簡單的步驟來設置Dataflow。接著,以一個無線電模型為例來展示Dataflow的運作,並比較使用與未使用Dataflow進行模擬所花費時間的差異。
Dataflow使用的平行運算類型
為了要將模型分割並且平行地執行,Dataflow使用下列其中一種資料和任務平行(task parallelism)組合(圖1):
*外顯平行(explicit parallelism):透過不同演算法處理不同資料集。
*展開式平行(unfolding parallelism):以相同的演算法處理連續的資料流框架。
*管線式平行(pipelining parallelism):以不同的演算法處理相同資料的不同部位。
設置Dataflow
為了在Simulink模型中啟用Dataflow領域(domain),首先需要執行一個子系統,執行的方式取決於設計的進度。
如果設計流程才剛開始,可使用DSP System Toolbox(DSP系統工具箱)內的Dataflow Subsystem Block(圖2),這個模塊已預先被裝配完成,可以直接拿來使用,只需要將它拖曳到Simulink模型,並且以演算法元件來填充它。
圖2 : DSP系統工具箱模塊庫內的Dataflow子系統。 |
|
如果已經建立起設計模型,就可以把希望進行平行處理的演算法模塊放進子系統,並且依照以下步驟來設置Dataflow:
1.選擇剛剛建立的子系統。
2.在Property Inspector分類下Execution頁籤的Set execution domain選項打勾。
3.設定Dataflow為Domain。
在這個子系統裡面,左下角的>符號代表子系統領域(domain)已經被設定為Dataflow。
此Dataflow領域(domain)會先以單一執行緒(thread)執行模型來取得模型概況,接著自動分割子系統來進行多執行緒的執行。
Dataflow的運作
我們的範例模型模擬了一個無線電發射器和接收器,它包含了數位的上行與下行轉換器來調整訊號頻率,藉此實現一個調變器和解調器(圖3)。範例中的輸入為一段取樣頻率為8k Hz的演講錄音,輸出為兩個頻譜分析器及一個音頻接收器。
第一步,先來測量未啟動Dataflow狀態下模擬這個模型所花的時間[1]。將輸出模塊標註為關閉,可以專注於演算法模擬,不會受到執行示波器和音訊輸出所需的固定時間的影響。使用tic-toc指令來測量模擬時間。
現在加入Dataflow,會將代表演算法的模塊放入子系統,並且將領域(domain)調整為Dataflow(圖4)。
圖4 : 啟動了Dataflow的單一通道音訊輸入無線電模型。 |
|
Dataflow assistant功能列出了建議的模型設定變更(圖5)。
圖5 : Dataflow assistant列出的模型設定變更建議。 |
|
Dataflow assistant建議的其中一項變更為加入延遲。延遲通常在Dataflow辨識到平行處理的機會時被加到模型中來增加吞吐量。這些沿著訊號線加入的延遲以z-n 標籤來表示。
我們接受這些變更,並且將啟動了Dataflow的模型儲存為 familyRadioServiceExample_Dataflow。
接著,同前述一樣使用tic-toc指令來測量新子系統的執行時間。
啟動了Dataflow之後的執行時間為2.5秒,比正常單一執行緒的執行速度快了1.7倍,而速度加快是因為編譯器的優化、模型設置的變更、以及在模型中加入了延遲。
然而,模型僅以一個執行緒執行,加速的效果並不顯著,這是因為大部分的運算工作都集中在上行和下行轉換器模塊,當運算量延展到整個模型時,提供了更多機會來建立平行執行緒時,Dataflow在這時的表現最好。在下一個段落將延伸模型,示範如何更進一步地使用Dataflow來改善模擬表現。
較大模型的處理
我們加入一個多通道的音訊輸入訊號來增加模型的運算複雜度,這會將需要處理的資料量增加為兩倍,也給予Dataflow更多優化模擬表現的途徑。圖6繪製的模型已為變更為帶有立體音訊,執行該模型需要18.6秒。藉由啟用訊號維度資訊套疊,將訊號輸入設定為真的具有兩組音訊通道。
圖6 : 帶有一個立體聲輸入多通道聲音訊號的無線電模型。 |
|
完成Dataflow上的調整並且回到模型之後,發現執行一次跑在五個並行的執行緒的模擬花費時間為4.5秒—加快了幾乎四倍(圖7)。
圖7 : Dataflow assistant顯示模擬執行的延遲與執行緒數量。 |
|
Dataflow的限制
Dataflow可以協助加快大部分的模擬,不過可能還是無法適用於所有模型—比如較小、複雜度較低的模型、或者計算量集中於少數模塊的模型。
在這類情況,透過Dataflow達成的加速並不能夠補償以平行執行緒同步和執行模型所需要的開支。如同在無線電模型這個案例所見,Dataflow在運算量在模型中平均分散時的表現最好,因為平均分散的工作量為模型的各部分提供更多的平行執行機會。
(本文由鈦思科技提供;作者Akash Gopisetty任職於MathWorks公司)
參考資料
[1]所有模擬皆執行於裝載Intel Xeon CPU W-2133@ 3.6 GHz 6核心12執行緒處理器的Windows桌上型電腦。