乾貨|智慧編譯優化框架TACT

中興開發者社群發表於2017-12-27

點選上方“中興開發者社群”,關注我們

每天讀一篇一線開發者原創好文

640?wx_fmt=png&wxfrom=5&wx_lazy=1


編譯連結,是軟體開發中必不可少的環節,由於技術較底層而不被一般使用者知悉。作業系統產品部推出智慧編譯優化框架TACT(Tool for Automatic Compiler Tuning),從編譯和自動化測試角度為優化程式效能提供了一個很好的解決方案,致力於軟體質量內建。

 

 

智慧編譯優化框架TACT,源於開源專案,是一套用於程式編譯和在異構環境中執行的工具,使用遺傳演算法自動調整編譯器引數來優化程式。簡單的說,TACT通過使用遺傳演算法,在編譯連結的時候排列組合所有的編譯引數,編譯完成後對程式進行一系列效能相關的自動化測試,通過測試對比自動找到效能最優的編譯引數組合。


TACT使用場景

通過自動獲得編譯連結引數的最優組合來實現效能提升,也可以減小二進位制檔案的體積及佔用記憶體的大小。

 

l 對程式的執行引數進行智慧組合測試,獲得其執行引數的最優組合。

例如大型計算任務的多執行緒並行處理中,可利用該框架自動對並行的執行緒數目自動進行調整,達到計算效能提升的最大化。

 

使用TACT無須修改原始碼,對源程式所使用的語言及編譯器無限制,Java/C/C++等語言編譯的程式都可使用該框架來進行調優,可以加入專案的自動化測試中。

 

TACT安裝環境

TACT主要由Ruby語言編寫,所以需要Ruby翻譯器v1.9.1及以上,以及rubygems、rubytree程式。框架依賴simple-xlsx庫產生測試結果,其依賴fast_xs、rubyzip庫檔案。若還需要對結果進行二維分析影像繪製,則還需要安裝gnuplot程式(sudo apt-get install gnuplot)。


TACT使用模式

TACT可以通過Host machine連線多個測試板執行並行執行,在這種模式下,TACT將在主機上執行並行編譯,在目標板上執行執行測試(編譯和執行可以並行進行)。如圖所示:

0?wx_fmt=png

通過測試板使用TACT原理圖

 

TACT主要通過一系列配置檔案來控制其編譯、引數組合以及優化效果。配置中可以選擇對程式效能或者程式體積進行優化;也可以預設部分編譯引數,只針對這部分引數進行自動調整優化;在對遺傳演算法瞭解比較深入的情況下,還可以對遺傳演算法的部分引數進行調優,加速自動調優的過程。



TACT使用例項

例項:TACT應用於嵌入式作業系統的SSL/TLS 庫,對其加密解密演算法的執行效能優化


庫名:mbed。

原始碼檔案:mbedtls-developmen.zip。

交叉編譯器:arm_eabi_gcc4.8.2_glibc2.18.0/bin/arm-unknown-linux-gnueabi-gcc

下載庫:library/libmbed*.so*

測試程式:programs/test/benchmark

 

執行./benchmark aes_gcm。

測試程式提升之前的AES-GCM加密演算法的速度:

  AES-GCM-128:       5064 Kb/s,          0 cycles/byte

 

通過TACT測試執行之後,得到xlsx格式的報告

0?wx_fmt=png

   

報告中有多個編譯引數組合測試結果,此處為顯示方便,只擷取了一種編譯引數組合測試結果。可以看到速率提升至6873 Kb/s,提升約37%。

該框架可以同時執行多個測試用例,mean(第3行)是取多個測試用例的均值,此例子中只有一個測試用例(第2行)。

從例項可以看到TACT優化效果明顯,但目前TACT的配置還稍複雜,作業系統產品部正在對其進行大幅度的改進和調整,後續將推出使用者體驗更好功能更強大的版本。

 640?wx_fmt=jpeg


相關文章