Minimisasi Program

10

Minimisasi Sirkuit adalah masalah untuk meminimalkan ukuran sirkuit yang diberikan. Apakah ada yang serupa untuk program umum?

Khususnya pertanyaan saya adalah -

Apakah ada algoritma untuk meminimalkan # instruksi untuk program yang diberikan. Saya tahu ini masalah yang tidak dapat diputuskan, tetapi saya tidak mencari solusi yang mengembalikan sesuatu yang optimal.

Sementara seseorang dapat menerapkan transformasi kompiler yang sudah ada sebelumnya untuk mencapai ini, saya mencari sesuatu di mana saya tidak harus mendefinisikan satu set transformasi yang sangat sempit dan algoritma untuk mencari mereka sebelumnya.

Sunting: Pertanyaan lain yang saya miliki adalah apakah seseorang dapat memiliki kalkulus yang baik dan lengkap yang memungkinkan kita menjelajahi seluruh ruang dari program yang secara semantik setara atau tidak mungkin.

Memilih
sumber
2
Jawaban untuk pertanyaan Anda yang lain tergantung pada definisi Anda tentang "kalkulus". Fakta bahwa HALT tidak ada dalam coRE membuat jawaban "tidak" untuk sebagian besar definisi seperti itu.
fn

Jawaban:

10

Ada algoritma naif untuk program dengan input ukuran terbatas: sebutkan semua program dengan urutan penambahan panjang (atau waktu eksekusi, yang merupakan fungsi panjang yang dibatasi). Jika Anda dapat membuktikan bahwa program tersebut setara dengan yang asli, hentikan; jika tidak, terus mencari.

Algoritma ini adalah suara. Agar lengkap, Anda harus dapat membuktikan bahwa semua program yang ditolak tidak setara dengan yang asli. Ini dimungkinkan dalam model mesin finitari, selama Anda memiliki batasan untuk ukuran input.

Perhatikan bahwa ketika waktu pelaksanaan program tergantung pada input, mungkin tidak ada solusi optimal. Jika Anda mencari misalnya ikatan kasus terburuk, Anda akan dengan cepat mengalami kesetaraan yang tidak dapat diputuskan ketika Anda menghitung semua kemungkinan input yang tidak terikat, dan menjadi masalah yang tidak dapat diatasi jika input dibatasi.

Satu dekade yang lalu, “Denali: A Optimal-Directed Goal” oleh Rajeev Joshi, Greg Nelson dan Keith Randall mampu menemukan program optimal sekitar 5 instruksi mesin. Saya belum melihat hasil yang lebih baru.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
5
Salah satu siswa kami di sini di Universitas Sussex menggunakan superoptimisasi untuk mempersingkat lamanya rutin inti Java (seperti penambahan). Dia membakar sangat banyak perhitungan Amazon EC2 untuk melakukan ini. Disertasinya ada di sini . Jelas bukan pendekatan yang layak untuk apa pun kecuali program yang benar-benar singkat.
Martin Berger