Ana içeriğe geç
Programlama

Rat derleyicisi yazmaç ayırıcısını yalınlaştırarak hız kazandı

Öne çıkanlar

  • Yazmaç ayırıcı kaynak kodu 1392 satırdan 584 satıra inerek yüzde 58 küçüldü.
  • SQLite derleme süresi yüzde 43 kısalırken ayırıcı süresi yüzde 77 azaldı.
  • Üretilen mağaza talimatı sayısı yüzde 22, genel talimat sayısı yüzde 3,6 düştü.
  • Karmaşık yazmaç boşaltma ve aralık bölme aşamaları mimariden tamamen çıkarıldı.

C99 ön ucuna ve x86-64 arka ucuna sahip rat derleyicisi, yazmaç ayırma mimarisini baştan yazarak kod tabanını önemli ölçüde küçülttü. Geliştirici, daha önce 1392 satıra ulaşan doğrusal tarama (linear scan) algoritmasını kaldırdı. Bunun yerine LLVM'nin greedy ayırıcısına benzeyen ancak karmaşık kısımlarından arındırılmış 584 satırlık öncelikli kutu paketleme (priority bin-packing) modeli kurdu.

Yeni mimaride yazmaç geri alma (eviction) ve canlılık aralığını bölme gibi karmaşık yöntemler tamamen dışarıda bırakıldı. Sistem; canlılık aralıklarının tespiti, sabit yazmaçların işaretlenmesi, kopyaların birleştirilmesi (coalescing), öncelik sırasına göre yazmaç seçimi ve taşma (spill) adımlarından oluşan beş aşamalı bir yapıyla tasarlandı. Yapılan ölçümlerde, önceki sistemde yer alan ve çalışma süresinin yüzde 37'sini harcayan ikinci deneme optimizasyonunun pratikte yalnızca yüzde 0,01 oranında talimat tasarrufu sağladığı anlaşıldı ve bu özellik kaldırıldı.

Eski özelliklerin tek tek kapatılıp ölçüldüğü bu dönüşüm sonucunda rat, SQLite derleme testinde toplam derleme süresini yüzde 43 kısalttı. Ayırıcının kendi çalışma süresi yüzde 77 azalırken, üretilen mağaza (store) talimatları yüzde 22 ve genel talimat sayısı yüzde 3,6 düştü. Yazmaç ayırıcısının kaynak kod boyutu da yüzde 58 oranında küçülerek 584 satıra indi.

Kaynak

Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.