deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Python 3.15 benchmarkları 3.14'e göre 135 kata kadar kodlama hızlanması gösteriyor, ancak Base16 yavaşladı

Windows'taki benchmarklar, Python 3.15'in Base32, Base64, Ascii85 ve Base85 kodlama sürelerini 3.14'e kıyasla ciddi biçimde düşürdüğünü, Base16'nın ise %22,3 daha yavaş kaldığını gösteriyor.

Python 3.15 benchmarkları 3.14'e göre 135 kata kadar kodlama hızlanması gösteriyor, ancak Base16 yavaşladı

dev.to'da yayımlanan benchmark sonuçlarına göre Python 3.15, standart ikili-metin biçimlerinin çoğunda veriyi 3.14'ten çok daha hızlı kodluyor — ancak bir biçim geriye gitti. Base32, Ascii85, Base85 ve Base64'nün tümü büyük kazançlar elde etti; en belirgin vakalarda iyileşme iki büyüklük mertebesine ulaşırken, Base16 önceki sürüme göre yaklaşık %22 daha yavaş çıktı.

Ölçümler tek bir makinede yapılan bir pyperformance 1.14.0 çalışmasından geliyor: DDR5 RAM, PCIe Gen4 NVMe disk ve Windows 11 kullanan AMD Ryzen 9 7900 masaüstü bilgisayar; Python 3.10'dan 3.15'e kadar 64-bit sürümler kullanıldı.

Rakamlar

Tüm değerler milisaniye cinsindendir; düşük olan daha iyidir.

Benchmark 3.15 3.14 3.13 3.12 3.11 3.10
ascii85_large 11.62 797.9 709.0 772.3 643.8 759.2
base32_large 2.431 327.6 300.7 296.4 265.7 292.1
base85_large 4.293 272.4 252.9 258.8 230.1 259.2
base64_large 1.852 6.746 6.187 6.095 6.116 6.071
base16_large 5.767 4.714 22.52 23.08 23.89 23.71

Öne çıkan base32_large: 3.15, işi 3.14'ün süresinin kabaca 1/135'inde tamamlıyor (327,6 ms'ya karşı 2,431 ms). Ascii85 büyük iş yüklerinde yaklaşık 69 kat, Base85 ise yaklaşık 63 kat iyileşti. Base64'nün kazancı göreli olarak daha mütevazı — 6,746 ms'den 1,852 ms'ye, kabaca 3,6 kat — ancak zaten önceki sürümlerde grubun en hızlısıydı.

Yeni kodlamalar neden hızlandı

dev.to analizine göre hızlanmalar, Base32, Base64, Ascii85 ve Base85 kodlayıcılarının C ile yeniden yazılmasından geliyor. Yerleşik (native) uygulamalar bytecode yorumlayıcısının dispatch ve tip denetimi yükünü ortadan kaldırıyor, ara değerleri CPU register'larında tutuyor ve belleğe daha öngörülebilir desenlerle erişiyor — bunların tümü, bu algoritmaların dayandığı shift-and-mask aritmetiği için önemli. Yazar, 135 katlık Base32 sonucunu doğrudan o döngünün yorumlanan Python'dan çıkarılmasına bağlıyor.

Base16 istisnası

Base16 aykırı örnek: base16_large, 3.15'te 4,714 ms'lik 3.14 süresine karşı 5,767 ms sürdü; %22,3'lük bir gerileme. Tabloyu yumuşatan iki ayrıntı var. Birincisi, Python 3.13 ve öncesi aynı benchmark için kabaca 22,5–23,9 ms gerektiriyordu; dolayısıyla 3.15 o sürümlerden hâlâ yaklaşık dört kat hızlı — 3.14 sadece zirve noktaydı. İkincisi, kaynak nedeni çözülememiş olarak ele alıyor. Geçerli teori, Base16'nın C ile yeniden yazılmadığı ve hâlâ Python katmanından çalıştığı; yavaşlamanın 3.15'teki allocator veya nesne düzeni (object layout) değişikliklerine ya da 3.14'ün daha verimli bayt düzeyinde işlemler kullanmış olmasına bağlanabileceği yönünde. Bunlar doğrulanmış nedenler değil, hipotezler.

Yükseltmeden önce uyarılar

Sonuçlar tek bir donanım ve işletim sistemi kombinasyonunu yansıtıyor. dev.to yazısı, C runtime'ındaki Windows'a özgü davranışların Linux veya macOS'a aktarılamayabileceğine ve daha küçük önbellekli CPU'ların Python tarafındaki Base16 yolu için farkı büyütebileceğine dikkat çekiyor. Tavsiyesi iş yüküne bağlı: hex kodlaması iş yükünüzün ağır basıyorsa — blok zinciri araçlarında veya gömülü sistemlerde olduğu gibi — şimdilik 3.14'te kalmak mantıklı olabilir. Aksi halde, başka biçimlerdeki kazanımlar 3.15'i değerlendirmeyi hak edecek kadar büyük; yeter ki önce kendi kodunuzu ölçün.

Neden önemli

İkili-metin kodlamaları her yerdeki kritik yollarda yer alıyor: veri hatları, ek işleme, token üretimi ve depolama biçimleri. 327 ms'lik bir Base32 işlemini 2,4 ms'ye dönüştürmek, native extension'lar veya üçüncü taraf kütüphaneler olmadan saf Python'da nelerin pratik olduğunu değiştiriyor ve birçok veri işleme iş yükünde kodlamayı fiilen darboğaz olmaktan çıkarıyor. Base16 gerilemesi de karşı örnek: toplu hızlanmalar biçim bazında kazanç garantisi vermez ve bir sürüm yükseltmesi ancak, gerçekte dağıtım yaptığınız platformda gerçekte çalıştırdığınız iş yükünü benchmark'layarak doğrulanabilir.

  • #python
  • #cpython
  • #benchmarks
  • #performance
  • #encoding

İlgili yazılar