王黎明,鄭 健,呂 琳,楊飛海
(中國(guó)人民解放軍91388部隊(duì) 廣東 湛江 524022)
海軍戰(zhàn)略戰(zhàn)術(shù)演練與評(píng)估需要參與艦艇大量的顯控臺(tái)視頻信息,包括雷達(dá)、武器發(fā)控、聲納、水聲對(duì)抗等標(biāo)準(zhǔn)顯控臺(tái)視頻信息。傳統(tǒng)用攝像機(jī)攝錄的方法有下列弊?。?)錄取視頻畫面抖動(dòng)嚴(yán)重且清晰度不高,無(wú)法準(zhǔn)確識(shí)別視頻圖像包含的數(shù)據(jù)信息;2)演練時(shí)戰(zhàn)位點(diǎn)除戰(zhàn)位人員外往往聚集了許多專家與技術(shù)人員,攝錄位置不能保證。視頻錄取系統(tǒng)在海軍多次的試驗(yàn)與演練中發(fā)揮了重大的作用,為評(píng)估專家與數(shù)據(jù)處理人員提供確實(shí)可信的數(shù)據(jù),以供分析和決策。但是現(xiàn)有單套視頻錄取設(shè)備最多只能同時(shí)錄取兩個(gè)顯控臺(tái)視頻,如要進(jìn)行擴(kuò)展則需要極高的系統(tǒng)硬件配置要求。多核并行計(jì)算技術(shù)的出現(xiàn)解決了這一難題,減少了硬件改造成本,也避免了同一戰(zhàn)位需建設(shè)多套設(shè)備的情況,從而減少占用艦艇空間過(guò)多的問(wèn)題。
并行計(jì)算系統(tǒng)是由硬件和軟件組成的統(tǒng)一整體,理想的系統(tǒng)應(yīng)該是無(wú)瓶頸、結(jié)構(gòu)支持應(yīng)用且應(yīng)用適應(yīng)結(jié)構(gòu)的均衡系統(tǒng)[1]。并行計(jì)算的基本思想并不復(fù)雜,它將一個(gè)復(fù)雜的工作任務(wù)進(jìn)行分解,然后在多核CPU上同時(shí)執(zhí)行這些分解后的任務(wù)。CPU多核化要想真正發(fā)揮效益,必須依賴于精心設(shè)計(jì)的軟件,軟件本身必須具備將工作任務(wù)劃分為可并行執(zhí)行的子任務(wù)的能力,在操作系統(tǒng)的支持下,將這些任務(wù)分配給計(jì)算機(jī)所配備的多個(gè)CPU處理核心并行執(zhí)行,并將結(jié)果進(jìn)行組合得到最終結(jié)果。之所以要研究并行計(jì)算,其目的是獲得更好的性能。一個(gè)軟件系統(tǒng)的性能,通常使用響應(yīng)速度和吞吐率來(lái)進(jìn)行衡量。響應(yīng)速度是指用戶向軟件系統(tǒng)提交一個(gè)任務(wù),軟件系統(tǒng)處理完畢將結(jié)果響應(yīng)給用戶所花費(fèi)的時(shí)間。吞吐率指單位時(shí)間間隔內(nèi)軟件系統(tǒng)最多處理的任務(wù)數(shù)。并行計(jì)算的優(yōu)勢(shì)在于它可以提升多任務(wù)環(huán)境下系統(tǒng)的響應(yīng)速度和吞吐率。實(shí)際應(yīng)用中純粹的并行算法很少,一般的算法包含并行與串行兩部分。常常使用Amdahl加速比定律來(lái)衡量一個(gè)算法的并行能力[2]:
其中 S是加速比,也稱加速系數(shù)(Speedup Factory),p表示處理器數(shù)量或核心數(shù),f表示串行算法所占比例。顯然,處理器或處理器核心越多,或串行算法比例越小,加速系數(shù)就越大,性能提升越明顯。因此實(shí)際應(yīng)用中,硬件方面應(yīng)盡可能選擇核心數(shù)多的CPU,軟件部分應(yīng)盡可能減少程序中的串行算法,提高并行能力。
目前艦艇上標(biāo)準(zhǔn)顯控臺(tái)視頻輸入輸出一般采用RGB/RGBHV接口,符合通用軍工標(biāo)準(zhǔn),因此研制的視頻錄取系統(tǒng)也采用這種視頻標(biāo)準(zhǔn),具有高度通用性[3]。
視頻錄取系統(tǒng)硬件包括視頻錄取機(jī)、高清視頻采集卡、視頻分配器以及標(biāo)準(zhǔn)的RGBHV視頻線纜。視頻錄取機(jī)是采用Intel Q8400四核CPU的工業(yè)級(jí)便攜式工控機(jī),存儲(chǔ)設(shè)備采用RAID0+RAID1的磁盤冗余策略,工控機(jī)內(nèi)置4塊符合軍用總線標(biāo)準(zhǔn)[4]的PCI-E高清視頻采集卡。系統(tǒng)可以同時(shí)錄取4路1280×1024分辨率的高清視頻。錄取設(shè)備與艦艇顯控臺(tái)對(duì)接的示意圖如圖1所示。
圖1 視頻錄取設(shè)備與艦艇顯控臺(tái)對(duì)接示意圖Fig.1 Connection diagram of video-capturing device to display-console
RGBHV標(biāo)準(zhǔn)視頻線一端連接標(biāo)準(zhǔn)顯控臺(tái)機(jī)柜視頻輸出端,另一端接視頻分配器輸入端;再用一條視頻線分別接視頻分配器輸出端和顯控臺(tái)顯示器;最后用一條視頻線分別接視頻分配器另一輸出端和視頻錄取機(jī)的一塊視頻采集卡。其他3路的連接方法與之類似。
2.2.1 基于多線程并發(fā)計(jì)算的視頻錄取系統(tǒng)的弊端
現(xiàn)有的視頻錄取系統(tǒng)軟件是基于多線程并發(fā)計(jì)算技術(shù)開發(fā)的,沒有考慮當(dāng)前多核CPU硬件環(huán)境帶來(lái)的優(yōu)勢(shì),程序完全交于操作系統(tǒng)分時(shí)調(diào)度。操作系統(tǒng)按照時(shí)間片將CPU分配給各個(gè)線程,在處理當(dāng)前線程時(shí)其他線程處于等待狀態(tài),對(duì)于多核CPU環(huán)境來(lái)說(shuō)利用效率太低,而且多路視頻同時(shí)采集時(shí)會(huì)出現(xiàn)各線程執(zhí)行效率不均衡的現(xiàn)象。另外,程序中控制代碼復(fù)雜,容易出現(xiàn)多線程編程中常見的線程同步異常以及死鎖現(xiàn)象[5]。
2.2.2 關(guān)鍵技術(shù)
為克服舊有系統(tǒng)的弊病,這里用到了微軟.NET4.0中的并行任務(wù)庫(kù)(Task Parallel Library,TPL),它是.NET 4.0 為開發(fā)者提供的一組類,位于System.Threading和System.Threading.Tasks這兩個(gè)命名空間下,駐留在3個(gè).NET核心程序集mscorlib.dll、System.dll和 System.Core.dll里。它將并行程序抽象級(jí)別從“線程(Thread)”提升到“任務(wù)”級(jí)別[6]。
軟件編寫使用C#語(yǔ)言,在Microsoft Visual Studio 2010環(huán)境下進(jìn)行開發(fā)。以下是部分關(guān)鍵代碼。
1)并行執(zhí)行任務(wù)代碼,用于并行調(diào)用4路視頻錄取代碼。
//引用兩個(gè)命名空間
Using System.Threading;
Using System.Threading.Tasks;
//......
//獲取當(dāng)前系統(tǒng)CPU核心數(shù)
Int numberofCPU=System.Environment.ProcessorCount;
//視頻采集代碼分配到不同的CPU核心,并行調(diào)用視頻錄取代碼
Parallel.For(0,numberofCPU,i=>{
Int iCurrUsedNo;//視頻采集卡卡號(hào)
VideoCapture(iCurrUsedNo);}
);
//......
2)視頻錄?。╒ideoCapture)關(guān)鍵代碼。其中,部分函數(shù)引用視頻采集卡公司提供的二次開發(fā)包,視頻編碼可設(shè)置為H.264或MPEG4算法。
//......
//打開指定的視頻采集卡
hBoard=okOpenBoard(iCurrUsedNo);
//指定文件路徑以及編碼格式
filename1=fnametmp+".AVI,MPG4" ;
//獲取當(dāng)前系統(tǒng)時(shí)間,精確到毫秒
systime=CurrentTime();
//將時(shí)間信息疊加到當(dāng)前幀
okSetTextTo hBoard,BUFFER, rcRect, lfLogFont, textmode,systime, 23;
//將當(dāng)前幀存儲(chǔ)到指定的文件
okSaveImageFile hBoard,filename1,imageseq,BUFFER,0, 1;
//以上代碼循環(huán),直到“停止”操作
//......
視頻錄取過(guò)程是一個(gè)持續(xù)的過(guò)程,可以在程序中設(shè)置測(cè)試點(diǎn)來(lái)測(cè)試響應(yīng)速度。吞吐率在這里是指單位時(shí)間內(nèi)處理的視頻數(shù)據(jù)流,也就是視頻的幀率。舊有系統(tǒng)的程序是基于多線程并發(fā)計(jì)算的,并發(fā)的概念與并行有著本質(zhì)不同,不是真正意義上的“并行”。將這兩種不同算法的軟件安裝在該視頻錄取機(jī)上,按圖1布置連接視頻信號(hào)源,分別運(yùn)行這兩種程序,同時(shí)錄取4路1280×1024分辨率的視頻,在程序中設(shè)置測(cè)試點(diǎn)記錄響應(yīng)時(shí)間,并在過(guò)程中某一時(shí)刻查看CPU使用情況,結(jié)束后查看錄取的視頻文件幀率。并行計(jì)算性能測(cè)試結(jié)果如表1所示,視頻文件幀率對(duì)比結(jié)果如表2所示。
表1 并行計(jì)算性能Tab.1 Parallel computing performance
表2 兩種算法錄取結(jié)束后文件幀率的對(duì)比Tab.2 File frame rate comparison by two different algorithms
從表1看出,基于新算法的系統(tǒng)體現(xiàn)了真正意義上較好的并行計(jì)算性能。
從表2可知,基于舊算法系統(tǒng)錄取的各視頻文件之間幀率相差很大,體現(xiàn)了多線程分時(shí)調(diào)度的弊病,如要克服這種不均衡需要編制復(fù)雜的控制代碼,而這又會(huì)造成不小的系統(tǒng)開銷和增加線程同步異常的機(jī)率?;谛滤惴ǖ南到y(tǒng)是將不同通道的視頻采集代碼分配到不同的CPU核心上,錄取的視頻文件幀率基本上接近,體現(xiàn)了系統(tǒng)良好的均衡控制能力。
在實(shí)驗(yàn)過(guò)程中某時(shí)刻查看CPU使用情況時(shí),發(fā)現(xiàn)基于舊算法系統(tǒng)的CPU核心使用率達(dá)到78%,CPU 4個(gè)核心的使用記錄曲線極不平衡,如果系統(tǒng)要增加其他功能或運(yùn)行其他進(jìn)程有可能會(huì)造成阻塞,因此系統(tǒng)可擴(kuò)展性差;而基于新算法系統(tǒng)的CPU使用率僅為46%,且各核心使用記錄曲線非常均衡,系統(tǒng)仍有較大的可擴(kuò)展性。
筆者介紹了一種基于并行計(jì)算技術(shù)的艦艇標(biāo)準(zhǔn)顯控臺(tái)視頻錄取系統(tǒng),重點(diǎn)敘述了該系統(tǒng)軟件關(guān)鍵部分的技術(shù)及實(shí)現(xiàn)。通過(guò)與舊有基于多線程并發(fā)計(jì)算技術(shù)的視頻錄取系統(tǒng)的性能對(duì)比,基于新算法系統(tǒng)錄取的視頻數(shù)據(jù)幀率均衡穩(wěn)定,系統(tǒng)響應(yīng)快,CPU使用率低,系統(tǒng)總體開銷小,系統(tǒng)可擴(kuò)展性強(qiáng)。該系統(tǒng)可以根據(jù)艦艇任務(wù)的實(shí)際需求,擴(kuò)展視頻采集卡數(shù)量,增加其他功能(如作戰(zhàn)系統(tǒng)總線數(shù)據(jù)錄取等),從而實(shí)現(xiàn)更高的系統(tǒng)集成度和使用效率。
[1]楊曉東,陸松,牟勝梅.并行計(jì)算機(jī)體系結(jié)構(gòu)技術(shù)與分析[M].北京:科學(xué)出版社,2009.
[2]孫敏.基于并行結(jié)構(gòu)骨架的并行程序設(shè)計(jì)環(huán)境研究與實(shí)現(xiàn)[D].天津:天津大學(xué),2008.
[3]陳正捷,藺宏江,陳志昊.國(guó)外軍用計(jì)算機(jī)數(shù)據(jù)交換技術(shù)的發(fā)展[J].兵工自動(dòng)化,2010,29(4):25-29.CHEN Zheng-jie, LIN Hong-jiang, CHEN Zhi-hao.Development of foreign military computer data exchange technology[J].Ordnance Industry Automation, 2010, 29(4): 25-29.
[4]唐慧.基于PCI總線多路圖像采集卡的研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2006.
[5]Michaelis M著.C#本質(zhì)論[M].周靖,譯.北京:人民郵電出版社,2008.
[6]金旭亮.NET 4.0面向?qū)ο舐劇獞?yīng)用篇[M].北京:電子工業(yè)出版社,2010.