《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > LabVIEW編譯程序設(shè)計(jì)
LabVIEW編譯程序設(shè)計(jì)
摘要: 編譯程序設(shè)計(jì)是一個(gè)復(fù)雜的話題,即使對(duì)內(nèi)行的軟件工程師來(lái)說(shuō)也要考慮很多專業(yè)知識(shí),。NILabVIEW軟件是一種多規(guī)范的圖形化編程環(huán)境,含有多種概念,,包括數(shù)據(jù)流,面向?qū)ο?,以及事件?qū)動(dòng)編程,。
Abstract:
Key words :

  編譯程序設(shè)計(jì)是一個(gè)復(fù)雜的話題,即使對(duì)內(nèi)行的軟件工程師來(lái)說(shuō)也要考慮很多專業(yè)知識(shí),。

  NI LabVIEW軟件是一種多規(guī)范的圖形化編程環(huán)境,含有多種概念,,包括數(shù)據(jù)流,,面向?qū)ο螅约笆录?qū)動(dòng)編程,。LabVIEW也是跨越多種平臺(tái)的,,能夠很好地用于多種操作系統(tǒng)(OSs),芯片組,,嵌入式設(shè)備,,以及現(xiàn)場(chǎng)可編程門(mén)陣列(FPGAs)。LabVIEW編譯程序是一種精密的系統(tǒng),,在過(guò)去的20年中具有令人矚目的發(fā)展,。探索NI公司的LabVIEW編譯程序的處理過(guò)程以及近來(lái)編譯程序的創(chuàng)新。

  LabVIEW編譯程序處理過(guò)程

  首先一個(gè)VI的編譯是類的擴(kuò)展,,主要負(fù)責(zé)將隱含的類解析為適于終端輸出與檢查句法錯(cuò)誤的類型,。在類擴(kuò)展之后,VI從編輯模型轉(zhuǎn)化為可以被編譯程序使用的數(shù)據(jù)流中間表示(DFIR)圖表,。編譯程序執(zhí)行幾種變換,,例如在DFIR圖表分解過(guò)程中的死碼刪除,優(yōu)化,,并為代碼生成做好準(zhǔn)備,。DFIR接下來(lái)被轉(zhuǎn)化成底層的虛擬機(jī)(LLVM)中間表示(IR),,有關(guān)IR的一系列掃描被運(yùn)行,以利于更進(jìn)一步的優(yōu)化與底層化——最終——變?yōu)闄C(jī)器碼,。

  DFIR提供一種高級(jí)的中間表示

  DFIR是一種分級(jí)的,,結(jié)構(gòu)圖代碼的,基于圖表的IR,。類似于G代碼,,DFIR包含很多具有端點(diǎn)的節(jié)點(diǎn),能夠與其它端點(diǎn)相連,。一些節(jié)點(diǎn),,例如框圖,含有圖表,,這些圖表也可以依此類推地包含其它節(jié)點(diǎn),。

  圖1顯示了一個(gè)簡(jiǎn)單VI的最初DFIR。當(dāng)LabVIEW首次為VI創(chuàng)建一個(gè)DFIR時(shí),,這是一種G代碼的直接翻譯,,DFIR圖表中的節(jié)點(diǎn)具有像G 代碼中節(jié)點(diǎn)一樣的一對(duì)一的對(duì)應(yīng)性。隨著編譯程序的執(zhí)行,,DFIR節(jié)點(diǎn)有可能被移動(dòng),,部分分離,或者是增加,,然而編譯程序?qū)⑷匀槐A粼械奶匦?,例?LabVIEW代碼中固有的并行特性。

  

 
查看一個(gè)簡(jiǎn)單VI 的初始 DFIR 圖表 www.elecfans.com

  圖 1. 查看一個(gè)簡(jiǎn)單VI 的初始 DFIR 圖表

  DFIR能夠?yàn)長(zhǎng)abVIEW編譯程序提供兩種可觀的優(yōu)勢(shì):

  1. DFIR將編輯程序從編譯程序的表示中分離——在DFIR出現(xiàn)以前,,LabVIEW具有一個(gè)單獨(dú)的VI表示,,由編輯程序和編譯程序共享。這樣在編譯過(guò)程中,,阻止了編譯程序修改表示,,也會(huì)使引入編譯程序優(yōu)化很困難。DFIR引入了一系列的優(yōu)化與分解措施,,能夠極大地提高LabVIEW代碼的性能,,僅要求結(jié)構(gòu)圖節(jié)點(diǎn)與連線被斷開(kāi)并可以移動(dòng)。

  2. DFIR作為多個(gè)編譯程序的前段與后段的公用連接點(diǎn)——今天,,LabVIEW能處理很多明顯不同的任務(wù),。類似地,LabVIEW也為用戶提供了多種算法模式,,例如LabVIEW MathScript,,C一體化,仿真圖表,,以及狀態(tài)表(statecharts),。DFIR提供了一種常用IR,,它由前端生成而由后端使用,使不同組合的重新使用更加便利,。

  DFIR分解與優(yōu)化

  一旦進(jìn)入DFIR,,VI運(yùn)行一系列的分解變換,來(lái)縮減或標(biāo)準(zhǔn)化DFIR圖表,。在DFIR圖表徹底分解后,,DFIR優(yōu)化掃描開(kāi)始。有超過(guò)30種分解與優(yōu)化能夠提高LabVIEW代碼的性能,。請(qǐng)仔細(xì)查看圖2和3顯示的簡(jiǎn)單VI,,它被稱為T(mén)rim Whitespace VI(Trim Whitespace.vi),來(lái)自vi.lib,。

  

 
2.png

  圖 2. 這是任意 DFIR分解前的 VI

  

 
Trim Whitespace.vi 結(jié)構(gòu)圖的定義 www.elecfans.com

  圖 3. 上面是Trim Whitespace.vi 結(jié)構(gòu)圖的定義

  首先,,Trim Whitespace.vi被內(nèi)聯(lián)到調(diào)用VI,如圖4所示?,F(xiàn)在,,不可達(dá)代碼與死碼刪除運(yùn)算可以簡(jiǎn)化代碼。第一個(gè)條件結(jié)構(gòu)將總是執(zhí)行相同的分支,,因?yàn)檩斎氲氖且粋€(gè)恒定值,。因此,其余的分支可以同整個(gè)第二個(gè)條件結(jié)構(gòu)一起移走,,因?yàn)樗鼈儚牟粓?zhí)行,。循環(huán)不變式代碼移動(dòng)將匹配模式基元(Match Pattern primitive)移出循環(huán)框,確保其只被執(zhí)行一次,,如圖5所示。

  

 

  圖 4. subVI內(nèi)聯(lián)到調(diào)用程序,導(dǎo)致一個(gè) DFIR圖表等價(jià)于該 G代碼

  

 
5.png

  圖 5. 一次執(zhí)行產(chǎn)生優(yōu)化的 DFIR圖表

  DFIR后端變換

  在DFIR圖表被分解與優(yōu)化后,,后端變換開(kāi)始執(zhí)行,。這些變換評(píng)估并注解DFIR圖表,為最終將DFIR圖表降低為L(zhǎng)LVM IR做好準(zhǔn)備,。聚叢程序負(fù)責(zé)將節(jié)點(diǎn)歸為簇,,這些簇可以并行運(yùn)行。替代程序識(shí)別何時(shí)分配的數(shù)據(jù)可以重新使用,,何時(shí)必須制作副本,。在替代程序運(yùn)行后,分配程序預(yù)留出VI執(zhí)行所需的內(nèi)存空間,。最后,,編碼發(fā)生器負(fù)責(zé)將DFIR圖表轉(zhuǎn)化為可執(zhí)行的機(jī)器指令用于目標(biāo)處理器。

  LLVM提供一種底層的中間表示

  LLVM是一種多用途,,高性能,,源代碼開(kāi)放的構(gòu)架,,原來(lái)是伊利諾斯州州立大學(xué)的作為研究項(xiàng)目而發(fā)明的。LLVM因?yàn)槠潇`活性,,簡(jiǎn)潔的API以及不受許可的限制,,被廣泛用于學(xué)術(shù)研究與工業(yè)生產(chǎn)。在LabVIEW 2010版本,,LabVIEW編碼生成器使用LLVM來(lái)生成目標(biāo)機(jī)器碼,。在從DFIR圖表創(chuàng)建編碼流后,LabVIEW訪問(wèn)每個(gè)指令并創(chuàng)建一個(gè)等價(jià)的 LLVM表示,。軟件會(huì)激活多種優(yōu)化掃描,,最終,LLVM準(zhǔn)時(shí)制(JIT)構(gòu)架在內(nèi)存中創(chuàng)建可執(zhí)行的機(jī)器指令?,F(xiàn)在LabVIEW可以使用LLVM來(lái)執(zhí)行指令綜合,,跳變線程,聚合標(biāo)量替代(scalar replacement of aggregates),,條件擴(kuò)展,,尾端調(diào)用刪除,循環(huán)不變代碼移出,,死碼刪除以及循環(huán)展開(kāi),。

  DFIR與LLVM協(xié)同工作

  DFIR是高級(jí)的IR具有并行性,而LLVM是底層IR,,具有目標(biāo)機(jī)器特性的認(rèn)知,,二者協(xié)同工作以優(yōu)化開(kāi)發(fā)者為處理器結(jié)構(gòu)而編寫(xiě)的LabVIEW代碼,它們能夠在處理器上被執(zhí)行,。

  – Chris Wood

  Chris Wood是NI公司LabVIEW方面的傳感器軟件工程師,。他擁有德克薩斯A&M大學(xué)計(jì)算機(jī)工程專業(yè)的學(xué)士學(xué)位。

  – Craig Smith

  Craig Smith是NI公司的首席軟件工程師,。他擁有德克薩斯A&M大學(xué)計(jì)算機(jī)科學(xué)專業(yè)的學(xué)士與碩士學(xué)位,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。