Existem otimizadores completos para a finalização de programas?


20

No livro de Andrew W. Appel, Modern Compiler Implementation in ML , ele diz no capítulo 17 que a teoria da Computabilidade mostra que sempre será possível inventar novas transformações de otimização e prossegue para provar que um compilador totalmente otimizado resolverá o problema de parada: Um programa Q que não produz saída e nunca pára pode ser facilmente substituído por sua representação ideal, Opt (Q) , sendo "L: goto L". Portanto, um compilador totalmente otimizado pode resolver o problema de parada.

Portanto, minha pergunta é a seguinte: Existe um compilador totalmente otimizado para finalizar programas? Meus únicos pensamentos são os seguintes: Mesmo que um programa seja garantido para terminar, ele ainda pode ser arbitrariamente complexo e, para qualquer compilador de otimização concreto, C, talvez seja possível construir um programa que tome C como entrada e, de alguma forma, produza um programa pior. algum tipo de caixa de canto.

Além disso, quais são as implicações de nos restringir ao encerramento de programas?


2
É difícil até encontrar a sequência de instruções ideal para um único bloco de código sem fluxo de controle. O superoptimization artigo sobre Wikipedia dá uma boa introdução (com citações.)
Wandering Logic

O artigo da Wikipedia menciona que a super otimização analisa seqüências de instruções sem loop. Não ter laços, suponho, é outra maneira de dizer que termina. Ao olhar brevemente para as referências disponíveis, parece ser possível, mas extremamente caro.
Simon 'Reinstate Monica' Shine

2
Qual é o significado de "otimizar" aqui? Menor tempo de execução? Em caso afirmativo, qual: pior caso, caso médio, todo caso, algum caso, ...?
Raphael

Respostas:


16

Presumo que você esteja interessado em otimização do tempo de execução. Como escrevi em meu comentário, isso não especifica suficientemente o objetivo: uma otimização reduz o tempo de execução de qualquer entrada, cada entrada, todas as entradas de pior caso ou até em média ?

Vou mostrar que todos eles são impossíveis. A prova se estende para otimizar a duração do programa.

Lembre-se de que o seguinte problema não é computável:

Dada uma gramática livre de contexto com alfabeto terminal , decida se .GΣeu(G)=Σ

Observe ainda que, dada uma gramática livre de contexto , podemos codificar, digamos, o algoritmo CYK dessa gramática; denote esse algoritmo por . Observamos que termina para todas as entradas (de ).GCYKGCYKGΣ

Agora suponha que exista um otimizador que, dado um algoritmo sempre terminador , produza um algoritmo equivalente a resultado que seja ideal em relação ao tempo de execução. Claramente,OptarUMA

Optar(CYKG)="retvocêrn trvocêe;"eu(G)=Σ

e assim construímos uma decisão para um problema incontestável, contradizendo a suposição.


Obrigado por este argumento. Algumas perguntas esclarecedoras: O que é ? Presumo é a linguagem gerada pela gramática . Σeu(G)G
Simon 'Reinstate Monica' Shine

3
@ Simon: é o conjunto de todas as palavras. Rafael: Boa prova. Na verdade, você não precisa de gramáticas livres de contexto; em vez disso, dada uma máquina de Turing você pode criar um programa que simula etapas para e retorna verdadeiro se a máquina atingir um estado de aceitação. Então seria se não parar. ΣMPM(Eu)MEuOPTAR(PM)"retvocêrn fumaeuse;"M
Sdcvvc
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.