乾貨|智慧編譯優化框架TACT
點選上方“中興開發者社群”,關注我們
每天讀一篇一線開發者原創好文
編譯連結,是軟體開發中必不可少的環節,由於技術較底層而不被一般使用者知悉。作業系統產品部推出智慧編譯優化框架TACT(Tool for Automatic Compiler Tuning),從編譯和自動化測試角度為優化程式效能提供了一個很好的解決方案,致力於軟體質量內建。
智慧編譯優化框架TACT,源於開源專案,是一套用於程式編譯和在異構環境中執行的工具,使用遺傳演算法自動調整編譯器引數來優化程式。簡單的說,TACT通過使用遺傳演算法,在編譯連結的時候排列組合所有的編譯引數,編譯完成後對程式進行一系列效能相關的自動化測試,通過測試對比自動找到效能最優的編譯引數組合。
TACT使用場景
l 通過自動獲得編譯連結引數的最優組合來實現效能提升,也可以減小二進位制檔案的體積及佔用記憶體的大小。
l 對程式的執行引數進行智慧組合測試,獲得其執行引數的最優組合。
例如大型計算任務的多執行緒並行處理中,可利用該框架自動對並行的執行緒數目自動進行調整,達到計算效能提升的最大化。
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將在主機上執行並行編譯,在目標板上執行執行測試(編譯和執行可以並行進行)。如圖所示:
通過測試板使用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格式的報告
報告中有多個編譯引數組合測試結果,此處為顯示方便,只擷取了一種編譯引數組合測試結果。可以看到速率提升至6873 Kb/s,提升約37%。
該框架可以同時執行多個測試用例,mean(第3行)是取多個測試用例的均值,此例子中只有一個測試用例(第2行)。
從例項可以看到TACT優化效果明顯,但目前TACT的配置還稍複雜,作業系統產品部正在對其進行大幅度的改進和調整,後續將推出使用者體驗更好功能更強大的版本。
相關文章
- Android 編譯優化Android編譯優化
- JVM編譯優化JVM編譯優化
- 乾貨|優酷小程式優化實戰優化
- 乾貨收藏 | 如何優化前端效能?優化前端
- 乾貨!MySQL大表優化方案(1)MySql優化
- [譯] 優化 Swift 的編譯時間優化Swift編譯
- 後端編譯與優化後端編譯優化
- C++編譯器優化C++編譯優化
- 優化 Xcode 編譯時間優化XCode編譯
- Java動態編譯優化——提升編譯速度(N倍)Java編譯優化
- 【真·乾貨】MySQL 索引及優化實戰MySql索引優化
- 編譯器優化:方法內聯編譯優化
- Taro編譯打包優化實踐編譯優化
- go的編譯優化問題Go編譯優化
- 乾貨分享!三大Java框架的優缺點對比Java框架
- 前端工程中的編譯時優化前端編譯優化
- 讓Elasticsearch飛起來!——效能優化實踐乾貨Elasticsearch優化
- 讓 Elasticsearch 飛起來!——效能優化實踐乾貨Elasticsearch優化
- 乾貨好文:分散式資料庫DDL的編譯與執行分散式資料庫編譯
- Linux 下如何繞過編譯器優化Linux編譯優化
- 騰訊視訊編譯優化記錄編譯優化
- SQL效能優化的祕訣,快來圍觀,乾貨!SQL優化
- 執行時框架,編譯時框架框架編譯
- 深入理解flutter的編譯原理與優化Flutter編譯原理優化
- 乾貨分享:螞蟻金服前端框架和工程化實踐前端框架
- AI客服上線 乾貨 乾貨 全是乾貨!AI
- Vue 原始碼解讀(9)—— 編譯器 之 優化Vue原始碼編譯優化
- 優化使用kotlin開發Android app的編譯速度優化KotlinAndroidAPP編譯
- 工程能力UP | LightGBM的調參乾貨教程與並行優化並行優化
- 無水乾貨:Java陣列優秀指南Java陣列
- 純乾貨分享: 如何在 React 框架中使用SpreadJSReact框架JS
- 【乾貨乾貨】configtxlator 工具介紹
- 運維乾貨 | 10分鐘深入瞭解10大Nginx配置項優化運維Nginx優化
- Go 高效能系列教程之三:編譯器優化Go編譯優化
- 要點提煉| 理解JVM之程式編譯&程式碼優化JVM編譯優化
- [譯]例項詳解防抖與節流(乾貨!!!)
- Java必備乾貨:Spring框架之IOC的基本配置JavaSpring框架
- 乾貨分享:六個知名的Go語言web框架GoWeb框架
- LNMP網站框架搭建(編譯安裝)LNMP網站框架編譯