• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      彈藥任務管控軟件性能優(yōu)化方法與實現(xiàn)

      2023-09-15 01:20:58鄧傳斌
      彈箭與制導學報 2023年4期
      關鍵詞:編譯器代碼軟件

      李 維,王 瑞,鄧傳斌

      (1 西安交通工程學院中興通信學院,陜西 西安 710300;2 西安現(xiàn)代控制技術研究所,陜西 西安 710065;3 中興通訊公司,陜西 西安 710119)

      0 引言

      隨著智能彈藥武器系統(tǒng)的信息化、網(wǎng)絡化、智能化發(fā)展,尤其是巡飛彈、蜂群導彈等高度智能化武器的出現(xiàn),彈藥武器的功能呈現(xiàn)出向多樣化發(fā)展的趨勢。巡飛彈的偵察打擊一體,蜂群導彈的多彈協(xié)同、路徑規(guī)劃等復雜功能的實現(xiàn)對任務管控系統(tǒng)提出了更高的要求,也使得任務管控系統(tǒng)的軟件規(guī)模、運算量、功能復雜度等指標均快速提升。在武器系統(tǒng)功耗、成本和體積等因素的制約下,任務管控系統(tǒng)多采用嵌入式微處理器作為其主運算平臺,對程序運行的空間和時間要求更為苛刻,通常需要對嵌入式軟件進行性能優(yōu)化,以滿足系統(tǒng)應用的性能需求。軟件性能優(yōu)化按實現(xiàn)方式可分為算法優(yōu)化和編譯優(yōu)化[1]。算法優(yōu)化依賴于特定的業(yè)務邏輯,需要優(yōu)化人員掌握特定的業(yè)務知識,泛化能力較弱,而編譯優(yōu)化是較為通用的技術,泛化能力強、可規(guī)模推廣,因此編譯優(yōu)化是嵌入式軟件優(yōu)化方法研究熱點,產(chǎn)生了循環(huán)展開、寄存器分配、函數(shù)內斂等[2]大量優(yōu)化成果,例如,廣泛使用的GCC(GNU compiler collection)編譯器V9.0.1版本就具有459個優(yōu)化序列[3]。為降低編譯器使用難度,默認提供了-O1、-O2、-O3 和-OS優(yōu)化等級,它們包含常規(guī)的編譯優(yōu)化組合[4],然而優(yōu)化組合的選取往往取決于待編譯的代碼特征,相同的組合對于不同的代碼所表現(xiàn)出來的優(yōu)化效果往往不同,默認的優(yōu)化等級無法完美的發(fā)揮編譯器的優(yōu)化能力。因此,近幾年基于運行環(huán)境的反饋式優(yōu)化成為軟件性能優(yōu)化的研究熱點。

      Ashouri等[5]使用機器學習算法進行編譯優(yōu)化序列的選擇,首先在線下使用一系列靜態(tài)特征或動態(tài)特征表征源程序,構造訓練集進行模型訓練,然后使用訓練出的模型進行測試環(huán)境的編譯優(yōu)化,由于訓練集和測試集特征很難符合獨立同分布,導致模型泛化誤差較大,工程應用效果有限。Chen等[6]使用遺傳算法尋找組合最優(yōu)解,此方法由Plotnikov等[7]在TACT(tool for automatic compiler tuning)中實現(xiàn)。陸平靜等[8]使用模擬退火算法尋找最優(yōu)解,Cormen等[9]使用蟻群算法進行編譯優(yōu)化,但在實踐過程中發(fā)現(xiàn)該算法很難快速收斂,并容易陷入局部最優(yōu)解,因此出現(xiàn)了大量改良的方法,這些改良方法主要圍繞尋找全局最優(yōu)搜索算法展開,最具有代表性的是OpenTuner,該開源工具組合利用差分進化算法、粒子群優(yōu)化算法、banbit變異技術對GCC編譯參數(shù)進行交叉、變異組合,最終通過適用度函數(shù)度量每一次組合參數(shù)的優(yōu)劣程度,每次保留最優(yōu)的組合,經(jīng)過N次的迭代得到最優(yōu)解。OpenTuner在準確率和召回率方面的表現(xiàn)都是當前最優(yōu)的工具,并在軟件工程中得到廣泛使用。

      編譯優(yōu)化的效果取決于編譯器獲取代碼上下文信息的豐富程度,為充分挖掘編譯優(yōu)化序列的優(yōu)化效果,文中重點分析智能彈藥庫任務管控軟件編譯優(yōu)化序列生效的時機,嘗試將每項編譯優(yōu)化的效果發(fā)揮到極致,提出了將整個軟件工程的多個編譯單元整合成一個編譯單元的Unity編譯方法,然后再結合OpenTuner訓練出編譯優(yōu)化序列組合。具體方法為分析編譯優(yōu)化技術生效時機、編譯信息對優(yōu)化效果的影響,進而提出Unity編譯優(yōu)化思路。

      1 編譯優(yōu)化過程

      如圖1所示[10],編譯過程也就是將文本內容和格式按照一定的規(guī)則進行等價轉換的過程,其中圖1中右半部分展示了代碼優(yōu)化過程中編譯器采用優(yōu)化序列 對待編譯程序的優(yōu)化過程[11]。優(yōu)化過程分為過程內優(yōu)化和過程間優(yōu)化[10],過程內優(yōu)化即為一個函數(shù)內部的優(yōu)化。過程間優(yōu)化處理的是整個程序,它將信息從調用者傳遞到被調用者,或者反向傳送,比如過程內斂(inline),就是把一個過程調用替換為被調用過程的過程體,該技術需要獲取被調用者的實現(xiàn)信息,因此,如果被調用者與調用者歸屬于不同的編譯單元或調用者無法獲取被調用者的實現(xiàn),編譯器就無法實現(xiàn)過程內斂,內斂優(yōu)化的效果就會失效。如果能夠將軟件的不同編譯單元合并成一個編譯單元那么編譯器就可以看到編譯對象的完整信息,編譯器數(shù)據(jù)流分析、別名分析等技術更加準確,進而增加編譯優(yōu)化效果。接下來分析Unity編譯實現(xiàn)的可能性和方法。

      圖1 編譯優(yōu)化過程Fig.1 Compilation optimization process

      2 Unity編譯

      Unity編譯是將軟件中的多個編譯單元匯聚成一個編譯單元,以匯聚后的編譯單元進行編譯優(yōu)化的過程,Unity編譯的形式化可表示為:

      (1)

      式中:xi為原軟件的第i個編譯單元;x為將n個xi編譯單元匯聚后的代碼。原編譯優(yōu)化過程為:

      (2)

      式中passj為具體的編譯優(yōu)化技術,j=1,2,…,k。

      從以上表達式中可以得知原基于多編譯單元的編譯優(yōu)化過程,需要在文件之間傳遞控制流和數(shù)據(jù)流等信息,這些信息可能由于編譯單元彼此之間的不可見性(往往通過架構分層降低復雜度,通過每層獨立編譯成庫,實現(xiàn)物理解耦,最后將庫鏈接成可執(zhí)行文件),導致編譯技術無法充分發(fā)揮作用。如果能夠在不破壞代碼原有物理結構的情況下,將代碼信息全工程可見,必然會提高代碼優(yōu)化技術可參考的信息量,提升代碼優(yōu)化效果?;谝陨显O想引入Unity編譯后,編譯優(yōu)化過程為:

      (3)

      代碼編譯的所有信息可在上下文中顯式獲取。以下為Unity編譯的實現(xiàn)的關鍵過程:

      1) 以編譯單元為單位,進行預處理,保證信息完整;

      2) 以軟件獨立功能為單位,對預處理后的編譯單元進行匯聚展開。

      2.1 預處理

      預處理是編譯的初始階段,主要負責將編譯單元依賴信息以文本的形式進行擴充,依賴信息包括頭文件、預處理宏。其中頭文件a.h存放宏定義和函數(shù)聲明,a.c文件存放函數(shù)的定義,sum函數(shù)使用頭文件定義的宏abs。

      根據(jù)編譯器GCC的命令格式,使用gcc-E a.c-o a.i命令對編譯單元a.c進行預處理得到a.i文件,同時將sum 函數(shù)中的abs宏進行文本替換。

      2.2 匯聚展開

      隨著軟件復雜度的增加,模塊化、微服務化拆分的思想可降低實現(xiàn)域復雜度,隨之產(chǎn)生了正交設計、SOLID等原則[12]。這些設計方法要求軟件按照功能進行拆分,提倡小函數(shù)、小文件,因此,一個軟件工程往往包含成千上萬個編譯單元。為提升編譯器的優(yōu)化效果,需要將多個編譯單元匯聚成一個編譯單元。但現(xiàn)代編程語言規(guī)定在同一邏輯塊中有一處而且只能有唯一一處變量和函數(shù)的定義,對于大型程序進行匯聚可能出現(xiàn)命名沖突的問題,如合并前 a.c和b.c 中的兩個變量populationNum和getPopulationNum為文件作用域,在a.c和b.c獨立編譯時兩個變量彼此隔離,不會產(chǎn)生沖突。

      但是是當a.c和b.c合并成文件d.c后,合并populationNum和getPoputionNum變量在d.c中存在命名沖突,最終編譯失敗。

      為保證合并后的標識符不存在重復,以預處理之后.i文件為單位,保證命名全局唯一。

      通過以上的預處理和編譯單元匯聚保證編譯信息的完整性,從而可以發(fā)揮編譯優(yōu)化序列的優(yōu)化效果。接下來將Unity方法與OpenTuner相結合,利用OpenTuner先進的多目標優(yōu)化技術對軟件進行性能優(yōu)化訓練。

      3 系統(tǒng)框架

      彈藥任務管理軟件的開發(fā)和部署是通過交叉編譯器完成,即在PC機上開發(fā)和編譯,而在彈藥裝備上運行,因此,優(yōu)化系統(tǒng)主要在PC宿主機上完成,選用目前業(yè)界最先進的反饋式程序調諧器OpenTuner完成。OpenTuner用于構建領域特定的多目標程序自動調諧程序,其內部的一個關鍵功能是同時使用各種不同的搜索技術。為了能夠自動對軟件進行性能優(yōu)化,我們在OpenTuner的基礎上加入代碼匯聚功能,將注入OpenTuner系統(tǒng)的程序能夠自動的實現(xiàn)Unity擴展,在此基礎上進行組合編譯優(yōu)化,系統(tǒng)框架圖如圖2所示。該系統(tǒng)由代碼匯聚、搜索、測量和數(shù)據(jù)庫系統(tǒng)組成,代碼匯聚系統(tǒng)實現(xiàn)代碼匯聚并解決命名沖突問題。OpenTuner支持搜索技術的定制化,用戶可通過配置管理器更改配置從而修改搜索和測量方法,默認支持模式搜索、遺傳算法等搜索技術,對應不同的搜索空間和測量要求。該管理器還包括與訓練精度直接對應的參數(shù),實現(xiàn)不同訓練精度的配置。

      圖2 系統(tǒng)框架Fig.2 System framework

      改良后的OpenTuner目錄結構如圖3所示。

      圖3 OpenTuner代碼結構Fig.3 OpenTuner code structure

      其使用方式比較簡單,只需要將待優(yōu)化的源代碼放入./examples/unity/app目錄下,運行該目錄下的gccflags.py腳本即可開始優(yōu)化訓練,該腳本自動從GCC配置中獲取優(yōu)化序列,優(yōu)化序列分為開關、標量和向量3種類型,將3種類型按照GA、PSO、差分變異等算法進行并行訓練,然后使用AUCBandit算法實現(xiàn)以上訓練結果的組合,減少搜索范圍、削減搜索空間,提升問題收斂速度。優(yōu)化后的可運行產(chǎn)物可在./opentuner目錄下獲取。

      4 性能評估

      4.1 實施效果

      首先使用mbedtls驗證Unity編譯優(yōu)化的效果。mbedtls是對TLS和SSL協(xié)議實現(xiàn)的加密算法庫,廣泛應用于軍工等嵌入式系統(tǒng)設備,是一種常用的SSL加密算法庫。由于彈藥任務管理軟件的控制對象對性能要求十分嚴格,再加上真實打靶的驗證成本過高,因此在qemu上模擬 ARM vexpress-a9裝備環(huán)境,并使用GCC9.0.1作為編譯工具鏈,選擇-O2編譯產(chǎn)物作為比較基準,使用OpenTuner分別與Unity編譯、非Unity編譯相組合進行優(yōu)化訓練,提升mbedtls庫中AES-GCM算法的加密速率,效果對比數(shù)據(jù)如表1所示。

      表1 優(yōu)化性能對比Table 1 Comparison of optimization performance

      從以上數(shù)據(jù)中可以看出,雖然-O3選項打開了更多的優(yōu)化序列,編譯時間更長,但優(yōu)化后的代碼膨脹率更高,編譯產(chǎn)物的運行cache命中率降低(HitM數(shù)增加),導致-O3優(yōu)化產(chǎn)物的加密速率并不比-O2好。使用OpenTuner結合Unity和非Unity編譯進行優(yōu)化,編譯產(chǎn)物的加密速率都比-O2優(yōu)化性能好。文中提出的Unity編譯方法編譯出的軟件性能最優(yōu),比基準提升76.03%,同時由于Unity編譯可以降低編譯器的鏈接時間,因此編譯耗時最低,降低15.13%,并且沒有造成版本膨脹,對硬件沒有額外的要求,實現(xiàn)了僅僅通過軟件升級即可提升彈藥系統(tǒng)的性能,提高系統(tǒng)反應靈敏度,因此,可以廣泛部署到現(xiàn)有的裝備中。

      4.2 性能對比

      使用Unity、OpenTuner和TACT對不同功能的代碼模塊CBench、PolyBench和MiBench進行優(yōu)化訓練,訓練迭代次數(shù)為400,以-O2編譯選項為基準,優(yōu)化對比見圖4。

      圖4 訓練效果對比Fig.4 Comparison of training effect

      從圖4中可以看出,由于OpenTuner使用了多種優(yōu)化算法的組合,OpenTuner優(yōu)化性能優(yōu)于TACT。符合測試預期。由于編譯器可以從編譯對象中獲取更多的優(yōu)化信息,因此Unity編譯優(yōu)于OpenTuner優(yōu)化效果,比基準平均高出20%的加速比。

      由于OpenTuner使用多種啟發(fā)式算法進行組合,加快了訓練收斂速度。使用OpenTuner與Unity編譯結合對CBench、PolyBench和MiBench進行訓練發(fā)現(xiàn)平均訓練次數(shù)為400迭代后即可收斂,即編譯產(chǎn)物的性能不再有明顯提升,如圖5所示。

      圖5 Unity編譯訓練收斂速度Fig.5 Convergence speed of Unity compilation training

      接下來使用OpenTuner與非Unity編譯結合對以上代碼進行訓練,訓練收斂速度見圖6,從圖中可以看出訓練收斂迭代次數(shù)為500,明顯慢于Unity編譯訓練速度。圖中箱體的上邊沿和下邊沿的跨度表示每一百次訓練結果中軟件性能的波動范圍,從圖5和圖6的箱體跨度對比中可以看,Unity編譯訓練出的每組軟件性能波動較小,符合穩(wěn)定收斂系統(tǒng)的特征,編譯信息的利用更充分。

      圖6 常規(guī)編譯訓練收斂速度Fig.6 Convergence speed of general compilation training

      從軟件工程成本上來看,訓練速度提升能夠極大降低軟件成本,提升項目研制速度。僅考慮mbedtls編譯時長開銷就可以壓縮25%的時間成本,使用編譯時長向訓練時長折算數(shù)據(jù)如表2所示,其中,編譯時間等于編譯時間乘訓練迭代次數(shù)。

      表2 訓練時長對比Table 2 Comparison of training duration

      5 結論

      文中面向智能彈藥任務管控系統(tǒng)的嵌入式軟件特點和運行環(huán)境開展軟件編譯性能優(yōu)化方法研究,定義了Unity編譯過程和實現(xiàn)方法,并將該方法與OpenTuner相結合,實驗結果表明該方法相比OpenTuner優(yōu)化效果更好。由于編譯器自身也有可能存在bug,過多的編譯優(yōu)化序列增加了觸發(fā)編譯器bug的風險,因此需要對訓練出的編譯優(yōu)化序列進行壓縮,但當前對編譯優(yōu)化序列壓縮的自動化程度不高,并且在編譯優(yōu)化序列壓縮方面的研究較少。因此,在不影響優(yōu)化效果的前提下,對編譯序列進行自動壓縮是下一步研究的重點。

      猜你喜歡
      編譯器代碼軟件
      禪宗軟件
      英語文摘(2021年10期)2021-11-22 08:02:26
      基于相異編譯器的安全計算機平臺交叉編譯環(huán)境設計
      軟件對對碰
      創(chuàng)世代碼
      動漫星空(2018年11期)2018-10-26 02:24:02
      創(chuàng)世代碼
      動漫星空(2018年2期)2018-10-26 02:11:00
      創(chuàng)世代碼
      動漫星空(2018年9期)2018-10-26 01:16:48
      創(chuàng)世代碼
      動漫星空(2018年5期)2018-10-26 01:15:02
      談軟件的破解與保護
      精品(2015年9期)2015-01-23 01:36:01
      通用NC代碼編譯器的設計與實現(xiàn)
      編譯器無關性編碼在微控制器中的優(yōu)勢
      雷州市| 水城县| 高阳县| 招远市| 汶上县| 娄烦县| 岳阳县| 宿州市| 门源| 琼海市| 英吉沙县| 延寿县| 宁陵县| 贵阳市| 甘德县| 安达市| 宝兴县| 武功县| 成安县| 青浦区| 慈利县| 罗平县| 巩留县| 五台县| 罗源县| 阜阳市| 佛冈县| 开封市| 平远县| 永昌县| 合水县| 昌宁县| 霸州市| 贵州省| 都兰县| 和政县| 旺苍县| 仙居县| 通辽市| 和田县| 壤塘县|