Stalin derleyici vahşice optimize eder, ama nasıl?


14

JM Siskind'in araştırma bildirisinde şunlar belirtiliyor:

Stalin, tüm program statik analizi yapan ve son derece verimli kod üretmek için bu analiz sonuçlarını kullanan Scheme için optimize edici bir derleyicidir. Stalin geniş bir statik analiz teknikleri koleksiyonu kullanır. Akışa yönelik bölünmeyi gerçekleştirmek için yinelenen monovaryant akış analizini kullanan yeni bir polivaryant akış analizi formu gerçekleştirir: prosedürlerin özel kopyalarının klonlanması ve bu klonlara hedeflerin çağrı başına tayin edilmesi. Yaşam boyu analiz, kaçış analizi, noktadan analiz ve zorunlu takma ad analizi yapmak için akış analizi sonuçlarını kullanır. Bu analizler, değişken küreselleşme ve yerelleştirme gibi teknikleri kullanarak çoğu kapatma yuvasını ortadan kaldıran, statik arka zinciri sıkıştıran ve genellikle programlardan çoğu kapanmayı ortadan kaldıran yeni bir hafif kapatma dönüşümü biçimini destekler. Ayrıca, çalışma zamanı çöp toplamasının, soyut değer ve program başına nokta temelinde statik ayırma ve yeniden yerleştirme ile değiştirildiği, akışa yönelik bölge tabanlı depolama yönetimini desteklemek için yukarıdaki analizleri kullanır. Ayrıca, son derece verimli birinci sınıf devamları desteklemek için Screamer ile öncülük edilen tekniklerin uzantılarını kullanarak akışa yönelik hafif CPS dönüşümü gerçekleştirir. Son olarak, etiketlerin uygulanmasını (veya uygulanmamasını), etiket denetimini ve soyut olarak değer başına ve program başına nokta temelinde etiket göndermeyi seçmek için akışa yönelik satır içi ve düşük düzeyli temsil seçimini destekler. Bu, çoğu çalışma zamanı etiketini, etiket kontrolünü, etiketlemeyi, etiket soymayı, etiket göndermeyi, boksu ve programlardan çıkarmayı ortadan kaldırır. burada çalışma zamanı çöp toplama yerine, soyut değer ve program başına nokta temelinde statik ayırma ve dağıtma kullanılır. Ayrıca, son derece verimli birinci sınıf devamları desteklemek için Screamer ile öncülük edilen tekniklerin uzantılarını kullanarak akışa yönelik hafif CPS dönüşümü gerçekleştirir. Son olarak, etiketlerin uygulanmasını (veya uygulanmamasını), etiket denetimini ve soyut olarak değer başına ve program başına nokta temelinde etiket göndermeyi seçmek için akışa yönelik satır içi ve düşük düzeyli temsil seçimini destekler. Bu, çoğu çalışma zamanı etiketini, etiket kontrolünü, etiketlemeyi, etiket soymayı, etiket göndermeyi, boksu ve programlardan çıkarmayı ortadan kaldırır. burada çalışma zamanı çöp toplama yerine, soyut değer ve program başına nokta temelinde statik ayırma ve dağıtma kullanılır. Ayrıca, son derece verimli birinci sınıf devamları desteklemek için Screamer ile öncülük edilen tekniklerin uzantılarını kullanarak akışa yönelik hafif CPS dönüşümü gerçekleştirir. Son olarak, etiketlerin uygulanmasını (veya uygulanmamasını), etiket denetimini ve soyut olarak değer başına ve program başına nokta temelinde etiket göndermeyi seçmek için akışa yönelik satır içi ve düşük düzeyli temsil seçimini destekler. Bu, çoğu çalışma zamanı etiketini, etiket kontrolünü, etiketlemeyi, etiket soymayı, etiket göndermeyi, boksu ve programlardan çıkarmayı ortadan kaldırır. son derece verimli birinci sınıf devamları desteklemek için Screamer ile öncü tekniklerin uzantılarını kullanmak. Son olarak, etiketlerin uygulanmasını (veya uygulanmamasını), etiket denetimini ve soyut olarak değer başına ve program başına nokta temelinde etiket göndermeyi seçmek için akışa yönelik satır içi ve düşük düzeyli temsil seçimini destekler. Bu, çoğu çalışma zamanı etiketini, etiket kontrolünü, etiketlemeyi, etiket soymayı, etiket göndermeyi, boksu ve programlardan çıkarmayı ortadan kaldırır. son derece verimli birinci sınıf devamları desteklemek için Screamer ile öncü tekniklerin uzantılarını kullanmak. Son olarak, etiketlerin uygulanmasını (veya uygulanmamasını), etiket denetimini ve soyut olarak değer başına ve program başına nokta temelinde etiket göndermeyi seçmek için akışa yönelik satır içi ve düşük düzeyli temsil seçimini destekler. Bu, çoğu çalışma zamanı etiketini, etiket kontrolünü, etiketlemeyi, etiket soymayı, etiket göndermeyi, boksu ve programlardan çıkarmayı ortadan kaldırır.Bu analizler ve optimizasyonlar, Stalin'in, özellikle sayısal olarak yoğun kod için, iki ile yüz arasında değişen faktörlerle diğer tüm Scheme derleyicilerinden daha iyi performans gösteren son derece verimli bir kod üretmesine izin verir. Stalin genellikle el yazısı c ve Fortran kodlarından daha iyi performans gösteren kodlar üretir.

Kapaklar / işlev çağrıları uygulamasıyla ilgili şu çok ilginç makaleyi bulabildim: Akışa Yönelik Hafif Kapanış Dönüşümü . Ayrıca, kapanış dönüşüm kağıdında yazıldığı belirtilen diğer konulardaki kağıtları sorması için yazara e-posta gönderdim:

Siskind, JM 2000a. Akışa yönelik hafif CPS dönüşümü. Hazırlık aşamasında.

Siskind, JM 2000b. Akış yönelimli polivaryans. Hazırlık aşamasında.

Siskind, JM 2000c. Akış yönelimli sunum seçimi. Hazırlık aşamasında.

Siskind, JM 2000d. Akışa yönelik depolama yönetimi. Hazırlık aşamasında

Ne yazık ki, bu kağıtları yazmak için hiç uğraşmadı. Size sorum: Bu konuları kapsayan alternatif veya ilgili makaleler var mı? Stalin'in (veya diğer derleyicilerin), çöp toplanan, dinamik olarak yazılan, birinci sınıf işlevleri destekleyen ve hatta birinci sınıf devamları gibi yüksek düzeyde bir dili nasıl bu kadar etkili bir kod için statik olarak derlenebildiğini öğrenmek için çok ilgileniyorum. . Her ne kadar akış analizi kağıtları oldukça fazla olsa da, yukarıda belirtilen optimizasyonları yapmak için böyle bir analizin sonuçlarını kullanma makaleleri değildir.

Yanıtlar:


11

Anahtar, muhtemelen tüm program analizini ve tüm program optimizasyonunu kullanmasıdır. Bir programın nasıl davrandığını daha fazla bilirseniz, daha fazla uzmanlaşabilir ve satır içi ve performans yapabilirsiniz.

Standart ML için MLton derleyici de benzer bir şey yapar ( http://mlton.org/ ). Bu konuda bir sunum var (en azından): http://mlton.org/pages/References/attachments/060916-mlton.pdf .

Daha önce çalışmalar Craig Chambers ve Washington Üniversitesi'ndeki grubu tarafından yapılmıştır (örneğin: http://www.cs.washington.edu/research/projects/cecil/www/pubs/jdean-thesis.html ). Bu, Self ve daha sonra Cecil / Vortex bağlamında yapıldı.

Muhtemelen Scheme / Lisp topluluğunda daha fazla iş var. Muhtemelen Google'ın "tüm program optimizasyonu" nu düşünmek istersiniz.

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.