0

グラフの色付けを使用してレジスタ割り当てに関する研究/プロジェクトを実行しようとしています。ここでは、さまざまなシナリオでさまざまな最適化レジスタ割り当てアルゴリズムの効率をテストしています。

どうすれば始められますか? それらをテストできる前提条件と根拠は何ですか? どのアルゴリズムを使用できますか?


追加

私は実際にこれを手っ取り早く解決したいと思っています。詳細な調査は行っていませんが、「効率」に少し重点を置いて、すぐに利用できる分析をプロジェクトに (恥知らずに) 提出したいと考えています。つまり、さまざまなタスク/コンパイラ/インタプリタに最適な最適化手法の種類は何か。

したがって、私の主な仕事は、プログラムにレジスタ割り当てを (どのように) 実装するかです。Core2 Duo マシンで 64 ビット Linux システムを使用しています。私は C、C++、および Java を知っています。

ありがとうございました!

4

2 に答える 2

0

ベースライン- おそらく、レジスターの大量使用、特にスピルをテストする一連のテスト ケース (単純なものから複雑なものまで) が必要になるでしょう。これにはいくつかの一般的/標準的なものがあると思います。基本的なコンパイラと高パフォーマンスの最新のコンパイラでそれらをプロファイリングし、アセンブリ出力を分析して何が起こっているのかを突き止めたいと思うでしょう。それはあなたにベースラインを与えるでしょう。

開発- コンパイラを選択 (または作成)。古いものはLCCです。古くて小さくてシンプルですが、詳しく説明した本があります。新しい代替手段は LLVM か、おそらく GCC かもしれません。一部のコンパイラは、この種の研究に既に使用されています。コマンド ライン スイッチを使用して、アロケータの範囲を切り替えることさえできる場合があります。

または、質問を明確にしてください-私たちはCスタイルの言語を話しているのでしょうか? 動的なもの?JITした?何を知ろうとしていますか?対象のCPUは何ですか?

于 2010-04-19T15:38:51.430 に答える
0

LCCは非最適化ですよね?同じコンパイラの 2 つのバージョンや 2 つのコンパイラが同じ最適化を同じ方法で実装することはないため、多くの異なるコンパイラが必要になると思います。

最初に逆アセンブラに焦点を当て、次にコード フローを分析してから、使用法を登録する必要があると思います。実際には、その前に ISA (命令セット) を選択します。ここでも、同じコードの同じコンパイラが、特定のターゲット (同じファミリ内の特定のターゲットであっても) に応じて、同じ最適化に対して異なる結果を生成します。

最適化アルゴリズムによるレジスタ割り当て結果のトピックは、非常に幅広く、非常に動的です。ベンチマークと同等です。それでも興味深いトピックのように聞こえますが、最適化の有無にかかわらず、多数の汎用レジスタの有無にかかわらず、ほとんどのコンパイラはほんの一握りのレジスタしか使用しないことに気付くと思います。(引数を渡すためのいくつかと、関数を実装するための関数ごとの少数)

于 2010-04-19T16:43:29.040 に答える