8 puan yazan GN⁺ 2024-01-10 | 1 yorum | WhatsApp'ta paylaş

Python 3.13'e JIT derleyicisi eklendi

  • CPython çekirdek geliştiricisi Brandt Bucher, Python 3.13 dalına JIT derleyicisi ekleyen bir pull request gönderdi.
  • Bu değişiklik, Python 3.11'e eklenen özelleşmiş uyarlamalı yorumlayıcıdan sonra CPython yorumlayıcısındaki en büyük değişikliklerden biri olacak.

JIT nedir?

  • JIT (Just in Time) derleme, kod ilk kez çalıştırıldığında derlemenin yapılmasını ifade eden bir tasarımdır.
  • JIT derleyicisi, makine kodu üreten derleyicidir ve AOT (Ahead of Time) derleyicisinin karşıtıdır.
  • Python kodu önce bytecode'a derlenir; bu bytecode CPU için doğrudan bir anlam taşımaz ve özel bir bytecode yorumlayıcı döngüsü üzerinden çalıştırılır.

copy-and-patch JIT nedir?

  • copy-and-patch JIT, 2021'de önerilen bir kavramdır ve dinamik dil çalışma zamanları için hızlı bir algoritma olarak tasarlanmıştır.
  • copy-and-patch JIT, her komut için talimatları kopyalayıp bytecode argümanlarını doldurma (patch etme) fikrine dayanır.

copy-and-patch JIT'in avantajları ve dezavantajları

  • "Tam" JIT derleyicileri, yüksek seviyeli bytecode'u ara dilin (IL) düşük seviyeli talimatlarına derlerken, copy-and-patch JIT bytecode'dan makine koduna derlemeyi bir şablonlar kümesiyle gerçekleştirir.
  • copy-and-patch JIT, Python çalışma zamanı içinde karmaşık bir JIT derleyici mimarisini çalıştırmayı gerektirmez; yalnızca LLVM JIT araçlarının, CPython'ın kaynak koddan derlendiği makinede kurulu olması yeterlidir.

Bu JIT nasıl çalışıyor?

  • Python 3.13 API'sine yeni eklenen API genişletilerek, takılabilir bir optimize edicinin çalışma zamanında bulunabilmesi sağlanır.
  • Yeni JIT, bu yeni mimari için isteğe bağlı bir optimize edicidir.
  • CPython'ı kaynak koddan derlerken --enable-experimental-jit bayrağı verilirse, Python bytecode'u için makine kodu şablonları oluşturulur.

Bu JIT daha hızlı mı?

  • İlk benchmark sonuçları yaklaşık %2-9 performans artışı gösteriyor.
  • Bu JIT, Python performansını büyük ölçüde artırabilecek bir dizi optimizasyonun temel taşıdır.

GN⁺ görüşü

  • Python 3.13'e eklenen JIT derleyicisi, Python'un çalışma hızını artıran önemli bir değişikliktir; özellikle tekrarlayan işlerde verimliliği yükseltebilir.
  • copy-and-patch JIT, karmaşık JIT mimarisini kullanıcının Python çalışma zamanına entegre etmeye gerek kalmadan performansı artıran yenilikçi bir yaklaşım sunar.
  • Bu teknoloji, Python topluluğu için heyecan verici tartışmalar doğuruyor ve Python performans optimizasyonu için yeni kapılar açması bekleniyor.

1 yorum

 
GN⁺ 2024-01-10
Hacker News görüşleri
  • Yazılım sürümleri arasında %2-9'luk performans artışı ilgi çekici. Bu tür küçük iyileştirmeler bazen hayal kırıklığı yaratıcı görülebilir, ancak sürekli birikerek her sürümün öncekinden daha hızlı olmasını tercih ederim.
  • Haoran Xu ve Fredrik Kjolstad'ın "copy-and-patch" tekniğinin ilgi görmesi harika. Bununla ilk kez Xu'nun LuaJIT remake projesiyle ilgili blog yazısında karşılaştım. Mevcut teknikleri yeniden kullanarak yeni bir şey yaratma yaklaşımı bana çok zekice geliyor. Söz konusu blog yazısını, dil gerçekleştirimleri hakkında öğrenmek isteyenlere tavsiye ederim. Ayrıca Xu, blog güncellemelerinin gecikmesinin nedeninin arka plandaki yeniden çalışma olduğunu da açıklıyor.
  • Brandt, geçen yılki CPython çekirdek geliştirici sprintinde bu konu hakkında bir sunum yaptı.
  • PyPy, Jython, GraalPy ve IronPython üzerindeki çalışmalara rağmen, CPython'a JIT eklenmesi Python ekosistemi için önemli bir ilerleme olarak görülüyor. Özellikle 3.13 sürümünden sonraki evrim merakla bekleniyor.
  • Python'ı web geliştirme dışındaki hemen her şey için kullanıyorum; performans artarsa bu çok olumlu olur. Python ekosistemi, CGI ya da mod_php gibi durumsuz isteklerden uzun süre çalışan süreçlere geçti. Bu da yerel web uygulamasında her değişiklikte yeniden başlatmak gerektiği anlamına geliyor; bazı geliştiriciler dosya kaydedildiğinde uygulamayı otomatik yeniden başlatmanın yollarını kullanıyor.
  • CPython'ın kod tabanını çok basit tutması ve optimizasyonların diğer gerçekleştirimlere bırakılmasının amaçlandığını hatırlıyorum.
  • Makalede "copy-and-patch" JIT yeni bir şeymiş gibi sunuluyor, ama DOS dönemindeki QuickBASIC'in benzer bir yaklaşım kullandığını hatırlıyorum. QuickBASIC, bellekte şablon assembly bloklarını patch'leyerek oldukça kötü assembly kodu üretiyordu.
  • Son iki yılda Python performansı konusunda kaydedilen ilerleme şaşırtıcı. Çekirdek ekip performans artışını ciddi bir hedef haline getirdi ve gözle görülür iyileştirmeler sağladı.
  • PyPy'ye daha fazla kaynak ayrılmasını isterdim. Ancak küçük programlarda PyPy'nin hızlı başlangıç süresi pek iyi değil, bu yüzden büyük bir avantajını görmüyorum. Ayrıca büyük programlarda karmaşık uyumluluk sorunları çıkabiliyor. Eğer CPython'ın JIT'i daha güvenilir olur ya da daha hızlı açılış süreleri sunarsa, bazı sorunları çözebilir.
  • Python'ın GitHub deposundaki, "Noel'den Önceki Gece"yi parodileştiren PR mesajı oldukça esprili.