機器學習與編譯優化的入門介紹
來自專欄 專註編譯器和相關體系結構的研究
該篇文章也算湊個AI的熱點::)。 對編譯器後端技術基本熟悉的研究工作者應該會感覺寫中後端優化策略相當地依賴於既有領域經驗,所以說設計一個比較好的啟發是優化策略是相當的困難並且玄學(說的就是GCC中的LRA和LLVM中的Spiller)。機器學習演算法的主要優勢就是學習已有的經驗,從而降低對人類的工作負擔,實現一個相對較優的決策。比如:根據以往的氣候數據預測將來多少天的天氣,根據地質結構數據等預測某個地區的石油、天然氣等礦產的儲量。
編譯器研究人員在設計Loop unrolling策略的時候,會考慮多種不同的因子對展開策略的影響。比如:目標機器的向量寄存器的數據寬度,循環內部的指令數,分支語句的數目,算術運算指令的數目,訪存操作的數目等。以往的演算法都是根據已有的benchmark得到這個決策結果。很顯然這個過程可以使用機器利用機器學習演算法來輔助編譯器設計人員[1]。
另外一方面,當前所有的寄存器分配演算法中用到的Spilling策略都是基於啟發式的優先順序策略,這方面也可以從機器特性,程序結構中抽取對應的特徵向量來決定溢出哪一個物理寄存器是最合適的[2]。
當然,還可以利用機器學習的演算法,從輸入的命令行選項,目標機器的特性(如:機器字長,寄存器數目,寄存器類別,指令種類,指令支持的操作,cache特徵)來學習得到一個相對比較合適的pass調度順序,當然這個模型的決策變數非常之多,訓練的數據量也比較大。而且模型中使用到的參數的選擇對模型的效果非常重要,目前學界還沒有比較好的模型[3][4]。
文章[5]中給出了當前兩者結合的研究熱點。
[1]. ftp://nozdr.ru/biblio/kolxo3/Cs/CsLn/A/Artificial%20Intelligence..%20Methodology,%20Systems,%20and%20Applications,%2010%20conf.,%20AIMSA%202002%28LNCS2443,%20Springer,%202002%29%28ISBN%203540441271%29%28287s%29_CsLn_.pdf#page=49 (p41).
[2]. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.14.3402&rep=rep1&type=pdf
[3]. https://www.eecis.udel.edu/~cavazos/cgo-2006-talk.pdf
[4].https://www.researchgate.net/profile/Abdul_Wahid_Memon/publication/225732776_Milepost_GCC_Machine_Learning_Enabled_Self-tuning_Compiler/links/0fcfd50ca24ef6fdcb000000/Milepost-GCC-Machine-Learning-Enabled-Self-tuning-Compiler.pdf
[5]. [1801.04405] A Survey on Compiler Autotuning using Machine Learning
推薦閱讀:
※吳恩達機器學習第四周課後感
※Google開放最大目標檢測數據集,還要為它舉辦AI挑戰賽
※機器學習基石筆記10:邏輯斯蒂(Logistic)回歸 上
※如何訓練模型?(1)——最小二乘法
※損失函數——MSE