新聞中心

        EEPW首頁 > 測試測量 > 設計應用 > LabVIEW編譯程序設計知識介紹

        LabVIEW編譯程序設計知識介紹

        作者: 時間:2012-02-21 來源:網絡 收藏

        是一個復雜的話題,即使對內行的軟件工程師來說也要考慮很多專業知識。

        本文引用地址:http://www.104case.com/article/194452.htm

          NI 軟件是一種多規范的圖形化編程環境,含有多種概念,包括數據流,面向對象,以及事件驅動編程。也是跨越多種平臺的,能夠很好地用于多種操作系統(OSs),芯片組,嵌入式設備,以及現場可編程門陣列(FPGAs)。程序是一種精密的系統,在過去的20年中具有令人矚目的發展。探索NI公司的LabVIEW程序的處理過程以及近來編譯程序的創新。

          LabVIEW編譯程序處理過程

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

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

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

          圖1顯示了一個簡單VI的最初DFIR。當LabVIEW首次為VI創建一個DFIR時,這是一種G代碼的直接翻譯,DFIR圖表中的節點具有像G 代碼中節點一樣的一對一的對應性。隨著編譯程序的執行,DFIR節點有可能被移動,部分分離,或者是增加,然而編譯程序將仍然保留原有的特性,例如 LabVIEW代碼中固有的并行特性。

          

        查看一個簡單VI 的初始 DFIR 圖表 www.elecfans.com

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

          DFIR能夠為LabVIEW編譯程序提供兩種可觀的優勢:

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

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

          DFIR分解與優化

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

          

        2.png

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

          

        Trim Whitespace.vi 結構圖的定義 www.elecfans.com

          圖 3. 上面是Trim Whitespace.vi 結構圖的定義

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

          

          圖 4. subVI內聯到調用程序,導致一個 DFIR圖表等價于該 G代碼

          

        5.png

          圖 5. 一次執行產生優化的 DFIR圖表


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 红河县| 深水埗区| 山阳县| 平阴县| 乌兰察布市| 涡阳县| 乌鲁木齐市| 维西| 芜湖县| 鲁甸县| 信阳市| 临猗县| 上蔡县| 巴塘县| 平塘县| 剑阁县| 江城| 高陵县| SHOW| 阿合奇县| 甘德县| 宜君县| 团风县| 阳信县| 慈溪市| 甘孜| 罗山县| 内黄县| 依安县| 佛冈县| 太仓市| 噶尔县| 大渡口区| 昔阳县| 斗六市| 广灵县| 句容市| 会宁县| 通城县| 新兴县| 合水县|