Programları sonlandırmak için tamamen optimize edici derleyiciler var mı?


20

Andrew W. Appel'in ML'deki Modern Derleyici Uygulaması kitabında bölüm 17'de Hesaplanabilirlik teorisinin yeni optimizasyon dönüşümleri icat etmenin her zaman mümkün olacağını ve tamamen optimize eden bir derleyicinin durma problemini çözeceğini kanıtladığını söylüyor : Bir program Hiçbir çıkış üretmeyen ve hiç durmayan Q'nun yerine optimum temsili olan Opt (Q) , "L: goto L" olarak değiştirilebilir. Böylece tamamen optimize eden bir derleyici durma problemini çözebilir.

Benim sorum şu: Programları sonlandırmak için tamamen optimize edici bir derleyici var mı? Benim tek düşüncem şudur: Bir programın sona erdirilmesi garanti edilse de, yine de keyfi olarak karmaşık olabilir ve herhangi bir beton optimizasyon derleyicisi C için, belki de C'yi girdi olarak alan ve bir şekilde daha kötü bir program üreten bir program oluşturulabilir. bir çeşit köşe kılıfı.

Ayrıca, kendimizi programları sonlandırmakla sınırlamanın etkileri nelerdir?


2
Hiç kontrol akışı olmayan tek bir kod bloğu için en uygun komut dizisini bulmak bile zordur. Superoptimization Vikipedi'de makale iyi bir intro verir (alıntılı.)
Dolaşan Logic

Wikipedia makalesinde, süper-optimizasyonun döngüsüz talimat dizilerine baktığı belirtiliyor. Sanırım hiçbir döngüye sahip olmak, sonlandığını söylemenin başka bir yoludur. Mevcut referanslara kısaca bakıldığında, mümkün ancak oldukça pahalı gibi görünmektedir.
Simon 'Monica'yı Yeniden Başlat' Shine

2
Burada "optimize et" in anlamı nedir? Daha küçük çalışma süresi? Eğer öyleyse, hangisi: en kötü durum, ortalama durum, her durum, bir durum, ...?
Raphael

Yanıtlar:


16

Çalışma zamanının optimizasyonu ile ilgilendiğinizi varsayıyorum. Yorumumda yazdığım gibi, bu yeterli bir hedef belirtmiyor: bir optimizasyon herhangi bir girdi, her girdi, tüm en kötü durum girdileri veya hatta ortalama çalışma süresini azaltır mı?

Hepsinin imkansız olduğunu göstereceğim. Kanıt, programın uzunluğunu optimize etmeye kadar uzanır.

Aşağıdaki sorunun hesaplanamayacağını hatırlayın:

Terminal alfabe with ile bağlamsız bir gramer verildiğinde , L ( G ) = Σ olup olmadığına karar verin .G,ΣL(G,)=Σ*

Ayrıca, bağlamsız bir dilbilgisi verildiğinde , söz konusu dilbilgisi için CYK algoritmasını düzeltebiliriz; bu algoritmayı C Y K G ile belirtir . C Y K G'nin tüm girdiler için sonlandığını gözlemliyoruz ( Σ ).G,CYKG,CYKG,Σ*

Hemen optimiser olduğunu varsayalım , bir zaman sona algoritması belirli bir çalışma zamanında göre optimal bir sonuç eşdeğer algoritma verir. Açıkça,seçmekbir

seçmek(CYKG,)='return true;'L(G,)=Σ*

ve bu nedenle, varsayımla çelişen hesaplanamayan bir sorun için bir karar verdik.


Bu tartışma için teşekkür ederim. Birkaç açıklayıcı soru: nedir? L ( G ) nin dilbilgisi G tarafından üretilen dil olduğunu varsayıyorum . Σ*L(G,)G,
Simon 'Monica'yı Yeniden Başlat' Shine

3
@Simon: tüm kelimelerin kümesidir. Raphael: Güzel kanıt. Aslında bağlamsız gramerlere ihtiyacınız yoktur; bunun yerine, bir Turing makinesi M verildiğinde , i adımları için M'yi simüle eden ve makine kabul eden bir duruma ulaştığında true değerini döndüren bir P M ( i ) programı oluşturabilirsiniz . Daha sonra OPT ( P E ) olur ' r e t u r n f bir L s E ; ' İff M durdurulmaz. Σ*MPM(ben)MbenOPT(PM)'return fbirlse;'M
sdcvvc
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.