最強通用編譯器優化工具!MIT三篇高峰會論文打造,準確率是傳統方法5倍

  • 2020 年 2 月 12 日
  • 筆記

乾明 十三 發自 凹非寺 量子位 報道 | 公眾號 QbitAI

新程式碼在自家晶片上運行狀況如何?英特爾自己都沒有別人家的新工具清楚。

這就是MIT耗時一年提出的研究成果,名為Ithemal,核心功能也非常簡單:

能夠分析數以百萬計自動描述的基本塊(計算指令的基本片段),來確切了解不同的晶片機構如何執行計算。

效果也非常驚艷。

MIT News透露,傳統基於人工設計的模型,預測程式碼在晶片上的運行速度,與實際運行速度之間的錯誤率高達50%。

就算是晶片供應商,比如英特爾預測程式碼在自己晶片上的運行速度,錯誤率也達到20%。而Ithemal,錯誤率僅為10%。

性能是傳統方法的5倍,英特爾的2倍。

整個過程都是自動化的,不需要人為干預,就能夠快速分析數十萬或數百萬個基本塊。

並且通用,它可以快速學習程式碼在任何新的晶片架構的性能速度,無論是機器學習煉丹,還是加密技術上鏈、還是編譯器優化等等,都能hold住。

研究人員分享了這樣的一個使用場景:

如果你想在一個新的晶片架構上訓練一個模型,比如Google的TPU,你只需要從這個架構中收集數據,經過分析器運行後,去訓練Ithemal,你可以得到一個可以預測其性能的模型。」

對於充分發揮晶片性能,讓程式碼運行更有效率,這是具有突破性意義的一項進展。

基於神經網路,避開「盲人摸象」

通常情況下,為了讓程式碼能夠在晶片上高效地運行,開發者會結合編譯器設計一個性能模型,模擬程式碼在晶片架構上的運行情況。

開發者會根據這些資訊進一步優化程式碼,進一步提高程式碼運行效率,突破晶片的性能瓶頸。

這種思路雖然沒什麼問題,麻煩出在如何設計性能模型上,傳統的方法是一小部分專家來人工設計。

面對錯綜複雜的晶片架構,這多少有些「盲人摸象」的感覺,就英特爾一家,描述其晶片架構的文檔, 多達3000頁。

而且這些內容也不一定完整,考慮到商業競爭以及技術保密上的考慮,英特爾也會去刻意忽略一些內容,這無疑又加大了困難——盲人摸到的象,可能缺胳膊少腿。

更別提現代的晶片架構設計了,不僅不透明,而且及其複雜,難以理解。想要得到一個性能模型,很難;想要得到一個更精確的性能模型,更難。

MIT的方法中,一開始就繞開了「盲人摸象」的困境,而是建立神經網路,從「數據」中學習。

這個數據,就是晶片執行「基本塊」所需的平均周期數,不需要手動添加任何特徵。

就算輸入之前沒有「看到」過的基本塊和晶片架構,訓練好的模型也能夠給出數字,來更準確地預測晶片執行程式碼的速度。

正所謂冰凍三尺,並非一日之寒

MIT這款強大工具的誕生也是Step By Step

第一步:用「基本塊」訓練標記數據

首先,研究人員提出了一種神經網路工具——以「基本塊」的形式訓練標記數據。

這樣做的目的就是可以自動預測給定晶片中,執行基本塊所需要的時間。

結果表明,比起傳統的手工調整模型,精確度上要高得多。

這個工具叫做Ithemal,研究還發表在了ICML 2019上。

Ithemal的全名叫做「Instruction THroughput Estimator using MAchine Learning」。

受深度神經網路的靈感,它採用了一種新型的數據驅動方法來預測一條指令塊的吞吐量。

Ithemal系統結構

Ithemal將吞吐量估計問題建模為一個回歸任務,並利用DNN使用大量標記數據集將序列映射為實際值的吞吐量,以此來學習如何預測。

更具體點來說,Ithemal使用分層多尺度RNN,讓每條指令生成一個獨立的嵌入,然後依次結合指令嵌入來預測吞吐量。

在所有基準測試中,平均絕對百分誤差(MAPE)降低了50%以上,同時仍然提供了較快的估計速度。

在生成高品質的預測時,Ithemal只需要訓練數據和ISA的規範,包括指令規範及其顯式和隱式操作數。

並且與分析模型不同,Ithemal不需要任何明確的規範或建模,只需要學習有助於提高吞吐量的任何顯著的微體系結構細節即可。

研究人員還將Ithemal相關資源開源在了GitHub上: https://github.com/psg-mit/Ithemal

第二步:推出性能模型驗證套件

接著,在去年11月的IEEE International Symposium on Workload Characterization大會上,研究人員提出了一個基準測試套件

這個套件由來自不同領域的基本塊組成,包括機器學習、編譯器、密碼學和圖形,可以用來驗證性能模型

值得注意的是,這項研究是和Google合力完成。

他們將30多萬個數據塊彙集到了BHive,這是對x86-64基本塊的性能模型進行系統驗證的基準。

研究人員使用BHive評估了四個現有的性能模型:IACA,llvm-mca,Ithemal和OSACA。

基本塊和它們的預測吞吐量

在他們的評估中,Ithemal預測英特爾晶片運行程式碼的速度,要比英特爾自己建立的性能模型還要快

並且,研究人員的數據集很好地捕捉了兩個Google應用程式的基本屬性:Spanner和Dremel。

到了這一步,開發人員和編譯器可以使用該工具來生成程式碼,這些程式碼可以在多樣化「黑盒子」晶片設計上更快,更高效地運行。

電子工程與電腦科學(EECS)系助理教授Michael Carbin表示:

現代的電腦處理器不透明,複雜得可怕,難以理解。編寫對這些處理器執行得儘可能快的電腦程式碼也面臨著巨大的挑戰。 這個工具是朝著對這些晶片的性能進行完全建模,以此來提高效率的重要一步。

第三步:自動生成編譯器優化

最後,在去年12月份的NeurIPS 會議上,研究人員提出了一種自動生成編譯器優化的新技術。

具體來說,他們自動生成一個演算法,稱為Vemal,將特定的程式碼轉換為向量,可用於並行計算。

相對於 LLVM 編譯器(業界流行的編譯器)中使用的手工矢量化演算法,Vemal 的性能要更好。

這項主要就是探討了擬合一個圖神經網路策略來模擬由其(整數線性規劃)ILP解所做出的最優決策是否可行。

結果表明,該策略生成的矢量化方案在靜態度量和運行時性能上都優於行業標準的編譯啟發式演算法。

來自MIT電腦科學與人工智慧實驗室

這三篇論文,都是出自MIT人工智慧研究重地——電腦科學與人工智慧實驗室,簡稱CSAIL。

核心人物為Charith Mendis,三篇論文中,有兩篇他是一作。

他出生於斯里蘭卡,讀碩士的時候來到麻省理工,是ACM Fellow、CSAIL學術帶頭人Saman Amarasinghe的關門弟子——最後一名博士生。

2015年名稱在微軟雷蒙德研究院實習,主要的研究方向就是編譯器、程式分析與機器學習。

他希望,未來大多數編譯器優化將自動生成和學習,而不是手動編寫。它們不僅會產生更快的程式碼,而且將更易於開發和維護。

而現在一系列的工作,就是在朝著這個方向發展。

而眼前的下一步,他們將會發力研究使模型可解釋的方法,來弄清楚為什麼特定的模型會做出預測。

傳送門

部落格地址: http://news.mit.edu/2020/tool-how-fast-code-run-chip-0106

Ithemal論文地址: http://proceedings.mlr.press/v97/mendis19a/mendis19a.pdf

BHive論文地址: http://groups.csail.mit.edu/commit/papers/19/ithemal-measurement.pdf

自動生成編譯器優化論文地址: http://papers.nips.cc/paper/9604-compiler-auto-vectorization-with-imitation-learning.pdf

作者系網易新聞·網易號「各有態度」簽約作者