一種在線迭代編譯的優化方法和優化系統的製作方法
2023-05-05 06:57:01 1
專利名稱:一種在線迭代編譯的優化方法和優化系統的製作方法
技術領域:
本發明涉及計算機編譯技木,尤其涉及一種在線迭代編譯的優化方法和優化系統。
背景技術:
迭代編譯技術[1,2,3,4,5,6,7,8,9]是ー種簡單卻有效的優化方法。它通過搜索編譯器優化的最好組合方式來提高給定電腦程式在給定計算機軟硬體環境中的性能。然而,適用於不同的電腦程式或者甚至是同一個電腦程式的不同輸入的最好的優化組合可能是不同的。因此,現有的迭代編譯技術受限於以下幾個問題而未得到廣泛的應用一、找到最好的優化組合方式需要大量的編譯和測試運行。ニ、迭代編譯選擇最優組合的過程依賴於電腦程式的數據集。三、迭代編譯的搜索過程具有較大的開銷,需要獲得足夠大的性能收益來抵消。
發明內容
為解決上述問題,本發明的目的為公開ー種在線迭代編譯的方法和系統,是解決上述現有迭代編譯技術的過程複雜,數據集依賴,開銷大等問題。本發明公開ー種在線迭代編譯的優化方法,包括如下步驟步驟100,控制模塊將相應程序的原始碼或是編譯器進ー步優化的中間表示的形式發送到工作模塊,並在所述程序並行處理存於工作模塊的數據記錄的過程中,預測處理完剩餘數據記錄所需時間;步驟200,工作模塊對所述程序進行迭代編譯優化操作,並將優化結果數據反饋給控制1吳塊;步驟300,將所述程序的運行時間和迭代編譯優化操作所花的時間存儲於性能資料庫中,所述性能資料庫存儲全部數據迭代優化操作的開銷和收益,以供控制模塊使用;所述步驟100還包括步驟400,進行總結和維護所述數據每次運行中迭代優化操作的開銷和所帯來的性能收益;步驟500,控制模塊對於全部工作模塊發送的最優組合的局部決策進行挑選,選擇出全局最優的優化組合,作為全局決策推薦給全部工作模塊。所述的在線迭代編譯優化方法,所述步驟100還包括步驟210,所述程序為程序函數時,將該程序函數並行處理存於工作模塊的數據記錄的過程中,預測處理完剩餘數據記錄所需時間;步驟220,控制模塊決定迭代編譯優化操作的時間開銷,並通知工作模塊進行相應的迭代編譯優化操作。所述的在線迭代編譯優化方法,所述步驟100還包括步驟310,嘗試不同的編譯優化組合所需的編譯器被部署在所有的工作模塊上;
步驟320,對所述程序函數運行時優化系統進行擴展,使其能夠把所述程序函數的原始碼或是其它被動態或是靜態編譯器進一步優化的中間表示的形式從控制模塊發送到所有的工作模塊;步驟330,決定優化操作的數量和控制優化操作的執行。所述的在線迭代編譯優化方法,所述步驟200還包括步驟410,所述工作模塊一端,在收到控制模塊分配的時間預測任務後,對分布於工作模塊上的數據記錄進行隨機抽樣,組成評估數據記錄,並在所述評估數據記錄中對程序的執行時間進行局部估計,然後將局部估計傳回控制模塊;步驟420,所述控制模塊在得到工作模塊傳回的局部估計後,使用線性時間預測模型,對所述程序函數的總運行時間進行估計;步驟430,以優化時間為単位,來決定需要進行多少迭代編譯的操作,並將迭代編譯優化任務分發給工作模塊並發執行。所述的在線迭代編譯優化方法,所述步驟400還包括步驟510,將所述程序函數不同次運行中迭代優化操作的開銷和所帯來的性能收益總結並維護於性能積蓄中;步驟520,根據性能積蓄中的數據信息對迭代編譯的時機和頻率進行控制,以達到保證開銷始終只佔收益的預定義小比例的目標;所述控制的方式是當通過性能資料庫得知性能收益的一部分與一次迭代編譯操作的開銷相當吋,則進行一次迭代編譯操作,所述部分具體值由用戶在0%到100%之間設定;步驟530,從由應用高性能的優化組合所得到的性能積蓄中,分配一部分用於迭代編譯操作,所述部分具體值可由用戶在0%到100%之間設定;步驟540,利用評估數據記錄來對性能收益進行評估;每個工作模塊在其評估數據記錄上評估新的優化組合相對於默認優化組合的加速比,將其發送回控制模塊;控制模塊利用加速比信息和待處理的數據記錄個數總量的信息來估算出使用這個新的優化組合所能帶來的性能積蓄;步驟550,基於所預測到的性能積蓄,控制模塊決定能夠在工作模塊上進行評估的優化組合的個數,並通知工作模塊完成相應的運算工作。所述的在線迭代編譯優化方法,所述步驟200還包括步驟610,所述工作模塊一端,利用編譯器以不同的編譯優化組合對函數的原始碼或是其它被動態或是靜態編譯器進ー步優化的中間表示的形式進行編譯得到相應的可執行碼;步驟620,利用採樣所得的評估數據記錄,對被指定測試的編譯優化組合得到的可執行碼進行性能評測和正確性測試;步驟630,每個工作模塊進行迭代編譯操作後,會將所評測的優化組合的加速比分數發送給控制模塊。所述的在線迭代編譯優化方法,所述步驟500還包括
步驟710,工作模塊上在收到控制模塊推薦的性能更高的生產用優化組合後,會將所述程序函數替換為優化的版本。所述的在線迭代編譯優化方法,所述步驟100還包括
步驟810,所述程序為運行程序所形成的作業隊列時,監控作業隊列的運行,所述作業隊列,以提交的運行程序的任務形成;步驟820,通過作業隊列將迭代編譯和性能評估操作分派到到處理模塊集群中執行,每個處理模塊的本地文件系統以獨立形式存在,或存在於處理模塊集群中以分布式文件系統一部分的形式存在;步驟830,將監控所述作業隊列將所述程序的執行時間的信息收集存入性能資料庫。所述的在線迭代編譯優化方法,所述步驟810還包括步驟910,通過接收步驟820分派的的編譯和性能評估,測試迭代編譯操作和返回優化結果;步驟920,調用編譯器將所述程序從原始碼或中間代碼的形式轉換為可以在處理模塊上直接執行的目標代碼的過程;並在所述過程中需要通過命令行參數或控制文件或環境變量等方法來打開,關閉或是調整編譯器在代碼轉換過程中所進行的優化操作。所述的在線迭代編譯優化方法,所述步驟100還包括步驟1010,將編譯得到的可執行目標代碼在處理模塊上運行,並測量運行時間和對運行結果進行驗證,在運行吋,需要為目標代碼提供樣本輸入;步驟1020,當一個程序性能更好的優化組合被找到和測試後,處理模塊會用其替換現有的生產用優化組合,使其能作用於後續的對這個程序的請求,獲得更好的性能;步驟1030,處理模塊使用性能積蓄的一部分來進行迭代編譯操作,並通過在保守模式和激進模式進行切換來控制迭代編譯操作發生的頻率,所述部分具體值由用戶在0%到100%之間設定。所述的在線迭代編譯優化方法,所述步驟830還包括步驟1110,性能評估測試所需的數據集從一個數據集池中採樣得到;數據集池裡面儲存著作業對列最近執行過的任務所使用的數據集;步驟1120,將編譯和性能評估測試所花的運行時間收集並存入性能資料庫中,以用來估計迭代編譯操作的開銷和估計評測過的優化組合的加速比。所述的在線迭代編譯的優化方法,所述步驟1110還包括步驟1210,維護ー個由D個隨機選取的數據集構成的測試集合來評估不同優化組合的性能和對測試集合進行正確性的測試,所述D為可調的數字;步驟1220,所述測試集合會被周期性的更新為用戶最新使用的數據集,以應對數據集隨時間的不斷變化。本發明公開ー種在線迭代編譯的優化系統,包括控制模塊,用於將相應程序的原始碼或是編譯器進ー步優化的中間表示的形式發送到工作模塊,並在所述程序並行處理存於工作模塊的數據記錄的過程中,預測處理完剩餘數據記錄所需時間;工作模塊,用於對所述程序進行迭代編譯優化操作,並將優化結果數據反饋給控制豐旲塊;性能資料庫模塊,用於將所述程序的運行時間和迭代編譯優化操作所花的時間存儲於性能資料庫中,所述性能資料庫存儲全部數據迭代優化操作的開銷和收益,以供控制模塊使用;所述控制模塊還包括性能積蓄模塊,用於進行總結和維護所述數據每次運行中迭代優化操作的開銷和所帯來的性能收益;全局決策模塊,用於控制模塊對於全部工作模塊發送的最優組合的局部決策進行 挑選,選擇出全局最優的優化組合,作為全局決策推薦給全部工作模塊。所述的在線迭代編譯優化系統,所述控制模塊還包括所述數據為程序函數時,將該程序函數並行處理存於工作模塊的數據記錄的過程中,預測處理完剩餘數據記錄所需時間;控制模塊決定迭代編譯優化操作的時間開銷,並通知工作模塊進行相應的迭代編譯優化操作。所述的在線迭代編譯優化系統,所述控制模塊還包括編譯器部署模塊,用於嘗試不同的編譯優化組合所需的編譯器被部署在所有的エ作模塊上;擴展發送模塊,用於對所述程序函數運行時優化系統進行擴展,使其能夠把所述程序函數的原始碼或是其它被動態或是靜態編譯器進一步優化的中間表示的形式從控制模塊發送到所有的工作模塊;迭代編譯總控制模塊,用於決定優化操作的數量和控制優化操作的執行。所述的在線迭代編譯優化系統,所述工作模塊還包括採樣模塊,用於所述工作模塊一端,在收到控制模塊分配的時間預測任務後,對分布於工作模塊上的數據記錄進行隨機抽樣,組成評估數據記錄,並在所述評估數據記錄中對程序的執行時間進行局部估計,然後將局部估計傳回控制模塊;線性時間預測模塊,用於所述控制模塊在得到工作模塊傳回的局部估計後,使用線性時間預測,對所述程序函數的總運行時間進行估計;迭代編譯預算模塊,用於以優化時間為単位,來決定需要進行多少迭代編譯的操作,並將迭代編譯優化任務分發給工作模塊並發執行。所述的在線迭代編譯優化系統,所述性能積蓄模塊還包括優化總結模塊,用於將所述程序函數不同次運行中迭代優化操作的開銷和所帯來的性能收益總結並維護於性能積蓄中;優化控制模塊,用於根據性能積蓄中的數據信息對迭代編譯的時機和頻率進行控制,以達到保證開銷始終只佔收益的預定義小比例的目標;所述控制的方式是當通過性能資料庫得知性能收益的一部分與一次迭代編譯操作的開銷相當吋,則進行一次迭代編譯操作,所述部分具體值由用戶在0%到100%之間設定;積蓄分配模塊,用於從由應用高性能的優化組合所得到的性能積蓄中,分配一部分用於迭代編譯操作,所述部分的具體值可由用戶在0%到100%之間設定;積蓄估計模塊,用於利用評估數據記錄來對性能收益進行評估;每個工作模塊在其評估數據記錄上評估新的優化組合相對於默認優化組合的加速比,將其發送回控制模塊;控制模塊利用加速比信息和待處理的數據記錄個數總量的信息來估算出使用這個新的優化組合所能帶來的性能積蓄;優化數量模塊,用於基於所預測到的性能積蓄,控制模塊決定能夠在工作模塊上進行評估的優化組合的個數,並通知工作模塊完成相應的運算工作。所述的在線迭代編譯優化系統,所述工作模塊還包括執行碼生成模塊,用於利用編譯器以不同的編譯優化組合,對函數的原始碼或是其它被動態或是靜態編譯器進一步優化的中間表示的形式,進行編譯得到相應的可執行碼;優化組合評測模塊,利用採樣所得的評估數據記錄,對被指定測試的編譯優化組合得到的可執行碼進行性能評測和正確性測試分數模塊,用於每個工作模塊進行迭代編譯操作後,會將所評測的優化組合的加速比分數發送給控制模塊。所述的在線迭代編譯優化系統,所述全局決策模塊還包括優化結果片理模塊,用於工作模塊上在收到控制模塊推薦的性能更高的生產用優化組合後,會將所述程序函數替換為優化的版本。所述的在線迭代編譯優化系統,所述控制模塊還包括處理模塊,用於所述數據為運行程序所形成的作業隊列時,監控作業隊列的運行,所述作業隊列,以用戶提交的運行程序的任務形成;操作分派模塊,用於通過作業隊列將迭代編譯和性能評估操作分派到到處理模塊集群中執行,每個處理模塊的本地文件系統以獨立形式存在,或存在於處理模塊集群中以分布式文件系統一部分的形式存在;監測模塊,用於將監控所述作業隊列將所述程序的執行時間的信息收集存入性能資料庫。所述的在線迭代編譯優化系統,所述處理模塊還包括迭代編譯操作模塊,用於通過接收操作分派模塊分派的的編譯和性能評估,測試迭代編譯操作和返回優化結果;編譯模塊,用於調用編譯器將所述程序從原始碼或中間代碼的形式轉換為可以在處理模塊上直接執行的目標代碼的過程;並在所述過程中需要通過命令行參數或控制文件或環境變量等系統來打開,關閉或是調整編譯器在代碼轉換過程中所進行的優化操作。所述的在線迭代編譯優化系統,所述控制模塊還包括優化評測模塊,用於將編譯得到的可執行目標代碼在處理模塊上運行,並測量運行時間和對運行結果進行驗證,在運行吋,需要為目標代碼提供樣本輸入;優化選擇模塊,用於當ー個程序性能更好的優化組合被找到和測試後,處理模塊會用其替換現有的生產用優化組合,使其能作用於後續的對這個程序的請求,獲得更好的 生倉泛;模式選擇模塊,用於處理模塊使用性能積蓄的一部分來進行迭代編譯操作,並通過在保守模式和激進模式進行切換來控制迭代編譯操作發生的頻率,所述部分具體值由用戶在0%到100%之間設定。所述的在線迭代編譯優化系統,所述監測模塊還包括數據集池模塊,用於性能評估測試所需的數據集從一個數據集池中採樣得到;數據集池裡面儲存著作業對列最近執行過的任務所使用的數據集;性能記錄模塊,用於將編譯和性能評估測試所花的運行時間收集並存入性能資料庫中,以用來估計迭代編譯操作的開銷和估計評測過的優化組合的加速比。所述的在線迭代編譯的優化系統,所述數據集池模塊還包括測試集合模塊,用於維護ー個由D個隨機選取的數據集構成的測試集合來評估不同優化組合的性能和對測試集合進行正確性的測試,所述D為可調的數字;所述測試集合會被周期性的更新為用戶最新使用的數據集,以應對數據集隨時間的不斷變化。
本發明作用於單機或多機計算機系統上,其有益效果為1,自動將迭代編譯搜索優化組合所需要的編譯和性能測試等步驟應用於在單機或多機上運行的電腦程式或是程序的一部分;達到迭代編譯優化過程對電腦程式的使用者透明的效果;2,對所優化的程序在計算機系統上的運行情況下進行監控,根據迭代編譯優化方法後所獲得的收益,控制迭代編譯優化操作的執行時機和頻率;達到對迭代編譯的開銷進行控制,使得開銷小於收益或是小於用戶設定值的效果;3,在電腦程式真正被使用的生產環境中對程序進行迭代優化;達到對電腦程式真正運行於其上的硬體和使用的數據集進行自適應優化;4,整個迭代優化過程對電腦程式的最終用戶透明;達到全自動進行,不幹擾用戶的效果。本發明能夠全自動的,在電腦程式的真正被執行的環境中,針對特定軟硬體和真實使用的一組數據集,對應用程式進行在線迭代編譯優化,達到提高應用程式執行效率,並自動控制優化開銷使其小於優化收益,降低全系統功耗的效果。
圖I.在線迭代編譯系統應用於MapReduce的實施例;圖2.在線迭代編譯系統應用於高吞吐量伺服器程序的實施例;圖3.性能積蓄的演化示例圖;圖4.激進模式和保守模式切換圖。
具體實施例方式下面給出本發明的具體實施方式
,結合附圖對本發明做出了詳細描述。本發明公開ー種在線迭代編譯的優化方法,包括如下步驟步驟100,控制模塊將相應程序的原始碼或是編譯器進ー步優化的中間表示的形式發送到工作模塊,並在所述程序並行處理存於工作模塊的數據記錄的過程中,預測處理完剩餘數據記錄所需時間;步驟200,工作模塊對所述程序進行迭代編譯優化操作,並將優化結果數據反饋給控制1吳塊;步驟300,將所述程序的運行時間和迭代編譯優化操作所花的時間存儲於性能資料庫中,所述性能資料庫存儲全部數據迭代優化操作的開銷和收益,以供控制模塊使用;所述步驟100還包括步驟400,進行總結和維護所述數據每次運行中迭代優化操作的開銷和所帯來的性能收益;
步驟500,控制模塊對於全部工作模塊發送的最優組合的局部決策進行挑選,選擇出全局最優的優化組合,作為全局決策推薦給全部工作模塊。所述的在線迭代編譯優化方法,所述步驟100還包括步驟210,所述程序為程序函數時,將該程序函數並行處理存於工作模塊的數據記錄的過程中,預測處理完剩餘數據記錄所需時間;步驟220,控制模塊決定迭代編譯優化操作的時間開銷,並通知工作模塊進行相應的迭代編譯優化操作。
所述的在線迭代編譯優化方法,所述步驟100還包括步驟310,嘗試不同的編譯優化組合所需的編譯器被部署在所有的工作模塊上;步驟320,對所述程序函數運行時優化系統進行擴展,使其能夠把所述程序函數的原始碼或是其它被動態或是靜態編譯器進一步優化的中間表示的形式從控制模塊發送到所有的工作模塊;步驟330,決定優化操作的數量和控制優化操作的執行。所述的在線迭代編譯優化方法,所述步驟200還包括步驟410,所述工作模塊一端,在收到控制模塊分配的時間預測任務後,對分布於工作模塊上的數據記錄進行隨機抽樣,組成評估數據記錄,並在所述評估數據記錄中對程序的執行時間進行局部估計,然後將局部估計傳回控制模塊;步驟420,所述控制模塊在得到工作模塊傳回的局部估計後,使用線性時間預測模型,對所述程序函數的總運行時間進行估計;步驟430,以優化時間為単位,來決定需要進行多少迭代編譯的操作,並將迭代編譯優化任務分發給工作模塊並發執行。所述的在線迭代編譯優化方法,所述步驟400還包括步驟510,將所述程序函數不同次運行中迭代優化操作的開銷和所帯來的性能收益總結並維護於性能積蓄中;步驟520,根據性能積蓄中的數據信息對迭代編譯的時機和頻率進行控制,以達到保證開銷始終只佔收益的預定義小比例的目標;所述控制的方式是當通過性能資料庫得知性能收益的一部分與一次迭代編譯操作的開銷相當吋,則進行一次迭代編譯操作,所述部分具體值由用戶在0%到100%之間設定;步驟530,從由應用高性能的優化組合所得到的性能積蓄中,分配一部分用於迭代編譯操作,所述部分具體值可由用戶在0%到100%之間設定;步驟540,利用評估數據記錄來對性能收益進行評估;每個工作模塊在其評估數據記錄上評估新的優化組合相對於默認優化組合的加速比,將其發送回控制模塊;控制模塊利用加速比信息和待處理的數據記錄個數總量的信息來估算出使用這個新的優化組合所能帶來的性能積蓄;步驟550,基於所預測到的性能積蓄,控制模塊決定能夠在工作模塊上進行評估的優化組合的個數,並通知工作模塊完成相應的運算工作。所述的在線迭代編譯優化方法,所述步驟200還包括步驟610,所述工作模塊一端,利用編譯器以不同的編譯優化組合對函數的原始碼或是其它被動態或是靜態編譯器進ー步優化的中間表示的形式進行編譯得到相應的可執行碼;步驟620,利用採樣所得的評估數據記錄,對被指定測試的編譯優化組合得到的可執行碼進行性能評測和正確性測試;步驟 630,每個工作模塊進行迭代編譯操作後,會將所評測的優化組合的加速比分數發送給控制模塊。所述的在線迭代編譯優化方法,所述步驟500還包括步驟710,工作模塊上在收到控制模塊推薦的性能更高的生產用優化組合後,會將所述程序函數替換為優化的版本。所述的在線迭代編譯優化方法,所述步驟100還包括步驟810,所述程序為運行程序所形成的作業隊列時,監控作業隊列的運行,所述作業隊列,以提交的運行程序的任務形成;步驟820,通過作業隊列將迭代編譯和性能評估操作分派到到處理模塊集群中執行,每個處理模塊的本地文件系統以獨立形式存在,或存在於處理模塊集群中以分布式文件系統一部分的形式存在;步驟830,將監控所述作業隊列將所述程序的執行時間的信息收集存入性能資料庫。所述的在線迭代編譯優化方法,所述步驟810還包括步驟910,通過接收步驟820分派的的編譯和性能評估,測試迭代編譯操作和返回優化結果;步驟920,調用編譯器將所述程序從原始碼或中間代碼的形式轉換為可以在處理模塊上直接執行的目標代碼的過程;並在所述過程中需要通過命令行參數或控制文件或環境變量等方法來打開,關閉或是調整編譯器在代碼轉換過程中所進行的優化操作。所述的在線迭代編譯優化方法,所述步驟100還包括步驟1010,將編譯得到的可執行目標代碼在處理模塊上運行,並測量運行時間和對運行結果進行驗證,在運行吋,需要為目標代碼提供樣本輸入;步驟1020,當一個程序性能更好的優化組合被找到和測試後,處理模塊會用其替換現有的生產用優化組合,使其能作用於後續的對這個程序的請求,獲得更好的性能;步驟1030,處理模塊使用性能積蓄的一部分來進行迭代編譯操作,並通過在保守模式和激進模式進行切換來控制迭代編譯操作發生的頻率,所述部分具體值由用戶在0%到100%之間設定。所述的在線迭代編譯優化方法,所述步驟830還包括步驟1110,性能評估測試所需的數據集從一個數據集池中採樣得到;數據集池裡面儲存著作業對列最近執行過的任務所使用的數據集;步驟1120,將編譯和性能評估測試所花的運行時間收集並存入性能資料庫中,以用來估計迭代編譯操作的開銷和估計評測過的優化組合的加速比。所述的在線迭代編譯的優化方法,所述步驟1110還包括步驟1210,維護ー個由D個隨機選取的數據集構成的測試集合來評估不同優化組合的性能和對測試集合進行正確性的測試,所述D為可調的數字;步驟1220,所述測試集合會被周期性的更新為用戶最新使用的數據集,以應對數據集隨時間的不斷變化。本發明公開ー種在線迭代編譯的優化系統,包括控制模塊,用於將相應程序的原始碼或是編譯器進ー步優化的中間表示的形式發送到工作模塊,並在所述程序並行處理存於工作模塊的數據記錄的過程中,預測處理完剩餘數據記錄所需時間;工作模塊,用於對所述程序進行迭代編譯優化操作,並將優化結果數據反饋給控制豐旲塊;性能資料庫模塊,用於將所述程序的運行時間和迭代編譯優化操作所花的時間存儲於性能資料庫中,所述性能資料庫存儲全部數據迭代優化操作的開銷和收益,以供控制模塊使用;所述控制模塊還包括性能積蓄模塊,用於進行總結和維護所述數據每次運行中迭代優化操作的開銷和所帯來的性能收益;全局決策模塊,用於控制模塊對於全部工作模塊發送的最優組合的局部決策進行挑選,選擇出全局最優的優化組合,作為全局決策推薦給全部工作模塊。所述的在線迭代編譯優化系統,所述控制模塊還包括所述數據為程序函數時,將該程序函數並行處理存於工作模塊的數據記錄的過程中,預測處理完剩餘數據記錄所需時間;控制模塊決定迭代編譯優化操作的時間開銷,並通知工作模塊進行相應的迭代編譯優化操作。所述的在線迭代編譯優化系統,所述控制模塊還包括編譯器部署模塊,用於嘗試不同的編譯優化組合所需的編譯器被部署在所有的エ作模塊上;擴展發送模塊,用於對所述程序函數運行時優化系統進行擴展,使其能夠把所述程序函數的原始碼或是其它被動態或是靜態編譯器進一步優化的中間表示的形式從控制模塊發送到所有的工作模塊;迭代編譯總控制模塊,用於決定優化操作的數量和控制優化操作的執行。所述的在線迭代編譯優化系統,所述工作模塊還包括採樣模塊,用於所述工作模塊一端,在收到控制模塊分配的時間預測任務後,對分布於工作模塊上的數據記錄進行隨機抽樣,組成評估數據記錄,並在所述評估數據記錄中對程序的執行時間進行局部估計,然後將局部估計傳回控制模塊;線性時間預測模塊,用於所述控制模塊在得到工作模塊傳回的局部估計後,使用線性時間預測,對所述程序函數的總運行時間進行估計;迭代編譯預算模塊,用於以優化時間為単位,來決定需要進行多少迭代編譯的操作,並將迭代編譯優化任務分發給工作模塊並發執行。所述的在線迭代編譯優化系統,所述性能積蓄模塊還包括優化總結模塊,用於將所述程序函數不同次運行中迭代優化操作的開銷和所帯來的性能收益總結並維護於性能積蓄中;優化控制模塊,用於根據性能積蓄中的數據信息對迭代編譯的時機和頻率進行控制,以達到保證開銷始終只佔收益的預定義小比例的目標;所述控制的方式是當通過性能資料庫得知性能收益的一部分與一次迭代編譯操作的開銷相當時,則進行一次迭代編譯操作,所述部分具體值由用戶在0%到100%之間設定; 積蓄分配模塊,用於從由應用高性能的優化組合所得到的性能積蓄中,分配一部分用於迭代編譯操作,所述部分的具體值可由用戶在0%到100%之間設定;積蓄估計模塊,用於利用評估數據記錄來對性能收益進行評估;每個工作模塊在其評估數據記錄上評估新的優化組合相對於默認優化組合的加速比,將其發送回控制模塊;控制模塊利用加速比信息和待處理的數據記錄個數總量的信息來估算出使用這個新的優化組合所能帶來的性能積蓄;優化數量模塊,用於基於所預測到的性能積蓄,控制模塊決定能夠在工作模塊上進行評估的優化組合的個數,並通知工作模塊完成相應的運算工作。所述的在線迭代編譯優化系統,所述工作模塊還包括執行碼生成模塊,用於利用編譯器以不同的編譯優化組合,對函數的原始碼或是其它被動態或是靜態編譯器進一步優化的中間表示的形式,進行編譯得到相應的可執行碼;優化組合評測模塊,利用採樣所得的評估數據記錄,對被指定測試的編譯優化組合得到的可執行碼進行性能評測和正確性測試;分數模塊,用於每個工作模塊進行迭代編譯操作後,會將所評測的優化組合的加速比分數發送給控制模塊。所述的在線迭代編譯優化系統,所述全局決策模塊還包括優化結果片理模塊,用於工作模塊上在收到控制模塊推薦的性能更高的生產用優化組合後,會將所述程序函數替換為優化的版本。所述的在線迭代編譯優化系統,所述控制模塊還包括處理模塊,用於所述數據為運行程序所形成的作業隊列時,監控作業隊列的運行,所述作業隊列,以用戶提交的運行程序的任務形成;操作分派模塊,用於通過作業隊列將迭代編譯和性能評估操作分派到到處理模塊集群中執行,每個處理模塊的本地文件系統以獨立形式存在,或存在於處理模塊集群中以分布式文件系統一部分的形式存在;監測模塊,用於將監控所述作業隊列將所述程序的執行時間的信息收集存入性能資料庫。所述的在線迭代編譯優化系統,所述處理模塊還包括迭代編譯操作模塊,用於通過接收操作分派模塊分派的的編譯和性能評估,測試迭代編譯操作和返回優化結果;編譯模塊,用於調用編譯器將所述程序從原始碼或中間代碼的形式轉換為可以在處理模塊上直接執行的目標代碼的過程;並在所述過程中需要通過命令行參數或控制文件或環境變量等系統來打開,關閉或是調整編譯器在代碼轉換過程中所進行的優化操作。所述的在線迭代編譯優化系統,所述控制模塊還包括優化評測模塊,用於將編譯得到的可執行目標代碼在處理模塊上運行,並測量運行時間和對運行結果進行驗證,在運行吋,需要為目標代碼提供樣本輸入;優化選擇模塊,用於當ー個程序性能更好的優化組合被找到和測試後,處理模塊會用其替換現有的生產用優化組合,使其能作用於後續的對這個程序的請求,獲得更好的 生倉泛;模式選擇模塊,用於處理模塊使用性能積蓄的一部分來進行迭代編譯操作,並通過在保守模式和激進模式進行切換來控制迭代編譯操作發生的頻率,所述部分具體值由用戶在0%到100%之間設定。所述的在線迭代編譯優化系統,所述監測模塊還包括數據集池模塊,用於性能評估測試所需的數據集從一個數據集池中採樣得到;數據集池裡面儲存著作業對列最近執行過的任務所使用的數據集;性能記錄模塊,用於將編譯和性能評估測試所花的運行時間收集並存入性能資料庫中,以用來估計迭代編譯操作的開銷和估計評測過的優化組合的加速比。所述的在線迭代編譯的優化系統,所述數據集池模塊還包括測試集合模塊,用於維護ー個由D個隨機選取的數據集構成的測試集合來評估不同優化組合的性能和對測試集合進行正確性的測試,所述D為可調的數字;所述測試集合會被周期性的更新為用戶最新使用的數據集,以應對數據集隨時間的不斷變化。圖I是本發明在線迭代編譯優化系統,以下簡稱為IODC 8 (IterativeOptimization for the Data Center,應用於數據中心的迭代編譯系統),應用於數據中心常用的MapReduce (映射規約)應用程式的一個實施例。IODC 8集成在MapReduce運行時的環境中。MapReduce運行時的環境為,將用戶所編寫的Map和Reduce函數分發到計算機集群中去並行處理大量的數據記錄。這些數據記錄通常由ー個分布式文件系統來存儲和管理。MapReduce運行時環境的主要邏輯位於控制模塊17中,控制模塊17控制集群中若干エ作模塊18並發處理數據。所述主要邏輯指的將用戶寫成的MapReduce應用程式分發到計算機集群中並行處理大量數據所需要的控制的步驟。為了支持迭代編譯優化,需要對MapReduce運行時優化系統進行擴展,所述擴展指的是對系統進行擴展和添加的功能。而自定義函數的寫法是不需要改變的。使其能夠把Map和Reduce兩個用戶自定義函數的原始碼從控制模塊17分發到所有的工作模塊18。通過嘗試不同的編譯優化組合24所需的編譯器被部署在所有的工作模塊18上。在控制模塊17這一端,IODC 8使用ー個線性時間預測模型20,對MapReduce程序的總運行時間進行估計。所述線性時間預測模型就是ー個線性的表達式,如時間=a*數據量+b。就是用ー個線性的表達式來把數據量換算成時間。在使用前,需確定a和b的值。方法是實測兩組時間和數據量的值,然後代入表達式,形成一個ニ元一次方程組,求解即得。據此,IODC 8決定需要進行多少迭代編譯的操作(以優化時間23為單位)並將迭代編譯優化任務分發給ー組工作模塊18並發執行。控制模塊17綜合了所有工作模塊18發來的關於最優組合的局部決策22後,挑出全局最好的優化組合24,作為全局決策21推薦給所有工作模塊18。所有IODC 8所需要的運行時信息都被收集和存儲在性能資料庫9中。I0DC8將同一 MapReduce程序不同次運行中迭代優化操作的開銷和所帯來的性能收益總結並維護於 性能積蓄11中。IODC 8根據性能積蓄11中的信息來迭代編譯的時機和頻率進行控制,以達到保證開銷始終只佔收益的ー個預定義小比例的目標。
在工作模塊18這一端,IODC 8在收到控制模塊17分配的迭代編譯任務後,對分布在本地的數據記錄進行隨機抽樣,組成評估數據記錄201,並在其上對程序的執行時間進行局部估計,對被指定測試的編譯優化組合24進行性能評測和正確性測試。每臺工作模塊18進行迭代編譯操作後,會將所評測的優化組合24的加速比分數25發送給控制模塊17。工作模塊18上的IODC 8在收到控制模塊17推薦的性能更高的生產用優化組合26後,會將本地的Map和Reduce函數替換為用該組合優化的版本。為了在MapReduce程序的反覆執行過程中的任何時間點始終獲得淨收益,IODC 8隻會從由應用高性能的優化組合24所得到的性能積蓄11中,分配一小部分來用於迭代編譯操作。為此,它必須要對性能積蓄11進行準確評測。IODC 8利用評估數據記錄201來對性能收益進行評估。每個工作模塊18在其評估數據記錄201上評估新的優化組合相對於默認優化組合的加速比,將其發送回控制模塊17。控制模塊17利用加速比信息和待處理的數據記錄個數總量的信息來估算出使用這個新的優化組合所能帶來的性能積蓄11。這是通過線性外推法來完成,在圖I中被稱為線性時間預測模型20。基於所預測到的性能積蓄11,控制模塊17決定能夠在工作模塊18上進行評估的優化組合24的個數,並通知工作模塊18完成相應的工作。這個過程中的基本原則就是,只花費總的性能積蓄11的一小部分(P% )來做迭代編譯的操作來避免過度的開銷。圖3示例了性能積蓄11的變化過程。在最開始沒有任何性能積蓄11的時候,IODC8花費估計出的程序總執行時間的一小部分去執行迭代編譯操作。一旦更好的優化組合被找到28,使用被找到的更好的優化組合28所帯來的性能積蓄11的P% (P代表ー個可以調的數字,如5%,10% ...)被用來做更多的迭代編譯操作,目的在於找到性能更高的選項組合。這就使用,IODC 8能夠保有大部分的性能積蓄11。在最壞的情況下,沒有更好的優化組合被找到29,IODC 8也只會造成相對於總運行時間幾乎可以忽略的損失。IODC 8將會周期性的花費一部分的性能積蓄11來做迭代編譯操作。迭代編譯操作由工作模塊18完成。工作模塊18在迭代編譯操作中會評測ー個到多個優化組合。評測操作有雙重的任務1、找到比現有最好的組合性能更高的新的優化組合;2、重新評測以前使用過的優化組合24。目的在於,在程序的數據集不斷變化的情況下,能夠更穩定的維持系統性能處於較高狀態。IODC 8不但可以單獨應用於MapReduce程序的一次執行之內,還可以應用於同一應用程式多次執行之間。為此,IODC 8隻需要將找到的高性能優化組合不斷的記錄下來,並在程序後續多次執行所引起的迭代編譯中優先評估它們的性能,就能夠達到跨執行的利用優化信息,並不斷增長性能積蓄11和評估更多優化組合以找到性能更高的組合。圖2是本發明在線迭代編譯系統IODC 8應用於高呑吐量的伺服器端應用程式的一個實施例。在本實施例中,IODC 8與ー個作業隊列系統5集成在一起。
這個作業隊列5接收為用戶運行程序4的任務請求,並發任務分發到由多臺計算機節點2所構成的集群I上執行。在此場景中,每臺計算機節點2擁有ー個或多個中央處理器3,ー個本地文件系統100。該文件系統可以是獨立的,或是作了ー個多臺計算機節點2之間存在的分布式文件系統的一部分。程序4以可執行文件的形式和原始碼或是其它可以被動態或是靜態編譯器進一步優化的中間表示的形式存在於本地文件系統100中。迭代編譯所需的編譯器(編譯器是ー個新增的模塊,用於對程序函數進行優化。)也存在於每臺計算機節點2的本地文件系統100中。IODC 8位於其中一臺計算機上。IODC 8通過監控作業對列5來將程序4的執行時間15待信息收集存入性能資料庫9。基於性能資料庫9中的數據,IODC 8決定優化相應程序4和何時優化。
IODC 8通過作業分派器16來調度編譯7和性能評估測試6等迭代編譯操作的必要步驟。該必要步驟為,編譯7是指調用編譯器將程序從原始碼或中間代碼的形式轉換為可以在計算機上直接執行的目標代碼的過程。在這個過程中需要通過命令行參數或控制文件或環境變量等方法來打開,關閉或是調整編譯器在代碼轉換過程中所進行的優化操作。性能評估測試6是指將編譯得到的可執行目標代碼在計算機上運行,並測量運行時間和對運行結果進行驗證。在運行時,需要為目標代碼提供樣本輸入。性能評估測試6所需的數據集從一個數據集池12中採樣得到。數據集池12裡面儲存著作業對列系統最近執行過的任務所使用的數據集。IODC 8將編譯7和性能評估測試6所花的運行時間15收集並存入性能資料庫9中,以用來估計迭代編譯操作的開銷和估計評測過的優化組合24的加速比。當一個程序性能更好的優化組合被找到和測試後,IODC 8會用其替換現有的生產用優化組合10,使其能作用於後續的對這個程序的請求,獲得更好的性能。IODC 8隻會使用性能積蓄11的一小部分來進行迭代編譯操作,並通過在保守模式13和激進模式14進行切換來控制迭代編譯操作發生的頻率。IODC 8維護ー個由D (D是ー個可調的數字,如3,5,10...)個隨機選取的數據集構成的測試集合來評估不同優化組合的性能和對它們進行正確性的測試。這個測試集合會被周期性的更新為用戶最新使用的數據集,以應對數據集隨時間的不斷變化。D被設為ー個較小的值3,以避免過高的優化開銷。我們使用t-檢驗,所述t-檢驗,是統計學中ー種常用的檢驗,亦稱student t檢驗(Student』 s t test),主要用於樣本含量較小(例如η < 30),總體標準差σ未知的正態分布資料。t-檢驗是用於小樣本(樣本容量小於30)的兩個平均值差異程度的檢驗方法。它是用t-分布理論來推斷差異發生的概率,從而判定兩個平均數的差異是否顯著。來測試兩個優化組合之間的性能差距是否顯著。只有當新的優化組合在95%的信心指數下達到了 I %的性能提升,才會被用來替換當前的生產用優化組合10。在這個場景中,IODC 8因為無法預知ー個程序會被用戶請求的次數,所以無法提前估計ー個優化組合所能帶來的性能積蓄。因此,關於迭代編譯的決策需要在響應每次用戶請求後重新評估。在任意一個時間點,IODC 8能夠用來執行迭代編譯操作的預算多少不僅由從上一次生產用優化組合被替換開始的一段時期內的性能積蓄11的累積決定,也由近期內更好的優化組合被發現的頻率所決定。當更好的優化組合的被發現的頻率比較高,我們應該投入更多的預算來進行迭代編譯操作以期望更快的獲得更高的性能提升。在相反的情況下,我們應該更保守的進行迭代編譯操作以保留更多的收益。如圖4,IODC 8在保守模式13和激進模式14之間自動切換。這兩個模式之間的唯一區別為可花費的性能積蓄11的比例P不同。在保守模式13中P = 5%,在激進模式14中P = 50%。比例P並不是指從頭開始所有的性能積蓄11的比例,而是從上一次模式切換開始的累積性能積蓄。因此,無論模式如何切換,總的性能積蓄11會始終保證增長。本領域的技術人員在不脫離權利要求書確定的本發明的精神和範圍的條件下,還可以對以上內容進行各種各樣的修改。因此本發明的範圍並不僅限於以上的說明,而是由權利要求書的範圍來確 定的。
權利要求
1.一種在線迭代編譯的優化方法,其特徵在於,包括如下步驟 步驟100,控制模塊將相應程序的原始碼或是編譯器進一步優化的中間表示的形式發送到工作模塊,並在所述程序並行處理存於工作模塊的數據記錄的過程中,預測處理完剩餘數據記錄所需時間; 步驟200,工作模塊對所述程序進行迭代編譯優化操作,並將優化結果數據反饋給控制模塊; 步驟300,將所述程序的運行時間和迭代編譯優化操作所花的時間存儲於性能資料庫中,所述性能資料庫存儲全部數據迭代優化操作的開銷和收益,以供控制模塊使用; 所述步驟100還包括 步驟400,進行總結和維護所述數據每次運行中迭代優化操作的開銷和所帶來的性能收益; 步驟500,控制模塊對於全部工作模塊發送的最優組合的局部決策進行挑選,選擇出全局最優的優化組合,作為全局決策推薦給全部工作模塊。
2.如權利要求I所述的在線迭代編譯優化方法,其特徵在於,所述步驟100還包括 步驟210,所述程序為程序函數時,將該程序函數並行處理存於工作模塊的數據記錄的過程中,預測處理完剩餘數據記錄所需時間; 步驟220,控制模塊決定迭代編譯優化操作的時間開銷,並通知工作模塊進行相應的迭代編譯優化操作。
3.如權利要求2所述的在線迭代編譯優化方法,其特徵在於,所述步驟100還包括 步驟310,嘗試不同的編譯優化組合所需的編譯器被部署在所有的工作模塊上; 步驟320,對所述程序函數運行時優化系統進行擴展,使其能夠把所述程序函數的原始碼或是其它被動態或是靜態編譯器進一步優化的中間表示的形式從控制模塊發送到所有的工作模塊; 步驟330,決定優化操作的數量和控制優化操作的執行。
4.如權利要求2所述的在線迭代編譯優化方法,其特徵在於,所述步驟200還包括 步驟410,所述工作模塊一端,在收到控制模塊分配的時間預測任務後,對分布於工作模塊上的數據記錄進行隨機抽樣,組成評估數據記錄,並在所述評估數據記錄中對程序的執行時間進行局部估計,然後將局部估計傳回控制模塊; 步驟420,所述控制模塊在得到工作模塊傳回的局部估計後,使用線性時間預測模型,對所述程序函數的總運行時間進行估計; 步驟430,以優化時間為單位,來決定需要進行多少迭代編譯的操作,並將迭代編譯優化任務分發給工作模塊並發執行。
5.如權利要求2所述的在線迭代編譯優化方法,其特徵在於,所述步驟400還包括 步驟510,將所述程序函數不同次運行中迭代優化操作的開銷和所帶來的性能收益總結並維護於性能積蓄中; 步驟520,根據性能積蓄中的數據信息對迭代編譯的時機和頻率進行控制,以達到保證開銷始終只佔收益的預定義小比例的目標;所述控制的方式是當通過性能資料庫得知性能收益的一部分與一次迭代編譯操作的開銷相當時,則進行一次迭代編譯操作,所述部分具體值由用戶在0%到100%之間設定;步驟530,從由應用高性能的優化組合所得到的性能積蓄中,分配一部分用於迭代編譯操作,所述部分具體值可由用戶在0%到100%之間設定; 步驟540,利用評估數據記錄來對性能收益進行評估;每個工作模塊在其評估數據記錄上評估新的優化組合相對於默認優化組合的加速比,將其發送回控制模塊;控制模塊利用加速比信息和待處理的數據記錄個數總量的信息來估算出使用這個新的優化組合所能帶來的性能積蓄; 步驟550,基於所預測到的性能積蓄,控制模塊決定能夠在工作模塊上進行評估的優化組合的個數,並通知工作模塊完成相應的運算工作。
6.如權利要求2所述的在線迭代編譯優化方法,其特徵在於,所述步驟200還包括 步驟610,所述工作模塊一端,利用編譯器以不同的編譯優化組合對函數的原始碼或 是其它被動態或是靜態編譯器進一步優化的中間表示的形式進行編譯得到相應的可執行碼; 步驟620,利用採樣所得的評估數據記錄,對被指定測試的編譯優化組合得到的可執行碼進行性能評測和正確性測試; 步驟630,每個工作模塊進行迭代編譯操作後,會將所評測的優化組合的加速比分數發送給控制模塊。
7.如權利要求2所述的在線迭代編譯優化方法,其特徵在於,所述步驟500還包括 步驟710,工作模塊上在收到控制模塊推薦的性能更高的生產用優化組合後,會將所述程序函數替換為優化的版本。
8.如權利要求I所述的在線迭代編譯優化方法,其特徵在於,所述步驟100還包括 步驟810,所述程序為運行程序所形成的作業隊列時,監控作業隊列的運行,所述作業隊列,以提交的運行程序的任務形成; 步驟820,通過作業隊列將迭代編譯和性能評估操作分派到到處理模塊集群中執行,每個處理模塊的本地文件系統以獨立形式存在,或存在於處理模塊集群中以分布式文件系統一部分的形式存在;步驟830,將監控所述作業隊列將所述程序的執行時間的信息收集存入性能資料庫。
9.如權利要求8所述的在線迭代編譯優化方法,其特徵在於,所述步驟810還包括 步驟910,通過接收步驟820分派的的編譯和性能評估,測試迭代編譯操作和返回優化結果; 步驟920,調用編譯器將所述程序從原始碼或中間代碼的形式轉換為可以在處理模塊上直接執行的目標代碼的過程;並在所述過程中需要通過命令行參數或控制文件或環境變量等方法來打開,關閉或是調整編譯器在代碼轉換過程中所進行的優化操作。
10.如權利要求8所述的在線迭代編譯優化方法,其特徵在於,所述步驟100還包括 步驟1010,將編譯得到的可執行目標代碼在處理模塊上運行,並測量運行時間和對運行結果進行驗證,在運行時,需要為目標代碼提供樣本輸入; 步驟1020,當一個程序性能更好的優化組合被找到和測試後,處理模塊會用其替換現有的生產用優化組合,使其能作用於後續的對這個程序的請求,獲得更好的性能; 步驟1030,處理模塊使用性能積蓄的一部分來進行迭代編譯操作,並通過在保守模式和激進模式進行切換來控制迭代編譯操作發生的頻率,所述部分具體值由用戶在0%到100%之間設定。
11.如權利要求8所述的在線迭代編譯優化方法,其特徵在於,所述步驟830還包括 步驟1110,性能評估測試所需的數據集從一個數據集池中採樣得到;數據集池裡面儲存著作業對列最近執行過的任務所使用的數據集; 步驟1120,將編譯和性能評估測試所花的運行時間收集並存入性能資料庫中,以用來估計迭代編譯操作的開銷和估計評測過的優化組合的加速比。
12.如權利要求11所述的在線迭代編譯的優化方法,其特徵在於,所述步驟1110還包括 步驟1210,維護一個由D個隨機選取的數據集構成的測試集合來評估不同優化組合的性能和對測試集合進行正確性的測試,所述D為可調的數字; 步驟1220,所述測試集合會被周期性的更新為用戶最新使用的數據集,以應對數據集隨時間的不斷變化。
13.—種在線迭代編譯的優化系統,其特徵在於,包括 控制模塊,用於將相應程序的原始碼或是編譯器進一步優化的中間表示的形式發送到工作模塊,並在所述程序並行處理存於工作模塊的數據記錄的過程中,預測處理完剩餘數據記錄所需時間; 工作模塊,用於對所述程序進行迭代編譯優化操作,並將優化結果數據反饋給控制模塊; 性能資料庫模塊,用於將所述程序的運行時間和迭代編譯優化操作所花的時間存儲於性能資料庫中,所述性能資料庫存儲全部數據迭代優化操作的開銷和收益,以供控制模塊使用; 所述控制模塊還包括 性能積蓄模塊,用於進行總結和維護所述數據每次運行中迭代優化操作的開銷和所帶來的性能收益; 全局決策模塊,用於控制模塊對於全部工作模塊發送的最優組合的局部決策進行挑選,選擇出全局最優的優化組合,作為全局決策推薦給全部工作模塊。
14.如權利要求13所述的在線迭代編譯優化系統,其特徵在於,所述控制模塊還包括 所述數據為程序函數時,將該程序函數並行處理存於工作模塊的數據記錄的過程中,預測處理完剩餘數據記錄所需時間;控制模塊決定迭代編譯優化操作的時間開銷,並通知工作模塊進行相應的迭代編譯優化操作。
15.如權利要求14所述的在線迭代編譯優化系統,其特徵在於,所述控制模塊還包括 編譯器部署模塊,用於嘗試不同的編譯優化組合所需的編譯器被部署在所有的工作模塊上; 擴展發送模塊,用於對所述程序函數運行時優化系統進行擴展,使其能夠把所述程序函數的原始碼或是其它被動態或是靜態編譯器進一步優化的中間表示的形式從控制模塊發送到所有的工作模塊; 迭代編譯總控制模塊,用於決定優化操作的數量和控制優化操作的執行。
16.如權利要求14所述的在線迭代編譯優化系統,其特徵在於,所述工作模塊還包括 採樣模塊,用於所述工作模塊一端,在收到控制模塊分配的時間預測任務後,對分布於工作模塊上的數據記錄進行隨機抽樣,組成評估數據記錄,並在所述評估數據記錄中對程序的執行時間進行局部估計,然後將局部估計傳回控制模塊; 線性時間預測模塊,用於所述控制模塊在得到工作模塊傳回的局部估計後,使用線性時間預測,對所述程序函數的總運行時間進行估計; 迭代編譯預算模塊,用於以優化時間為單位,來決定需要進行多少迭代編譯的操作,並將迭代編譯優化任務分發給工作模塊並發執行。
17.如權利要求14所述的在線迭代編譯優化系統,其特徵在於,所述性能積蓄模塊還包括 優化總結模塊,用於將所述程序函數不同次運行中迭代優化操作的開銷和所帶來的性能收益總結並維護於性能積蓄中; 優化控制模塊,用於根據性能積蓄中的數據信息對迭代編譯的時機和頻率進行控制,以達到保證開銷始終只佔收益的預定義小比例的目標;所述控制的方式是當通過性能資料庫得知性能收益的一部分與一次迭代編譯操作的開銷相當時,則進行一次迭代編譯操作,所述部分具體值由用戶在0%到100%之間設定; 積蓄分配模塊,用於從由應用高性能的優化組合所得到的性能積蓄中,分配一部分用於迭代編譯操作,所述部分的具體值可由用戶在0%到100%之間設定; 積蓄估計模塊,用於利用評估數據記錄來對性能收益進行評估;每個工作模塊在其評估數據記錄上評估新的優化組合相對於默認優化組合的加速比,將其發送回控制模塊;控制模塊利用加速比信息和待處理的數據記錄個數總量的信息來估算出使用這個新的優化組合所能帶來的性能積蓄; 優化數量模塊,用於基於所預測到的性能積蓄,控制模塊決定能夠在工作模塊上進行評估的優化組合的個數,並通知工作模塊完成相應的運算工作。
18.如權利要求14所述的在線迭代編譯優化系統,其特徵在於,所述工作模塊還包括 執行碼生成模塊,用於利用編譯器以不同的編譯優化組合,對函數的原始碼或是其它被動態或是靜態編譯器進一步優化的中間表示的形式,進行編譯得到相應的可執行碼;優化組合評測模塊,利用採樣所得的評估數據記錄,對被指定測試的編譯優化組合得到的可執行碼進行性能評測和正確性測試; 分數模塊,用於每個工作模塊進行迭代編譯操作後,會將所評測的優化組合的加速比分數發送給控制模塊。
19.如權利要求14所述的在線迭代編譯優化系統,其特徵在於,所述全局決策模塊還包括 優化結果片理模塊,用於工作模塊上在收到控制模塊推薦的性能更高的生產用優化組合後,會將所述程序函數替換為優化的版本。
20.如權利要求13所述的在線迭代編譯優化系統,其特徵在於,所述控制模塊還包括 處理模塊,用於所述數據為運行程序所形成的作業隊列時,監控作業隊列的運行,所述作業隊列,以用戶提交的運行程序的任務形成; 操作分派模塊,用於通過作業隊列將迭代編譯和性能評估操作分派到到處理模塊集群中執行,每個處理模塊的本地文件系統以獨立形式存在,或存在於處理模塊集群中以分布式文件系統一部分的形式存在;監測模塊,用於將監控所述作業隊列將所述程序的執行時間的信息收集存入性能資料庫。
21.如權利要求20所述的在線迭代編譯優化系統,其特徵在於,所述處理模塊還包括 迭代編譯操作模塊,用於通過接收操作分派模塊分派的的編譯和性能評估,測試迭代編譯操作和返回優化結果; 編譯模塊,用於調用編譯器將所述程序從原始碼或中間代碼的形式轉換為可以在處理模塊上直接執行的目標代碼的過程;並在所述過程中需要通過命令行參數或控制文件或環境變量等系統來打開,關閉或是調整編譯器在代碼轉換過程中所進行的優化操作。
22.如權利要求20所述的在線迭代編譯優化系統,其特徵在於,所述控制模塊還包括 優化評測模塊,用於將編譯得到的可執行目標代碼在處理模塊上運行,並測量運行時間和對運行結果進行驗證,在運行時,需要為目標代碼提供樣本輸入; 優化選擇模塊,用於當一個程序性能更好的優化組合被找到和測試後,處理模塊會用其替換現有的生產用優化組合,使其能作用於後續的對這個程序的請求,獲得更好的性倉泛; 模式選擇模塊,用於處理模塊使用性能積蓄的一部分來進行迭代編譯操作,並通過在保守模式和激進模式進行切換來控制迭代編譯操作發生的頻率,所述部分具體值由用戶在0%到100%之間設定。
23.如權利要求20所述的在線迭代編譯優化系統,其特徵在於,所述監測模塊還包括 數據集池模塊,用於性能評估測試所需的數據集從一個數據集池中採樣得到;數據集池裡面儲存著作業對列最近執行過的任務所使用的數據集; 性能記錄模塊,用於將編譯和性能評估測試所花的運行時間收集並存入性能資料庫中,以用來估計迭代編譯操作的開銷和估計評測過的優化組合的加速比。
24.如權利要求23所述的在線迭代編譯的優化系統,其特徵在於,所述數據集池模塊還包括 測試集合模塊,用於維護一個由D個隨機選取的數據集構成的測試集合來評估不同優化組合的性能和對測試集合進行正確性的測試,所述D為可調的數字;所述測試集合會被周期性的更新為用戶最新使用的數據集,以應對數據集隨時間的不斷變化。
全文摘要
本發明公開一種在線迭代編譯的優化方法及優化系統,該優化方法包括如下步驟步驟100,控制模塊將相應程序的原始碼或是編譯器進一步優化的中間表示的形式發送到工作模塊,並在所述程序並行處理存於工作模塊的數據記錄的過程中,預測處理完剩餘數據記錄所需時間;步驟200,工作模塊對所述程序進行迭代編譯優化操作,並將優化結果數據反饋給控制模塊;步驟300,將所述程序的運行時間和迭代編譯優化操作所花的時間存儲於性能資料庫中,所述性能資料庫存儲全部數據迭代優化操作的開銷和收益,以供控制模塊使用。
文檔編號G06F9/45GK102622260SQ20121004848
公開日2012年8月1日 申請日期2012年2月27日 優先權日2012年2月27日
發明者利文·艾可霍特, 吳承勇, 奧裡維·特曼, 房雙德, 陳洋 申請人:中國科學院計算技術研究所, 國家信息及自動化研究院, 根特大學