並行編程架構(指令流水、進程、線程、多核,Pipe and Filter)

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

關鍵詞一:指令流水html


關鍵詞二:多進程算法

關鍵詞三:多線程數據庫

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

在體系架構中,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。緩存

典型的應用案例:網絡

Unix編程:一個程序的輸出linked to(connected)另外一個程序的輸入;多線程

DSP6678:一種數據流(data stream)的架構,每一個core(內核)能夠做爲一個Filter,而共享內存等能夠做爲Pipes。這是DSP多核編程的一種經常使用架構。架構

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


基於這樣的架構(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實質上都與此思想相近。


參考文獻:

1. 操做系統之哲學原理

2. http://www.dossier-andreas.net/software_architecture/pipe_and_filter.html

相關文章
相關標籤/搜索