프로그램 종료를 위해 완전히 최적화 된 컴파일러가 있습니까?


20

Andrew W. Appel의 저서 ML의 Modern Compiler Implementation에서 17 장에 따르면 Computability 이론은 새로운 최적화 변환을 발명하는 것이 항상 가능 하며 완전히 최적화 된 컴파일러 가 정지 문제를 해결할 수 있음을 증명한다고 17 장에서 밝혔 습니다 . Q 어떠한 출력을 생성 결코 정지하고 용이하게 최적의 표현으로 대체 될 수 옵트 (Q) , 상태 ": 고토 L L". 따라서 완전히 최적화 된 컴파일러는 정지 문제를 해결할 수 있습니다.

그래서 내 질문은 이것입니다 : 프로그램을 종료하기 위해 완전히 최적화 된 컴파일러가 있습니까? 내 유일한 생각은 다음과 같습니다. 프로그램이 종료된다는 보장은 있지만 여전히 복잡 할 수 있으며 구체적인 최적화 컴파일러 인 C의 경우 C를 입력으로 사용하여 프로그램을 더 악화시킬 수 있습니다. 코너 케이스의 일종.

또한 프로그램 종료로 제한하는 것은 무엇을 의미합니까?


2
제어 흐름이 전혀없는 단일 코드 블록에 대한 최적의 명령 시퀀스를 찾기조차 어렵습니다. Wikipedia에 대한 초 최적화 기사는 좋은 소개를 제공합니다 (인용문 포함)
Wandering Logic

Wikipedia 기사는 초 최적화가 루프없는 명령 시퀀스를 검토한다고 언급합니다. 루프가 없으면 종료한다고 말하는 또 다른 방법입니다. 이용 가능한 참고 문헌을 간단히 살펴보면 가능하지만 매우 비싸다.
Simon '복귀 모니카'샤인

2
여기서 "최적화"의 의미는 무엇입니까? 더 작은 런타임? 그렇다면, 최악의 경우, 평균적인 경우, 모든 경우, 어떤 경우, ...?
라파엘

답변:


16

런타임 최적화에 관심이 있다고 가정합니다. 필자가 작성한 의견에 따르면 목표를 충분히 지정하지 못합니다. 최적화는 모든 입력, 모든 입력, 모든 최악의 입력 또는 평균에서의 런타임을 줄 입니까?

나는 그들 모두가 불가능하다는 것을 보여줄 것이다. 증명은 프로그램의 길이를 최적화하는 것으로 확장됩니다.

다음과 같은 문제는 계산할 수 없습니다.

터미널 알파벳 Σ 와 함께 문맥이없는 문법 가 주어지면 L ( G ) = Σ 인지 결정합니다 .GΣL(G)=Σ

또한 문맥이없는 문법 가 주어지면 , 그 문법 하나에 대해 CYK 알고리즘을 하드 코딩 할 수 있습니다. 이 알고리즘을 C Y K G로 표시하십시오 . 모든 입력에 대해 C Y K G가 종료 됨을 관찰합니다 ( Σ ).GCYKGCYKGΣ

이제 항상 종료 알고리즘 A가 주어지면 런타임과 관련하여 최적 인 결과와 동등한 알고리즘을 출력 하는 옵티 마이저 가 있다고 가정하십시오 . 분명히,OptA

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

따라서 우리는 가정과 모순되는 계산 불가능한 문제에 대한 결정자를 구성했습니다.


이 논쟁에 감사드립니다. 몇 가지 명확한 질문 : 란 무엇입니까 ? 나는 문법 G에 의해 생성 된 언어 인 L ( G ) 이라고 가정한다 . ΣL(G)G
사이먼 '복귀 모니카'샤인

3
ΣMPM(i)MiOPT(PM)'return false;'M
sdcvvc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.