《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 測試測量 > 設(shè)計應(yīng)用 > LabVIEW 編譯器深層解析
LabVIEW 編譯器深層解析
摘要: NILabVIEW軟件是一種多規(guī)范的圖形化編程環(huán)境,含有多種概念,包括數(shù)據(jù)流,面向?qū)ο螅约笆录?qū)動編程。LabVIEW也是跨越多種平臺的,能夠很好地用于多種操作系統(tǒng)(OSs),芯片組,嵌入式設(shè)備,以及現(xiàn)場可編程門陣列(FPGAs)。LabVIEW編譯程序是一種精密的系統(tǒng),在過去的20年中具有令人矚目的發(fā)展。探索NI公司的LabVIEW編譯程序的處理過程以及近來編譯程序的創(chuàng)新。
關(guān)鍵詞: 虛擬儀器 LabView 編譯器 DFIR
Abstract:
Key words :

  目錄

1. LabVIEW編譯程序處理過程
2. DFIR提供一種高級的中間表示
3. DFIR分解與優(yōu)化
4. DFIR后端變換
5. LLVM提供一種底層的中間表示
6. DFIR與LLVM協(xié)同工作

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

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

  LabVIEW編譯程序處理過程

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

  DFIR提供一種高級的中間表示

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

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

查看一個簡單VI 的初始 DFIR 圖表

圖 1. 查看一個簡單VI 的初始 DFIR 圖表

  DFIR能夠為LabVIEW編譯程序提供兩種可觀的優(yōu)勢:

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

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

  DFIR分解與優(yōu)化

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

這是任意 DFIR分解前的 VI

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

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

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

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

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

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

 

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

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

  DFIR后端變換

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

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

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

 

  DFIR與LLVM協(xié)同工作

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

  – Chris Wood

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

   – Craig Smith

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

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 91精品国产高清久久久久久 | 加勒比一本大道香蕉在线视频 | 欧美一区二区三区在线可观看 | 天天干狠狠 | 狠狠色噜狠狠狠狠色综合久 | 能在线观看的一区二区三区 | 一级女性全黄生活片免费 | 亚洲αv | 国产伦精品一区二区免费 | 免费看黄网 | 99re视频 | 日韩伦理在线播放 | 深夜影院老司机69影院 | 国产成人精品怡红院 | 国产视频97 | 在线观看的黄网 | 国产亚洲人成网站在线观看不卡 | 一区二区三区免费在线视频 | 免费国产黄网站在线观看 | 国产日韩欧美亚洲综合首页 | 亚洲乱码一二三四区国产 | 多人伦交性欧美精品欧 | 中国毛片视频 | 中国黄色一级视频 | 日韩美女在线观看 | 亚洲精品tv久久久久久久久久 | 一级aaa毛片 | 欧美xxxxx性开放 | 免费黄色小网站 | 一区二区中文字幕 | 久久网站免费 | 看真人视频一一级毛片 | 中文字幕第九页 | 视频在线a | 欧美精品成人 | 久久99毛片免费观看不卡 | 免费观看黄色 | 日日碰夜夜操 | 国产精品13页 | 久操视频免费看 | 男人吃奶吃奶啪啪gif |