最近在進行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