多線程編程的挑戰(zhàn)
迄今,,處理器技術(shù)領(lǐng)域中的創(chuàng)新已經(jīng)使得計(jì)算機(jī)具備了工作于更高時(shí)鐘速率的中央處理器單元(CPU),。然而,隨著時(shí)鐘速率逼近其理論上的物理極限,,具有多個(gè)(而不是單個(gè))處理核的新型處理器正處于研發(fā)之中。利用這些新型多核處理器,,自動(dòng)化測(cè)試應(yīng)用利用并行編程技術(shù),,便可以達(dá)到最佳性能和最高吞吐量。Edward Lee博士-加州大學(xué)伯克利分校電氣與計(jì)算機(jī)工程系的杰出教授-這樣描述并行處理的技術(shù)優(yōu)勢(shì):“許多技術(shù)專家預(yù)言,,回應(yīng)摩爾定律的終結(jié)的將是日趨并行的計(jì)算機(jī)架構(gòu),。如果我們希望繼續(xù)提高計(jì)算性能,計(jì)算機(jī)程序必須能夠利用這種并行機(jī)制,。”
而且,,利用多核處理器的編程應(yīng)用是一個(gè)巨大的編程挑戰(zhàn),這是廣為接受的,。比爾蓋茨-微軟公司的締造者關(guān)于這一挑戰(zhàn)有這樣一段話:“要想充分利用并行工作的處理器的威力,,...軟件必須能夠處理并發(fā)性問題。但正如任何一位編寫過(guò)多線程代碼的開發(fā)者告訴你的那樣,,這是編程領(lǐng)域最艱巨的任務(wù)之一,。”
幸運(yùn)的是,LabVIEW為多核處理器提供了一個(gè)理想的編程環(huán)境,,因?yàn)樗鼮閯?chuàng)建并行算法提供了一個(gè)直觀的環(huán)境,,而且它可以動(dòng)態(tài)指派多個(gè)線程至一項(xiàng)給定的應(yīng)用。事實(shí)上,,利用多核處理器的自動(dòng)化測(cè)試應(yīng)用,,可以方便地被優(yōu)化以獲取最佳性能。而且,,PXIe模塊化儀器增強(qiáng)了這一技術(shù)優(yōu)勢(shì),,因?yàn)镻CIe總線使高數(shù)據(jù)傳輸速率成為可能。從多核處理器和PXIe儀器的兩個(gè)具體應(yīng)用是:多通道信號(hào)分析和線上處理(硬件在環(huán)),。在本文的后續(xù)部分,,我們將評(píng)估各種并行編程技術(shù),,并刻畫每項(xiàng)技術(shù)所帶來(lái)的性能優(yōu)勢(shì)。
實(shí)現(xiàn)并行測(cè)試算法
得益于并行處理的一項(xiàng)常見自動(dòng)化測(cè)試應(yīng)用(ATE),,便是多通道信號(hào)分析,。由于頻率分析是一項(xiàng)占有處理器較多的操作,通過(guò)并行化處理測(cè)試代碼使得每個(gè)通道的信號(hào)處理被分配至多個(gè)處理器核,,可以提高執(zhí)行速度,。從編程人員的角度來(lái)看,為獲得這一技術(shù)優(yōu)勢(shì),,所需的唯一改變便是僅僅重構(gòu)測(cè)試算法,。
為描述這一過(guò)程,我們將比較用于多通道頻率分析(傅立葉變換或FFT)的兩個(gè)算法的執(zhí)行時(shí)間,,它們分別位于一個(gè)高速數(shù)字化儀的兩個(gè)通道上,。在該測(cè)試中,我們使用PXIe-5122 14-位高速數(shù)字化儀的兩個(gè)通道,,以最高采樣率(100MS/s)采集信號(hào),。首先,我們這一操作在LabVIEW中的傳統(tǒng)的順序編程模型,。
圖1:利用順序執(zhí)行的LabVIEW代碼
在上述模塊框圖中,,兩個(gè)通道的頻率分析均在一個(gè)FFT快速VI中完成,它順序分析每個(gè)通道信號(hào),。雖然上述算法也可以在多核處理器中有效執(zhí)行,,但仍存在通過(guò)并行處理每個(gè)通道提高算法性能的可能。
如果我們剖析上述算法,,我們會(huì)發(fā)現(xiàn)完成FFT所需的時(shí)間要比從高速數(shù)字化儀采集數(shù)據(jù)長(zhǎng)得多,。通過(guò)每次獲取一個(gè)通道的數(shù)據(jù)并并行執(zhí)行兩次FFT,我們可以顯著降低處理時(shí)間,。下圖表示了一個(gè)采用并行方法的新的LabVIEW模塊框圖,。
圖2:利用并行執(zhí)行的LabVIEW代碼
如上面代碼所示,將順序獲取數(shù)字化儀的每個(gè)通道的數(shù)據(jù),。注意,,如果兩次數(shù)據(jù)獲取均來(lái)自不同的儀器,那么完全可以并行完成這些操作,。然而,,由于傅立葉變換占用大量的處理器時(shí)間,我們?nèi)钥梢詢H通過(guò)將信號(hào)處理并行化改善性能,。故而減少了總的執(zhí)行時(shí)間,。兩種實(shí)現(xiàn)的執(zhí)行時(shí)間如下所示:
圖3:順序算法與并行算法(時(shí)間)的執(zhí)行時(shí)間比較
如上圖所示,隨著數(shù)據(jù)塊大小(每次獲取的采樣數(shù))的增加,,通過(guò)并行處理節(jié)約的處理時(shí)間愈為顯著,。事實(shí)上,,對(duì)于更大的數(shù)據(jù)塊,并行算法實(shí)現(xiàn)近2倍的性能改進(jìn),。下圖描述了性能增長(zhǎng)的精確百分比隨采集數(shù)據(jù)塊大小(以采樣數(shù)為單位)的變化,。
圖4:并行算法帶來(lái)的性能增長(zhǎng)(百分比)
圖4顯示,當(dāng)數(shù)據(jù)塊大于1百萬(wàn)采樣(100Hz精度帶寬)時(shí),,并行方式實(shí)現(xiàn)80%或更高的性能增長(zhǎng),。
在多核處理器之上,我們可以方便地實(shí)現(xiàn)自動(dòng)化測(cè)試應(yīng)用的性能改進(jìn),,因?yàn)長(zhǎng)abVIEW動(dòng)態(tài)地分配每一個(gè)線程,。事實(shí)上,用戶不需要?jiǎng)?chuàng)建特殊的代碼以支持多線程,,而是通過(guò)最少的編程調(diào)整,,并行測(cè)試應(yīng)用便可以獲益于多核處理器。
配置定制的并行測(cè)試算法
將信號(hào)處理并行化的技術(shù)優(yōu)勢(shì)在于它支持LabVIEW在多個(gè)處理器核中劃分CPU的用度,。在下圖中,,我們描述了CPU處理算法每一部分的次序。
圖5:CPU的處理執(zhí)行
如圖所示,,LabVIEW能夠并行處理許多采集數(shù)據(jù),從而節(jié)省了執(zhí)行時(shí)間,。對(duì)于LabVIEW,,并行處理的需求之一便是拷貝(或克隆)每個(gè)信號(hào)處理子例程。缺省情況下,,LabVIEW的許多信號(hào)處理算法配置為“重入執(zhí)行”,。這就意味著LabVIEW將動(dòng)態(tài)分配每個(gè)子例程的一個(gè)不同實(shí)例,包括獨(dú)立線程和存儲(chǔ)空間,。因而,,定制子例程必須被配置為工作于重入方式。這可以通過(guò)LabVIEW中一個(gè)簡(jiǎn)單的配置步驟完成,。欲設(shè)置這一屬性,,選擇文件菜單下VI屬性并選中“執(zhí)行”欄;然后,,選中“重入執(zhí)行”標(biāo)記(如下所示),。
圖6:在LabVIEW中配置重入執(zhí)行屬性
通過(guò)上圖所示的簡(jiǎn)單步驟,我們可以并行執(zhí)行多個(gè)定制子例程,,就如同標(biāo)準(zhǔn)LabVIEW分析函數(shù)那樣,。因此,在多核處理器之上,,自動(dòng)化測(cè)試應(yīng)用通過(guò)簡(jiǎn)單的編程技術(shù)就可以實(shí)現(xiàn)性能的改進(jìn),。
優(yōu)化硬件在環(huán)應(yīng)用
得益于并行信號(hào)處理技術(shù)的又一個(gè)應(yīng)用便是為同時(shí)輸入與輸出使用多個(gè)儀器,。一般,這些應(yīng)用被稱為硬件在環(huán)(HIL)或在線處理應(yīng)用,。在此場(chǎng)景下,,高速數(shù)字化儀或高速數(shù)字I/O模塊用于信號(hào)采集,其軟件執(zhí)行數(shù)字信號(hào)處理算法,。最后,,通過(guò)另一個(gè)模塊化儀器生成結(jié)果。其典型模塊框圖如下所示:
圖7:在線信號(hào)處理(HIL)模塊框圖
常見HIL應(yīng)用包括在線數(shù)字信號(hào)處理(濾波,、插值等),、傳感器仿真和定制組件模擬。在這篇特別準(zhǔn)備的白皮書中,,我們將探究用于在在線數(shù)字信號(hào)處理應(yīng)用中獲得最佳吞吐量的技術(shù),。
通常可以使用兩種基本的編程結(jié)構(gòu),,單循環(huán)結(jié)構(gòu)和帶有隊(duì)列的管道式多循環(huán)結(jié)構(gòu),。單循環(huán)結(jié)構(gòu)實(shí)現(xiàn)簡(jiǎn)單,對(duì)于小數(shù)據(jù)塊具有低時(shí)延,。相比之下,,多循環(huán)結(jié)構(gòu)能夠支持高得多的吞吐量,因?yàn)樗鼈兡軌蚋玫乩枚嗪薈PU,。
對(duì)于傳統(tǒng)的單循環(huán)方式,,一個(gè)高速數(shù)字化儀的讀函數(shù)、信號(hào)處理算法和高速數(shù)字I/O順次組織,。如下面模塊框圖所示,,這些子例程中的每一個(gè)都必須按照LabVIEW數(shù)據(jù)流編程模型確定的順序執(zhí)行。
圖8:在循環(huán)中依單循環(huán)方式進(jìn)行處理
單循環(huán)結(jié)構(gòu)受限于幾個(gè)因素,。由于順序執(zhí)行每一環(huán)節(jié),,處理器在處理數(shù)據(jù)的同時(shí)受限無(wú)法執(zhí)行儀器I/O。在這種方式下,,由于處理器一次只能執(zhí)行一個(gè)函數(shù),,所以無(wú)法有效利用多核CPU。因而,,在應(yīng)用中僅使用了多核CPU的一個(gè)核,。雖然單循環(huán)結(jié)構(gòu)足以處理較低的采集速率,但是要想得到較高的數(shù)據(jù)吞吐量仍需要采用多循環(huán)方式,。
多循環(huán)架構(gòu)使用隊(duì)列結(jié)構(gòu)實(shí)現(xiàn)while循環(huán)間的數(shù)據(jù)傳遞,。下面,我們展開論述在while循環(huán)間采用一個(gè)隊(duì)列結(jié)構(gòu)進(jìn)行數(shù)據(jù)流編程的概念,。
圖9:隊(duì)列結(jié)構(gòu)支持多循環(huán)間的數(shù)據(jù)共享
如圖所示,,隊(duì)列支持多個(gè)循環(huán)間的數(shù)據(jù)共享,。上圖所表示的是典型的所謂生產(chǎn)者/消費(fèi)者循環(huán)結(jié)構(gòu)。這里,,在一個(gè)循環(huán)中,,一個(gè)高速數(shù)字化儀持續(xù)采集數(shù)據(jù),并在每次迭代中將新的數(shù)據(jù)集傳遞至FIFO隊(duì)列,。消費(fèi)者循環(huán)僅需監(jiān)視隊(duì)列的狀態(tài),,當(dāng)每個(gè)數(shù)據(jù)集可用時(shí)將其寫入磁盤。采用隊(duì)列的意義在于這兩個(gè)循環(huán)均可相互獨(dú)立執(zhí)行,。在上例中,,高速數(shù)字化儀可以持續(xù)采集數(shù)據(jù),即使這些數(shù)據(jù)寫入磁盤時(shí)存在一定的延遲,。與此同時(shí),,其它的采樣僅需存儲(chǔ)在FIFO隊(duì)列中。通常,,生產(chǎn)者/消費(fèi)者管道式方法,,通過(guò)支持更有效的處理器利用率,使更高的數(shù)據(jù)吞吐量成為可能,。這一技術(shù)優(yōu)勢(shì)在多核處理器中甚至更為顯著,,因?yàn)長(zhǎng)abVIEW可以動(dòng)態(tài)分配CPU線程至每個(gè)處理器核。
對(duì)于一項(xiàng)在線信號(hào)處理應(yīng)用,,我們可以使用三個(gè)獨(dú)立的while循環(huán)和兩個(gè)隊(duì)列結(jié)構(gòu),,實(shí)現(xiàn)其間的數(shù)據(jù)傳遞。在此應(yīng)用場(chǎng)景下,,一個(gè)循環(huán)將從一臺(tái)儀器采集數(shù)據(jù),一個(gè)循環(huán)將專門執(zhí)行信號(hào)處理,,而第三個(gè)循環(huán)將數(shù)據(jù)寫入到另一臺(tái)儀器,。描述這一方式的LabVIEW模塊框圖如下所示:
圖10:具有多個(gè)循環(huán)和排隊(duì)結(jié)構(gòu)的管道式信號(hào)處理
在上圖中,最上面的循環(huán)是一個(gè)生產(chǎn)者循環(huán),,它從一個(gè)高速數(shù)字化儀采集數(shù)據(jù),,并將其傳遞至第一個(gè)隊(duì)列結(jié)構(gòu)(FIFO)。中間的循環(huán)同時(shí)作為生產(chǎn)者和消費(fèi)者工作,。每次迭代中,,它從隊(duì)列結(jié)構(gòu)中卸載(消費(fèi))若干個(gè)數(shù)據(jù)集,并以管道的方式獨(dú)立對(duì)其進(jìn)行處理,。這種管道方式通過(guò)支持高達(dá)四個(gè)數(shù)據(jù)集的獨(dú)立處理,,實(shí)現(xiàn)了多核處理器環(huán)境下的性能改進(jìn)。注意,,中間的循環(huán)同時(shí)也作為一個(gè)生產(chǎn)者工作,,將處理后的數(shù)據(jù)傳遞至第二個(gè)隊(duì)列結(jié)構(gòu),。最后,最下面的循環(huán)將處理后的數(shù)據(jù)寫入至高速數(shù)字I/O模塊,。
并行處理算法改善了多核CPU的處理器利用率,。事實(shí)上,總吞吐量有賴于兩個(gè)因素,,處理器利用率和總線傳輸速度,。通常,CPU和數(shù)據(jù)總線在處理大數(shù)據(jù)塊時(shí)工作效率最高,。而且,,我們可以進(jìn)一步使用具有更快傳輸速度的PXIe儀器,縮減數(shù)據(jù)傳輸時(shí)間,。因而,,我們通過(guò)依采集數(shù)據(jù)大小(以采樣數(shù)計(jì))變化的采樣率描述最大吞吐量,如下所示:
圖11:多循環(huán)結(jié)構(gòu)與單循環(huán)結(jié)構(gòu)的吞吐量比較
該圖中所描述的所有標(biāo)定都是圍繞16-位采樣進(jìn)行的,。此外,,所采用的信號(hào)處理算法為一個(gè)截至頻率為采樣率的0.45倍的7階巴特沃茲低通濾波器。如數(shù)據(jù)顯示,,4階段管道式(多循環(huán))方式支持最大數(shù)據(jù)吞吐量,。注意,2階段信號(hào)處理方式獲得了比單循環(huán)方式(順序)更好的性能,,但其CPU的利用不及4階段方式有效,。上面所列的采樣率為PXIe-5122高速數(shù)字化儀和PXIe-6537高速數(shù)字I/O模塊的輸入和輸出的最大采樣率。注意,,當(dāng)采樣率為20MS/s時(shí),,應(yīng)用總線的輸入和輸出的數(shù)據(jù)傳輸率均為40MB/s,所以總的總線帶寬為80MB/s,。
應(yīng)當(dāng)考慮的是,,管道式處理方式在輸入與輸出之間確實(shí)引入了時(shí)延。所引入的時(shí)延取決于幾個(gè)因素,,包括數(shù)據(jù)塊的大小和采樣率,。下表比較了單循環(huán)和4階段多循環(huán)架構(gòu)中實(shí)測(cè)所得的時(shí)延隨數(shù)據(jù)塊大小和最大采樣率的變化情況。
表1:?jiǎn)窝h(huán)的時(shí)延標(biāo)定
表2:4階段管道的時(shí)延標(biāo)定
正如人們可以預(yù)知的,,當(dāng)CPU的使用率接近100%時(shí)時(shí)延也隨之增加,。這一點(diǎn)在采樣率為20MS/s的4階段管道范例中尤為明顯。相比之下,,任何一個(gè)單循環(huán)范例的CPU使用率都幾乎不會(huì)超過(guò)50%,。
本文小結(jié)
基于PC的儀器系統(tǒng),如PXI和PXIe模塊化儀器,從多核處理器技術(shù)的進(jìn)步和數(shù)據(jù)總線速度的提高中獲益匪淺,。當(dāng)新型CPU通過(guò)添加多個(gè)處理核改進(jìn)性能時(shí),,并行或管道式處理結(jié)構(gòu)成為最大化CPU效率所必需。幸運(yùn)的是,,LabVIEW通過(guò)將處理任務(wù)動(dòng)態(tài)分配至單個(gè)處理核,;為這一編程挑戰(zhàn)提供了一種上佳的解決方案。如上面數(shù)據(jù)顯示,,將LabVIEW算法結(jié)構(gòu)化以利用并行處理,,可以帶來(lái)顯著的性能提高。