AMD, Zen 4'ün döngü arabelleğini devre dışı bırakma kararı aldı
(chipsandcheese.com)- ASRock B650 PG Lightning için yayınlanan yeni BIOS'ta Zen 4 döngü arabelleği artık bir mikro-op kaynağı olarak gözlemlenmedi; önceki BIOS'a dönüldüğünde ise yeniden etkinleşiyor
- Bu yapı, küçük döngüleri front-end'de tekrarlı işleyerek güç tüketimini azaltmayı amaçlayan bir özellik gibi görünüyor; tek iş parçacığında 144 giriş, SMT ile 2 iş parçacığında ise iş parçacığı başına 72 giriş olduğu tahmin ediliyor
- SPEC CPU2017'de döngü arabelleği açık/kapalı durumları arasındaki toplam puan farkı %1'in altında kaldığı için, genel performans etkisi çok küçük görünüyor
- Döngü arabelleği kapandığında Zen 4 daha fazla mikro-op'u op cache üzerinden besliyor; op cache bant genişliği arka uç işlem kapasitesinden zaten yüksek olduğundan bunun front-end darboğazına yol açması zor
- Devre dışı bırakılma nedeni ve gerçek güç etkisi belirsiz, ancak AMD'nin neredeyse hiç belgelemediği veya tanıtmadığı sınırlı bir özellik olduğu için çoğu kullanıcı ve geliştirici bu değişikliği fark etmeyebilir
Zen 4 döngü arabelleğinin rolü ve sınırları
- Döngü arabelleği, CPU front-end'inde daha önce getirilmiş az sayıdaki komutu tutarak küçük döngüler tekrar çalıştırılırken bazı front-end aşamalarının kapatılmasına izin veren bir yapı
- Güç tasarrufuna yardımcı olabilir
- Ön taraftaki front-end sınırlamalarını aşarak performansı artırma ihtimali vardır
- Intel, Arm ve AMD çekirdeklerinde uzun zamandır kullanılan bir tekniktir
- Zen 4, yüksek performanslı AMD çekirdekleri içinde döngü arabelleğine sahip olduğu anlaşılan tek örnek
- Zen 4'ün Processor Programming Reference belgesi, döngü arabelleğini op cache ve decoder ile birlikte mikro-op dispatch kaynağı olarak anıyor
- Performans sayacı deneylerine göre kapasite şu şekilde tahmin ediliyor
- Tek iş parçacıklı çalışmada 144 giriş
- SMT ile 2 iş parçacığı etkin olduğunda iş parçacığı başına statik olarak bölünmüş 72 giriş
- Döngü içinde CALL/RET varsa Zen 4 döngü arabelleği o döngüyü yakalayamıyor
- AMD'nin Zen 4 optimizasyon kılavuzu döngü arabelleğinden söz etmiyor; yalnızca hot code region'ları op cache kapasitesi içinde tutmayı öneriyor
BIOS güncellemesinden sonra kaybolan döngü arabelleği
- ASRock B650 PG Lightning, BIOS 3.10 sürümüne güncellendikten sonra donanımsal performans izlemede döngü arabelleğinin mikro-op dispatch etmediği görüldü
- BIOS 1.21 sürümüne geri dönüldüğünde döngü arabelleği yeniden etkinleşiyor
- Devre dışı bırakmanın, BIOS 1.21'deki AGESA 1.0.0.6 ile BIOS 3.10'daki AGESA 1.2.0.2a arasında gerçekleştiği anlaşılıyor
- AMD bu değişikliği ayrı bir duyuru veya tanıtım yapmadan uyguladı
- Hot Chips 2024'te AMD çalışanlarıyla yapılan ek görüşmelere göre döngü arabelleği esas olarak güç optimizasyonu amacı taşıyan bir özellikti
SPEC CPU2017'de görülen küçük performans farkı
- SPEC CPU2017 tamsayı ve kayan nokta test paketlerinin toplam puanı, döngü arabelleği açık/kapalı arasında %1'den az fark gösterdi
- SMT performans artışı da döngü arabelleğinin devre dışı bırakılmasından etkilenmiyor
- Performans etkisinin küçük olmasının nedeni, Zen 4'ün op cache'inin zaten arka uçtaki rename/allocate aşamasının tüketebileceğinden daha fazla bant genişliği sunması
- Döngü arabelleği açık olsa bile performans sayaçlarında mikro-op'ların yalnızca küçük bir kısmının döngü arabelleğinden beslendiği görülüyor
- Tek tek benchmark'larda da büyük bir kayıp doğrulanmadı
- 523.xalanbmk testinde döngü arabelleği komut akışının anlamlı ama küçük bir kısmını üstlendi, ancak puan yeni BIOS'ta 9.48, eski BIOS'ta 9.44 ile hata payı içinde kaldı
- 544.nab testinde mikro-op'ların neredeyse dörtte biri döngü arabelleğinden beslendi, ancak döngü arabelleğinin kapalı olduğu yeni BIOS'ta puan 11.7 ile önceki 11.5'in %1.7 üzerine çıktı
- Bu artış çalıştırmadan çalıştırmaya değişen varyans olabilir
- Yeni BIOS'un performans sayaçlarında op cache, döngü arabelleğinin payını devralıyor ve komut akışının daha büyük bölümünü işliyor
- 507.cactuBSSN testinde op cache kapsaması bir miktar düşüyor ve decoder'ın toplam mikro-op'ların yaklaşık dörtte birini beslediği bir desen görülüyor
- Performans sayaçları %100 doğru ölçümden ziyade genel eğilimleri gösteren araçlardır
- Front-end dispatch, yanlış tahmin edilen dallanmaların ardından yanlış getirilen komutlardan da etkilenebilen spekülatif bir olaydır
Güç tasarrufu ihtimali ve front-end etkinliği
- Döngü arabelleğinin ana amacı performans artışı değil, op cache dahil front-end'in önemli bir bölümünü fırsat buldukça kapatmak
- Zen 4'ün performans izleme özelliklerinde, olay sayacının eşik değeri aşılmış çevrimleri sayabilen bir count mask bulunuyor
- Eşik 1 olarak ayarlandığında her mikro-op kaynağının gerçekten mikro-op beslediği çevrim sayısı tahmin edilebiliyor
- Böylece döngü arabelleği etkinken front-end'in ne kadar sık kapatılabildiği anlaşılabiliyor
- SPEC CPU2017'de her kaynağın etkin olma sıklığı, o kaynağın sağladığı mikro-op oranıyla genel olarak iyi örtüşüyor
- Bazı iş yüklerinde front-end'in hiçbir şey beslemediği çevrimler de oldukça fazla
- 502.gcc ve 520.omnetpp, arka uç bellek gecikmesine ciddi biçimde bağlı
- Out-of-order yürütme motoru gecikmeyi gizleyecek kadar komutu uçuşta tutamadığında, front-end arka uca daha fazla gönderemiyor ve boşta kalıyor
- Kayan nokta test paketinde 544.nab ve 508.namd, oldukça fazla çekirdek çevriminde döngü arabelleğini kullanıyor
- 508.namd, ortalama 3.64 IPC ile yüksek IPC'li bir iş yükü ve front-end throughput talebi yüksek
- Döngü arabelleğine uygun olduğu için op cache'i kapatıp güç tasarrufu sağlama fırsatı sunuyor
- Döngü arabelleği kapandığında op cache daha fazla çevrim boyunca çekirdeği besliyor
- 523.xalanbmk testinde döngü arabelleği olmadan op cache'in çekirdek çevrimlerinin ilave %12'sinde aktif olması gerekiyor
- 548.exchange2, ortalama 4.31 IPC ile yüksek IPC'li bir iş yükü, ancak döngü arabelleği açıkken bile neredeyse hiç kullanılmıyor ve op cache çekirdek çevrimlerinin %85'inden fazlasında aktif kalıyor
- 508.namd testinde op cache etkinlik oranı, döngü arabelleği açıkken %56.67'den kapalıyken %75.1'e çıkıyor
- 144 girişlik döngü arabelleği, komut akışının büyük kısmını tutmak için küçük kalıyor
- Program ancak çalışma süresinin önemli bölümünü küçük döngülerde geçiriyor ve arka uç throughput'u ya da gecikmesiyle sınırlanmıyorsa belirgin bir etki gösterebilir
Cyberpunk 2077'de gözlemler
- Döngü arabelleğinin devre dışı bırakılmasının oyun performansına etkisi, Cyberpunk 2077'nin dahili benchmark'ı ile incelendi
- Tutarlılığı artırmak için Ryzen 9 7950X3D'de Core Performance Boost devre dışı bırakıldı ve tüm çekirdekler 4.2GHz ile sınırlandı
- Hardware Configuration register MSR 0xC0010015 içindeki bit 25 ayarlandı
- RX 6900 XT 2GHz ile sınırlandı
- Benchmark ayarları 1080p, medium preset, upscaling kapalı
- Oyun VCache die'a sabitlendiğinde döngü arabelleğinin devre dışı bırakılması performansı neredeyse etkilemiyor
- non-VCache die'a sabitlendiğinde ise döngü arabelleği kapalıyken %5 performans kaybı gözlendi, ancak nedeni doğrulanamadı
- Benchmark yaklaşık altı kez yeniden çalıştırıldı
- Cyberpunk 2077, komut akışının ortalama yaklaşık %22'sini döngü arabelleğine bırakarak beklenenden daha döngü arabelleği dostu çıktı
- Döngü arabelleği kapatıldıktan sonra op cache'in mikro-op besleme oranı %62'den %82'ye yükseldi
- Bu oyun, döngü arabelleği kapalıyken ortalama 0.89 IPC, açıkken 1.02 IPC ile yüksek IPC'li bir iş yükü değil
- Front-end bant genişliği büyük bir etken değil
- Arka uç sınırlı ya da branch predictor gecikmesine bağlı olabilir
- VCache die üzerinde çalışırken performans sayaçları, döngü arabelleği açıkken ortalama 1.25 IPC, kapalıyken 1.07 IPC gösteriyor
- Yeni BIOS'ta küçük bir performans düşüşü de gözlendi
- 155 FPS seviyesinde GPU tarafı darboğazına daha fazla yaklaşılmış olabilir
Çekirdek güç sayacı sonuçlarındaki belirsizlik
- Döngü arabelleği kullanımının güç verimliliğini artırıp artırmadığını görmek için Zen 4'ün çekirdek güç sayacı da incelendi
- Komut bant genişliği benchmark'ı, test bölümünde CALL/RET kullanmayacak şekilde değiştirildi
- Çünkü CALL/RET varsa Zen 4 döngü arabelleğini kullanmıyor
- Test tek bir çekirdeğe sabitlendi ve ortalama güç, test dizisine atlamadan önce ve sonra Core Energy Status MSR okunarak hesaplandı
- Core Performance Boost, güç okumalarını ciddi biçimde oynattığı için kapatıldı
- Eski BIOS'ta Core Energy Status MSR, NOP'lar op cache'ten getirilirken ortalama 6W, döngü arabelleğinden getirilirken ise çok daha düşük güç gösterdi
- Test dizisi boyutu, op cache kapsamasını %1'in altına düşürmek için L2 kapasitesine sığan 128KB'ye çıkarıldığında bile ortalama çekirdek gücü 1.5W olarak gösterildi
- Bu sonuç, decoder ve L2 fetch path kullanımının artması gereken durumla uyuşmuyor
- Yeni BIOS'ta op cache testi ortalama 1.68W, decoder'ın çoğunlukla L2'den beslendiği test de neredeyse aynı güç değerini gösterdi
- AMD'nin güç izleme özelliği gerçek ölçüm değil, güç modellemesi olabilir
- BIOS sürümleri arasında modelleme yöntemi değişmiş veya güç modeli isabetli olmayabilir
- 12V EPS konnektörü gibi noktalardan doğrudan ölçüm yapacak donanım olmadığı için ek doğrulama yapılamadı
Devre dışı bırakılma nedeni ve geliştirici bakışı
- AMD'nin Zen 4 döngü arabelleğini neden devre dışı bıraktığı bilinmiyor
- CPU özellikleri bazen donanım hataları nedeniyle kapatılabiliyor
- Intel Skylake'in döngü arabelleği olan LSD, SMT'nin iki iş parçacığının etkin olduğu kısa döngülerde partial register access ile ilgili bir hata nedeniyle devre dışı bırakılmıştı
- Zen 4, AMD'nin yüksek performanslı CPU'lara döngü arabelleği koyduğu ilk deneme ve ilk uygulamaların doğrulanması zordur
- AMD'nin, dışarıdan görünmeyen bir hatayı içeride tespit edip önlem olarak döngü arabelleğini kapatmış olması mümkün
- Performans etkisi, op cache bant genişliği yeterli olduğu için neredeyse yok ya da çok küçük görünüyor
- Güç etkisi bilinmiyor, ancak küçük ve ölçülmesi zor olabilir
- AMD, döngü arabelleğini Processor Programming Reference içindeki tek satır dışında neredeyse hiç belgelemiyor veya tanıtmıyor
- Bu durum, Intel'in kendi loop buffer'ını sıkça belgelemesi ve geliştiricilerin bundan yararlanmasını optimizasyon kılavuzlarında önermesiyle tezat oluşturuyor
- Zen 4 döngü arabelleği, düşük kapasitesi ve CALL/RET kısıtı nedeniyle op cache kadar kullanışlı olmayan sınırlı bir özellik
- Eski BIOS'larda Zen 4 döngü arabelleğini dikkate alarak optimizasyon yapılacaksa şu koşullar göz önünde bulundurulabilir
- Döngüler 144 micro-ops'tan küçük tutulmalı
- Fiziksel çekirdeği iki iş parçacığı paylaşıyorsa bunun yarısı dikkate alınmalı
- Küçük döngü içinde çağrılan fonksiyonlar için CALL/RET'ten kaçınmak amacıyla inline değerlendirilmelidir
- Ancak bu tür optimizasyonların çoğu durumda bir karşılığı olmayacaktır
1 yorum
Hacker News yorumları
Bu özelliğin kamuya açıklanmamış bir donanım açığını engelleme girişimi olarak devre dışı bırakılmış olabileceği yönünde spekülasyonlar var
AMD içinde kimsenin karşılaşmadığı bir hata bulunmuş ve aşırı temkinli davranarak loop buffer kapatılmış olabilir; bunu hayal etmek çok da zorlama değil. Çekirdek yaşam döngüsünün bu aşamasında AMD'nin Zen 4 front-end'ine dokunması için başka bir neden pek akla gelmiyor
Kişisel olarak bu bana mikrokod azaltımı kokusu veriyor, ama elbette CVE'yi beklemek gerek
Açık açıklanmazsa etkilenen tarafların saf paranoya dışında harekete geçmeye başlamasının bir yolu yok. Açık açıklaması, sorumluluğu son kullanıcıya aktarmanın bir yolu da olabilir. Güncellemediysen şikâyet etme tarzında. Açıklamanın ürün sorumluluğuna yol açması nadirdir; Meltdown veya Spectre'da da böyle bir sorumluluk meselesi olduğunu hatırlamıyorum. Bu yüzden AMD'nin bunu bilerek sakladığını kesin söylemem
Yazı, loop buffer'ın ne performans ne de güç tüketimi açısından kazanç sağladığını ima ediyor gibi.
Öyleyse bu, “mühendis ekibi aylarca parlak yeni bir özellik yaptı ama pratikte kazancı olmadı, yine de biri itibarını korumak için bunu piyasaya sürdü” şeklindeki klasik durum olabilir. Yazılım ekiplerinde de eski hantallığı ortadan kaldırıp performansı artıracağız diye kod tabanını yeniden yazmaya kalkışıldığını, iş bitince satır sayısının arttığını ve performansın kötüleştiğini gördüm. İki durumda da yayınlanmaması gerekirdi
AMD mühendislik ekibinin hiçbir değeri olmayan bir donanım özelliği için alan ve güç harcanmasına izin verecek kadar ilkesiz olduğunu düşünmek zor; burada Chips 'n Cheese'in etkiyi ölçememiş olma ihtimaline daha fazla ağırlık vermek isterim
Çok sinir bozucu, ama kimse ön araştırma yapmak için zaman ayırmak istemiyor. Yeni bir projeyi ileri itmek, üst yönetimi memnun etmeyi ve daha az soru almayı kolaylaştırıyor
Yazıdaki en ilginç paragraf şu: Zen 4'ün loop buffer'ına bakmanın en iyi yolu, AMD'de mühendislerin bir şeyler denemek için boş kapasitesi olduğuna dair bir işaret olarak görmek.
Bu kez sonuç alınmamış olabilir, ama mühendislerin düşük riskli ve düşük etkili özelliklerle deney yapmasına izin vermek özgüven inşa etmenin iyi bir yolu. Gelecekte bu özgüveni daha çok görmeyi umuyorum
“İlginç biçimde non-VCache die'a sabitlendiğinde, loop buffer devre dışı bırakılınca oyun performansı %5 düşüyor. Nedenini bilmiyorum” kısmı için, daha ayrıntılı güç ölçümleri olsaydı bunun ısı/güç bütçesi ile ilgili olup olmadığı anlaşılabilirdi diye düşünüyorum.
Bu özellik güç tasarrufu amaçlıymış gibi de görünüyor
Benim non-X3D çipimde CCD0 çekirdeklerinin çoğu 5,6~5,75GHz'e çıkıyor, CCD1 çekirdekleri ise 5,4~5,5GHz'te kalıyor. Zen 4'ün V-Cache çiplerinde saat hızı cezası büyük, ama önbellek bunun fazlasını telafi ediyor. Aynı çipin CCD1'inde özellik açık ve kapalı hâllerinin ikisinin de test edilip edilmediğini, güvenlik düzeltmesi gibi başka değişiklikleri ayırmaya çalışıp çalışmadıklarını görmek gerek; yazı ise kendi kendine “hayır” diye kabul ediyor. Doğru yapmak için özelliğin açık olduğu BIOS'ta yalnızca bu özelliği kapatmanın bir yolunu bulup aynı çipte iki tarafı da test etmek gerekir; yine de farklı dallanma koşulları nedeniyle sonuçlar tam doğru olmayabilir. Tam performans profili olursa doğruluk artar, ama bunu muhtemelen yalnızca AMD mühendisleri yapabilir
Gerçek bir fark yaratmak için fazla küçüktü ve yalnızca çok belirli durumlarda anlamlıydı gibi görünüyor. Daha büyük yapılsaydı, sağladığı kazanca kıyasla uygulama maliyeti muhtemelen fazla yüksek olurdu.
Buna rağmen bazı iş yüklerinde küçük gerilemeler olacaktır, ama AMD çıkıştan sonra küçük performans iyileştirmeleri de yaptı. Zen 4'te bunu sadece BIOS seçeneği hâline getirmeliydiler. Bunu yapmamış gibi görünmeleri, hata veya güvenlik sorunu ihtimaline işaret ediyor
Anekdot olarak, 1979’daki 68000 ile 1982’deki 68010 arasındaki az sayıdaki farklardan biri “loop mode”, yani 6 baytlık bir döngü tamponunun eklenmesiydi
İki CPU’yu bir döngü kaydırarak çalıştırıp ikinci CPU’ya kurtarılabilir bir kesme enjekte etme yöntemiydi. Yine de MMU’su olan, 32 bit komut setine ve 24 bit adres veri yoluna sahip bir CPU istiyorsanız, o dönemdeki alternatiflerden daha ucuzmuş gibi görünüyor. Gerçekten zorlu zamanlar olmalı
18 bitlik bir sözcüğe 4 komut sığıyor ve bir işlem kodu döngü sayacını azalttıktan sonra sözcüğün başına dönüyor. Bu durumda oldukça daha hızlı çalışabiliyor
Bunlardan birinin döngü komutu (DBcc) olması gerektiğinden döngü gövdesi tek bir komut olmak zorundaydı. Pratikte hızlanabilecek şeyler neredeyse yalnızca optimize edilmemiş memcpy idi
Cortex-A15’te bunun temel bir tasarım özelliği olması ilginç. Diğer çiplerde etkisine dair sayılar var mı merak ediyorum
Konsollar gibi tasarım ömrü daha uzun cihazlarda en azından optimizasyon hedefi olarak da kullanılabilir gibi görünüyor
Çünkü RISC’in özü, komut getirme ve çözümlemenin çok daha kolay ya da neredeyse önemsiz olmasıdır
Bende 7950X3D var; Skylake 6700K’dan yükseltmiştim. Görünüşe göre bilinçsizce donanım döngü tamponu yazılımla devre dışı bırakılmış çiplere çekiliyorum
İlginç bir yazı, ama döngü tamponunun kalıpta ne kadar yer kapladığını bilmiyorum
Gelecekteki çiplerden kaldırılırsa, o alanın daha büyük L2 önbellek gibi daha faydalı bir şeye ayrılıp ayrılamayacağını merak ediyorum
Teoride döngü tamponu, sıkı döngülerde güç tasarrufu sağlayabilir veya performansı artırabilir. Pratikte ikisini de yapamıyor gibi görünüyor ve AMD bunu Zen 5’te tamamen kaldırdı
Eğer doğruysa bu mantıklı; alan maliyeti de ek kontrol mantığı kadar olur. En pahalı kısım başta döngüyü tespit etmek gibi görünüyor, ama kuyruk boyutuna kıyasla oldukça küçük olmalı
“Güç” bölümündeki analiz, saniye başına çalıştırılan komut sayısına bölünmemiş gibi görünüyor
Bu döngü tamponunun faydasını görmek için saniye başına enerjiye, yani güç (watt) değerine değil, neredeyse kesinlikle komut başına enerjiye bakmak gerekir
Sıra ve RAM içeriği bile her şeyi değiştirebilir. Açık ve kapalı hâlleri yüzlerce kez çalıştırarak bir ölçüde ayrıştırabilirsiniz, ama çok zaman alır ve yine de %100 doğru olmaz. Sırf bir özelliği kapatmak bile kodun başka bir dala girmesine ve tüm yerleşimin değişmesine yol açabilir. Bu sorunu özel olarak bilmiyorum, ama bir özelliği kapatınca yükün tamsayı biriminden FPU’ya veya GPU’ya kaydığı ya da 5 komutun kaybolması yerine 2 komutun eklendiği örnekler gördüm