2011-11-06 81 views
3

我正在做一個項目來自動處理gcc編譯器優化選項,而無需程序員指定。我決定使用旅行推銷員算法和遺傳算法來選擇基於執行速度的最佳優化。這個應用程序會將一個問題(C++代碼)作爲輸入,並對GCC編譯器中的所有可用優化選項進行排列組合,並存儲執行所需的時間。使用基因加權遺傳算法自動選擇GCC優化選項

現在,是否可以在Shell腳本中編程?或者我必須用C++編程?

繼承人鏈接到原稿紙。 http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4625477

請讓我知道,如果我錯了整個概念。如果你能帶領我走上正確的道路並提出任何建議,那將會非常有幫助。

謝謝。

+1

http://freecode.com/projects/acovea做那樣的 – Mat

+1

我不確定,但我記得一個已經執行這種方法的組。我不能在gcc頁面上快速瀏覽它,也許你應該看一下gcc郵件存檔。 – flolo

+0

您可以生成一個包含您要測試的優化序列列表的文件 – staticx

回答

0

我認爲這明確證明了GCC有太多選擇的古老建議。

至於回答你的具體問題,雖然我認爲你要做的事情最終沒有多大價值。其中一個主要問題是你的基因只適合特定的架構,環境和gcc版本。

另外,我很確定在大多數現實生活中,熟悉GCC的人會比你的算法更好。

我不是故意在你的遊行或任何事情上下雨,這當然是一個有趣的技術/智力練習。我會編寫一個C/C++程序輸出一個shell腳本/命令行,然後運行結果腳本/命令行,對它進行計時,並存儲運行所需的時間以及結果的正確性。某些優化可能會導致某些代碼以不同的方式執行,從而導致錯誤的結果。確保你的測試用例輸出的是數字數據,這樣你就可以計算出你的優化程序與你期待的結果有多接近。您的測試案例將永遠不會覆蓋足夠的基礎,在這裏,您的健身功能將主要是猜測(因爲它將很大程度上取決於當時機器上運行的其他進程以及它們是什麼這樣做)。這將需要一段時間才能發展。

+0

謝謝@Chris Browne。 – clu3Less

+0

其實我曾經想過關於這種類型的應用程序的滯後和準確性問題,尤其是因爲大量的測試用例。但除了這些問題之外,是否可以通過最小化測試用例的數量來編寫這樣的程序?輸出集中在一種類型的架構/平臺上。當我的大四給我這個項目時,我對這個話題沒有任何希望。但除此之外,我別無選擇。 Thnx再次。 – clu3Less

+0

您使用的測試用例數量是運行生成時間和結果準確度之間的折衷。此外,每個測試案例的大小和複雜性。我會去做幾個大的複雜測試用例,而不是很多小的,簡單的測試用例,因爲我相信這會是最低的開銷和最好的最終結果(實際代碼更可能是龐大而複雜的)。儘管如此,也要投入一兩個小的投入,以確保算法能夠很好地適應較小的投入(如果這是一個約束)。 –

1

Milepost Ctuning項目完全按照(INRIG的Grigori Fursin,Albert Cohen)的工作方式使用機器學習技術來調整GCC優化。

您可以使用GCC MELT擴展名來做同樣的事情。