天天看點

并行程式設計架構(指令流水、程序、線程、多核,Pipe and Filter)

最近在進行DSP軟體優化時,查閱文獻,看到了幾種并行機制,下面予以總結:

關鍵詞一:指令流水

并行程式設計架構(指令流水、程式、線程、多核,Pipe and Filter)

關鍵詞二:多程序

關鍵詞三:多線程

關鍵詞四:多核(多處理器、超線程結構、多核結構、多核超線程架構)

在體系架構中,Pipe and Filter(管道過濾器架構),如下圖所示,所有的Filter并行執行,Pump 或者Producer是data sources,可以是靜态的文本檔案,也可以是任何輸入(比如鍵盤、網絡資料等等); Sink 或者 Consumer是資料目标(data,target),可以是另一個文本檔案,或者是資料庫、計算機螢幕等。Pipe即是connector,在filter之間傳遞資料,應當具有data buffer(資料緩存)的作用,以比對适應filter的處理速度;而Filter則是一個個處理單元,它接收來自pipe的資料,并進行處理(filter

or transform),Filter可以有N多個input Pipes,也可以由N多個output Pipes。

并行程式設計架構(指令流水、程式、線程、多核,Pipe and Filter)

典型的應用案例:

Unix程式設計:一個程式的輸出linked to(connected)另一個程式的輸入;

DSP6678:一種資料流(data stream)的架構,每個core(核心)可以作為一個Filter,而共享記憶體等可以作為Pipes。這是DSP多核程式設計的一種常用架構。

編譯器:連貫的過濾器進行詞彙分析、文法分析、語義分析和代碼生成等。

并行程式設計架構(指令流水、程式、線程、多核,Pipe and Filter)
并行程式設計架構(指令流水、程式、線程、多核,Pipe and Filter)

基于這樣的架構(software architecture),所有的filter都可以在不同的線程(thread)、coroutines或者不同的機器上執行,可以是軟體上或者是硬體上(FPGA)實作。

缺點:

1. 很明顯,當Filter在等待它接收到所有的data并開始執行前,Pipe的有可能data buffer 溢出或者發生死鎖。

2. 管道的資料類型可能會使得過濾器需要進行解析,這将slow down processing speed。如果建構了不同資料類型的管道,則該管道将不能連結到任何的過濾器上。

這裡主要對Pipe/Filter架構進行總結。因為上面幾種都比較簡單,也最常見,是以就沒有進行總結。

最後,講一個在DSP應用開發中的采用此架構進行開發的一個案例:在進行ARM到DSP通過以太網口傳圖處理的一個開發中,ARM負責從USB攝像頭讀取圖像資料,然後通過以太網口發送至DSP處理。為了保證明時性處理,在驗證了DSP算法處理的速度之後,發現如果采用ARM發送來一幀,DSP處理一幀,DSP處理完,ARM再進行下一幀采集和發送這樣的串行機制,實時處理幾乎是不現實的。最後采用了多級PingPong操作,ARM和DSP管道緩存均設定為5個圖像大小,在DSP處理的時候,ARM依然進行圖像采集和處理,直到DSP

管道Buffer 滿為止。進行過這樣的處理,最後實作了整個嵌入式開發的實時性處理。其實就是類似作業系統中著名的生産者-消費者模型。今天總結的Pipe/Filter實質上都與此思想相近。