実際、私はコンパイラの最適化技術を実装する主要なプロジェクトを作成しています。既存の手法については既に知っていますが、どの手法を選択し、どのように実装するかについて混乱しています。
4 に答える
G'day、
最適化のどの領域について話しているのですか?
次のようなコンパイラの最適化:
- ループの最適化
- データフローの最適化
- 静的単一代入ベースの最適化
- コードジェネレーターの最適化
- 等
- 等
または、コンパイラ自体のパフォーマンス、つまりコンパイラが動作する速度の最適化ですか?
最適化するコンパイラがあり、それが自分で書かれたものでない場合は、ドキュメントを調べて不足しているものを確認してください。それ以外の場合は、自分で作成した場合は、最も単純なものから始めることができます。最も単純な定義は、コンパイラが使用する言語によって異なります。または、何か不足していますか?
質問を最適化しすぎた可能性があると思います。どこから始めればよいか、または実装する価値のある最適化とそうでない最適化があるかどうかを判断しようとしていますか? 既存のすべての手法には場所があり、遭遇するコードに応じて有用であると思います。どれを先にやるか迷ったら、できることを選んで実行してください。ぶら下がっている果物を選んでください。厳しいものに取り組み、つまずいてイライラする前に、バックポケットにいくつかの勝利を収めてください。本当の秘訣は、そこにすべての最適化があり、機能しているが、特定のプログラムにとってどれがより良いものを生み出し、どれが邪魔になって事態を悪化させるかを判断する方法を考え出すことだと思います.
私見、やるべきことは、単純で明白な最適化を実装し、それを休ませることです。確かに、奇妙で素晴らしい最適化を行って、ユーザーが簡単にコーディングした可能性のあるものを修正しようとするのは非常に興味深いことですが、コーディングやデザインが不十分な後にクリーンアップを試みたい場合は、ユーザーはいつでもあなたを追い越すことができます。これは私のお気に入りの例です。
私のお気に入りのcompiler-optimizations-gone-nutsの例は、Fortranコンパイラーです。このコンパイラーでは、コードをスクランブルして、コードをデバッグすることがほとんど不可能ないくつかの仮想サイクルを削ります。通常、プログラムカウンターは1未満です。 %の時間なので、労力は無駄になります。