プログラムを終了するためのコンパイラを完全に最適化していますか?


20

Andrew W. Appelの著書「MLのModern Compiler Implementation」では、第17章で、計算可能性理論は新しい最適化変換を発明することが常に可能であることを示し完全に最適化するコンパイラーが停止する問題を解決することを証明することに進むと述べています:プログラム出力を生成せず、停止しないQは、最適な表現であるOpt(Q)に簡単に置き換えることができ、「L:goto L」です。したがって、完全に最適化されたコンパイラは、停止する問題を解決できます。

だから私の質問はこれです:プログラムを終了するための完全に最適化されたコンパイラは存在しますか?私の唯一の考えは次のとおりです。プログラムは終了することが保証されていますが、それはまだ任意に複雑である可能性があり、具体的な最適化コンパイラCの場合、おそらくCを入力として受け取り、何らかの形でより悪いプログラムを生成するプログラムを構築できますある種のコーナーケース。

また、自分自身をプログラムの終了に制限することの意味は何ですか?


2
制御フローがまったくないコードの単一ブロックに最適な命令シーケンスを見つけることさえ困難です。ウィキペディアの超最適化の記事は、イントロ(引用あり)を提供します。
Wandering Logic

ウィキペディアの記事では、超最適化はループのない命令シーケンスに注目することに言及しています。ループがないことは、ループが終了したことを示す別の方法です。入手可能な参考文献を簡単に見ると、可能ですが、非常に高価です。
サイモン「Reinstate Monica」シャイン

2
ここで「最適化」の意味は何ですか?ランタイムが小さい?もしそうなら、どれ:最悪の場合、平均的な場合、すべての場合、ある場合、...?
ラファエル

回答:


16

ランタイムの最適化に興味があると思います。私は私のコメントで書いたとおり、それは十分に目標を指定していない:最適化は、上のランタイムを減らすん任意の、入力ごとに入力、すべての最悪の場合の入力、あるいは平均的に

それらすべてが不可能であることを示します。証明は、プログラムの長さの最適化にまで及びます。

次の問題は計算できないことを思い出してください。

終端アルファベットΣを持つ文脈自由文法が与えられた場合、LG = Σ かどうかを決定し ます。GΣL(G)=Σ

さらに、コンテキストなしの文法が与えられた場合、その1つの文法のCYKアルゴリズムをハードコーディングできることに注意してください。このアルゴリズムをC Y K Gで示します。私たちは、ことを確認C Y K Gは(からのすべての入力のために終了しますΣ *)。GCYKGCYKGΣ

オプティマイザーあり、常に終了するアルゴリズムAが与えられると、実行時間に関して最適な結果等価アルゴリズムを出力すると仮定します。明らかに、OptA

Opt(CYKG)='return true;'L(G)=Σ

そして、このように仮定に反する計算不可能な問題の決定者を構築しました。


この議論をありがとう。いくつかの明確な質問:とは何ですか?LG は文法Gによって生成された言語だと思います。ΣL(G)G
サイモン「Reinstate Monica」シャイン

3
ΣMPM(i)MiOPT(PM)'return false;'M
sdcvvc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.