Linux çekirdeğindeki unlikely makrosu işlemci performansını doğrudan etkiliyor
Öne çıkanlar
- Linux çekirdeğindeki unlikely makrosu GCC'nin __builtin_expect işlevini temel alıyor.
- Hatalı dal tahmini yönlendirmesi çalışma süresinde belirgin bir performans kaybına yol açıyor.
- Derleyici, yüksek ihtimalli kod dallarını işlemcinin boru hattı akışına uygun biçimde sıralıyor.
Linux çekirdeğinde sıklıkla kullanılan "unlikely" ve "likely" makrolarının işlemci performansı üzerindeki etkilerini inceleyen bir teknik deney yayımlandı. Derleyiciye hangi kod dalının çalışma ihtimalinin daha düşük veya yüksek olduğunu bildiren bu yapıların çalışma prensibi ve makine kodu düzeyindeki yansımaları karşılaştırıldı.
GCC derleyicisinin __builtin_expect işlevini temel alan bu makrolar, koşullu ifadelerin gerçekleşme olasılıklarına dair derleyiciye ön bilgi sunuyor. Yapılan testlerde, yüzde 0,1 ihtimalle çalışan bir kod dalına hatalı biçimde "likely" yönlendirmesi verildiğinde, işlem süresinin 53 milisaniyeden 72 milisaniyeye kadar uzadığı görüldü. Derleyicinin ürettiği assembly kodu incelendiğinde, bu farkın bellek içi komut sıralamasından kaynaklandığı belirlendi.
Modern işlemcilerin boru hattı (pipelining) ve önceden komut getirme mekanizmaları, bellekteki sıralı komutları öncelikli olarak işliyor. Derleyici bu makrolar sayesinde yüksek ihtimalli kod bloğunu doğrudan koşul kontrolünün hemen ardına yerleştiriyor. Bu sayede işlemcinin yanlış tahminler sonucu fazladan döngü harcaması engellenerek yürütme performansı optimize ediliyor.
Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.