Shader Cache Nedir?

Katılım
17 Aralık 2018
Mesajlar
1.176
Çözümler
1
Shader cache tam olarak ne iş yapar? Kimisi bellek israfı diyor kimisi zaman tasarrufu diyor. AMD radeon ayarlarında da mevcut olan 2 seçenek var. Araştırdığımda redditte birkaç konu okudum bazıları shader cache normal olarak açık seçilmelidir, eğer AMD için en iyileştirilmiş seçilirse sadece AMD'nin listesindeki oyun ve uygulamalar için bu özelliğin aktif olacağını dile getirmişler. Siz ne düşünüyorsunuz bu konuda?

366480
 
Son düzenleyen: Moderatör:
Çözüm
Shader Cache olmasaydı bazı oyunlar oynanamaz hâle gelirdi.

AC Origins'i ele alalım. AC Origins'te İskenderiye'ye ilk ama cidden ilk kez girdiğinizde işlemciniz 4 çekirdekli bir i3 8100 veya R3 1300 ise 30-40 FPS alırsınız.

Birkaç dakika boyunca bu böyle olur, shader cacheler diske kaydedilir ve FPS değeriniz normale döner, 40-45lere çıkar (yine normal değil ama bu oyun için yetersiz işlemciler).

Sonra oyundan çıkarsınız, iki gün sonra tekrar oyuna girer ve aynı bölgeye gidersiniz, 30-40 FPS'den eser yoktur. Artık orada her zaman 40-45 alırsınız.

İşte bunu sağlayan şey bazı işlemci gücü gerektiren hesaplamaların diske kaydedilmesidir.

Bu her oyun için geçerli olmayabilir, bazı oyunlar shader cachelerin avantajını öylesine kullanmaktadır ki (AC Origins, Odyssey, Shadow of Tomb Raider vb.) kapatmanız hâlinde sürekli olarak kötü performans almanız olasıdır.

On saat boyunca oynadığınızda o kadar çok shader cache birikir ki, 45 FPS üstü göremediğiniz bir yerde 60 FPS görür olursunuz. Bunlar hep kaydedilen cacheler sayesinde işlemciye binecek ek yükün bertaraf edilmesi sayesindedir.

Özetle, kapatmanızı tavsiye etmem. Bir oyun yaklaşık 300-400 MB'lik bir cache biriktirebilir. Fakat bunun sayesinde elde edeceğiniz performans kesinlikle bunu meşru kılar. AC Odyssey bazında konuşacak olursam 50 saatlik oyun sonunda 2 GB cache biriktirmişti. Fakat işlemciye ağır bindiren bölgelerde 30 FPS'ye kadar düşerken artık 40 FPS'nin altına düşmüyorum. Böyle de bir katkısı olmuştur.
Shader Cache olmasaydı bazı oyunlar oynanamaz hâle gelirdi.

AC Origins'i ele alalım. AC Origins'te İskenderiye'ye ilk ama cidden ilk kez girdiğinizde işlemciniz 4 çekirdekli bir i3 8100 veya R3 1300 ise 30-40 FPS alırsınız.

Birkaç dakika boyunca bu böyle olur, shader cacheler diske kaydedilir ve FPS değeriniz normale döner, 40-45lere çıkar (yine normal değil ama bu oyun için yetersiz işlemciler).

Sonra oyundan çıkarsınız, iki gün sonra tekrar oyuna girer ve aynı bölgeye gidersiniz, 30-40 FPS'den eser yoktur. Artık orada her zaman 40-45 alırsınız.

İşte bunu sağlayan şey bazı işlemci gücü gerektiren hesaplamaların diske kaydedilmesidir.

Bu her oyun için geçerli olmayabilir, bazı oyunlar shader cachelerin avantajını öylesine kullanmaktadır ki (AC Origins, Odyssey, Shadow of Tomb Raider vb.) kapatmanız hâlinde sürekli olarak kötü performans almanız olasıdır.

On saat boyunca oynadığınızda o kadar çok shader cache birikir ki, 45 FPS üstü göremediğiniz bir yerde 60 FPS görür olursunuz. Bunlar hep kaydedilen cacheler sayesinde işlemciye binecek ek yükün bertaraf edilmesi sayesindedir.

Özetle, kapatmanızı tavsiye etmem. Bir oyun yaklaşık 300-400 MB'lik bir cache biriktirebilir. Fakat bunun sayesinde elde edeceğiniz performans kesinlikle bunu meşru kılar. AC Odyssey bazında konuşacak olursam 50 saatlik oyun sonunda 2 GB cache biriktirmişti. Fakat işlemciye ağır bindiren bölgelerde 30 FPS'ye kadar düşerken artık 40 FPS'nin altına düşmüyorum. Böyle de bir katkısı olmuştur.
 
Çözüm
Kısaca;
Ekran kartları sadece kendi sürücülerine uygun programlama dillerini okuyabilirler ve başka diller öğrenemezler. İşlemcilere ise teoride her dili öğretmek mümkündür.

Oyunun yükleme ekranında shader kodları, oyun yapımcısı firmanın kaydettiği (hatta bazen sıkıştırılmış) formattan, ekran kartının işlem yapabileceği ve üzerinde çalışabileceği formata "derlenir" (compiling). En kaba haliyle zipten çıkarma gibi düşünebilirsiniz.

Bu shader kodları oyunun yükleme ekranı esnasında oluşturulur ve oyuna başlarsınız. Zaman zaman oyuna yeni sahneler/nesneler dahil oldukça yükleme ekranı dışında da yeni shader kod derlemesi yapılabilir. Koda gerek kalmayınca derlenmiş hal bellekten silinir. Oyun yeniden çalıştırıldığında bir daha derlenir.

En üstteki cümleden anlayacağınız üzere bu derleme işi işlemci tarafından yapılır. Oyun esnasında yapılırsa saniyeden kısa süren bir kaç "takılma" yaşanabilir.

Shader cache, bir kere derlenip ekran kartının okuyacağı formata getirilmiş bir shader kodunun, işi bitince (oyundan çıkınca) silinmesi yerine hard diske kayıt edilmesini ve oyun yeniden açıldığında derleme işlemine gerek kalmadan yeniden kullanılmasını sağlar.

Bazı oyunlar shader kodlarını oyun esnasında da modifiye ederler ve güncellerler. Ekran kartının yapımcı firması (AMD ve Nvidia) bu durumu biliyorsa ve önlemini almışsa ya birden fazla cache (depolama) yapar ya da anında gerekli değişiklikleri yürürlüğe sokar. Ancak bu işi Nvidia, AMD'den bir kaç sene erken başlattığı ve anlaşma yaptığı çoğu oyunda sadece Nvidia sürücüleriyle uyumlu shader cache'ler yaratıldığı için nispeten eski oyunlarda AMD'nin shader cache'i kapatması daha mantıklıdır. Bu durumda otomatik açma/kapama/güncelleme yapabilmesi ve hataya yer kalmaması için en mantıklı seçenek "AMD Optimized" seçeneğidir. Zaten Nvidia sürücülerinde gelen ayar da "Nvidia optimized" şeklindedir.

Bu tekniklerin oyuna dahil edilmediği, çok eski oyunlarda manuel olarak "Her zaman açık" seçeneği yardımcı olabilir. Ancak bu seçenek, sadece oyunda sorunlar görülüyorsa çözüm amaçlı olarak kullanılmalıdır.
 
Kısaca;
Ekran kartları sadece kendi sürücülerine uygun programlama dillerini okuyabilirler ve başka diller öğrenemezler. İşlemcilere ise teoride her dili öğretmek mümkündür.

Oyunun yükleme ekranında shader kodları, oyun yapımcısı firmanın kaydettiği (hatta bazen sıkıştırılmış) formattan, ekran kartının işlem yapabileceği ve üzerinde çalışabileceği formata "derlenir" (compiling). En kaba haliyle zipten çıkarma gibi düşünebilirsiniz.

Bu shader kodları oyunun yükleme ekranı esnasında oluşturulur ve oyuna başlarsınız. Zaman zaman oyuna yeni sahneler/nesneler dahil oldukça yükleme ekranı dışında da yeni shader kod derlemesi yapılabilir. Koda gerek kalmayınca derlenmiş hal bellekten silinir. Oyun yeniden çalıştırıldığında bir daha derlenir.

En üstteki cümleden anlayacağınız üzere bu derleme işi işlemci tarafından yapılır. Oyun esnasında yapılırsa saniyeden kısa süren bir kaç "takılma" yaşanabilir.

Shader cache, bir kere derlenip ekran kartının okuyacağı formata getirilmiş bir shader kodunun, işi bitince (oyundan çıkınca) silinmesi yerine hard diske kayıt edilmesini ve oyun yeniden açıldığında derleme işlemine gerek kalmadan yeniden kullanılmasını sağlar.

Bazı oyunlar shader kodlarını oyun esnasında da modifiye ederler ve güncellerler. Ekran kartının yapımcı firması (AMD ve Nvidia) bu durumu biliyorsa ve önlemini almışsa ya birden fazla cache (depolama) yapar ya da anında gerekli değişiklikleri yürürlüğe sokar. Ancak bu işi Nvidia, AMD'den bir kaç sene erken başlattığı ve anlaşma yaptığı çoğu oyunda sadece Nvidia sürücüleriyle uyumlu shader cache'ler yaratıldığı için nispeten eski oyunlarda AMD'nin shader cache'i kapatması daha mantıklıdır. Bu durumda otomatik açma/kapama/güncelleme yapabilmesi ve hataya yer kalmaması için en mantıklı seçenek "AMD Optimized" seçeneğidir. Zaten Nvidia sürücülerinde gelen ayar da "Nvidia optimized" şeklindedir.

Bu tekniklerin oyuna dahil edilmediği, çok eski oyunlarda manuel olarak "Her zaman açık" seçeneği yardımcı olabilir. Ancak bu seçenek, sadece oyunda sorunlar görülüyorsa çözüm amaçlı olarak kullanılmalıdır.
İkileme soktunuz beni bu yazınızla :)
 
Uyarı! Bu konu 7 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Yeni konular

Geri
Yukarı