0

我正在嘗試使用圖着色來做一個關於寄存器分配的研究/項目,在這裏我將測試不同場景下不同優化寄存器分配算法的效率。寄存器分配算法的效率

我該如何開始?我可以測試他們的先決條件和理由是什麼? 我可以使用什麼算法?


加成

其實我是想的快捷方式離開這裏,我沒有做更深入的研究,但要提交(無恥)一個現成的分析到我的項目有一點強調'效率'。即哪種類型的優化技術最適合不同的任務/編譯器/解釋器。

所以我的主要任務是(如何)在我的程序中實現寄存器分配。 我在Core2 Duo機器上使用64位Linux系統。我認識C,C++和Java。

謝謝!

+1

您可能需要使這個問題更具體些,或使其成爲CW。目前還沒有簡單的答案。 – 2010-04-19 15:07:24

回答

0

基線 - 假設您需要一套測試用例 - 從簡單到複雜 - 測試繁重的註冊使用情況,尤其是溢出。我相信這有一些共同的/標準的。你需要在一個基本的編譯器和一個高性能的現代編譯器上對它們進行配置文件分析,並分析程序集的輸出結果以確定發生了什麼。這會給你一個基準。

開發 - 選擇一個編譯器(或寫一個)。一個較舊的是LCC - 它很舊,很小,很簡單,但有一本書可以全面解釋它。較新的替代方案可能是LLVM或GCC。一些編譯器已經用於這種研究 - 你甚至可以使用命令行開關在一系列分配器之間切換。

或者,澄清問題 - 我們在談論C語言嗎?動態的?即時編譯?你想知道什麼? CPU的目標是什麼?

+0

嗨!謝謝你的回覆,我已經加入了我的問題。 謝謝! – aksci 2010-04-20 04:35:10

0

LCC是非優化的權利?那好吧,我想你會想要許多不同的編譯器,因爲沒有兩個版本的同一個編譯器和兩個編譯器會以同樣的方式實現相同的優化。

我認爲您需要先關注反彙編器,然後分析代碼流,然後註冊使用情況。實際上,在這之前,再次選擇一個ISA(指令集),相同的代碼相同的編譯器將根據特定的目標產生不同的結果,甚至是同一系列中的特定目標。

歸因於優化算法的寄存器分配結果的主題非常寬且非常動態。它與基準一致。儘管這聽起來像是一個有趣的話題,但我認爲你會發現,無論是否進行優化,有或沒有數十個通用寄存器,大多數編譯器最終只使用少數寄存器。 (幾個傳遞參數和一些函數來實現該功能)