Çalıştığım yerde, her zaman birden çok profil düzeyi kullanıyoruz; bir sorun görürseniz, neler olduğunu anlayana kadar listeyi biraz daha aşağı kaydırırsınız:
- "İnsan profiler", aka sadece oyun oynamak ; yavaş veya “aksaklık” hissediyor mu? Sarsıntılı animasyonlar fark ettiniz mi? (Bir geliştirici olarak, bazı performans sorunlarına ve diğerlerine karşı daha duyarlı olacağınızı unutmayın. Buna göre ekstra testler planlayın.)
- Kayar pencere 5 saniyelik ortalama FPS olan FPS ekranını açın . Hesaplamak ve görüntülemek için çok az ek yük.
- Kodun her bölümü çevresinde basit bir "kronometre" zamanlayıcısı kullanarak çerçevenin farklı bölümlerini (ör. Vblank, preframe, güncelleme, çarpışma, oluşturma, postframe) temsil eden dörtlü bir dizi (ROYGBIV renkleri) olan profil çubuklarını açın . İstediğimizi vurgulamak için, bir ekran genişliği değerinin çubuğunu 60Hz hedef çerçeveyi temsil edecek şekilde ayarladık, bu nedenle örneğin bütçenin% 50'si (yalnızca yarım çubuk) veya% 50'nin ( çubuk sarılır ve bir buçuk çubuk olur). Çerçevenin çoğunu genellikle ne yediğini söylemek de oldukça kolaydır: kırmızı = render, sarı = güncelleme, vb ...
- Her fonksiyonun etrafına kod gibi "kronometre" ekleyen özel bir enstrümanlı yapı oluşturun. (Bunu yaparken büyük bir performans, dcache ve icache vurulabileceğinizi unutmayın, bu yüzden kesinlikle müdahaleci olur. Ancak CPU'da uygun bir örnekleme profili veya iyi bir desteğe sahip değilseniz, bu kabul edilebilir bir seçenektir. bizimki yaptığımızda / çıkış girip daha sonra calltraces yeniden fonksiyon üzerindeki verilerin minimum kayıt hakkında.), biz çok taklit gprof'ın çıkış biçimi 'ın.
- En iyisi, bir örnekleme profili oluştur ; VTune ve CodeAnalyst x86 ve x64 için kullanılabilir, burada size veri verebilecek çeşitli simülasyon veya benzetim ortamlarınız var.
(Mutlu, kayıtsız, sinirlenmiş ve öfkeli - dört fotoğrafını çeken ve kare yapısına göre iç yapıların köşesinde uygun bir resim sergileyen bir grafik programcısının GDC'sinden eğlenceli bir hikaye var. içerik oluşturucuları, tüm nesneleri ve ortamları için karmaşık gölgelendiricileri açmamayı çabucak öğrendiler : programcıyı kızdırırlardı. Geri bildirim gücüne bakın.)
"Profil çubuklarını" grafik gibi eğlenceli şeyler de yapabileceğinizi unutmayın, böylece ani desenler ("her 7 karede bir kare kaybediyoruz") veya benzerlerini görebilirsiniz.
, Doğrudan cevap olsa için: Tecrübelerime göre bu cazip gelebilir ederken (ve genellikle ödüllendirme - Ben genellikle şeyler öğrenmek) optimize talimatlar sayısı veya icache ya dcache performansına tek fonksiyonları / modüllerini yeniden yazmak için, ve biz aslında yok gerek yapmak bu bazen özellikle iğrenç bir performans problemimiz olduğunda, düzenli olarak ele aldığımız performans sorunlarının büyük çoğunluğu tasarıma iner . Örneğin:
- Oynatıcı için "saldırı" durumu animasyon karelerini RAM'de önbelleğe almalı mı yoksa diskten yeniden yüklemeli miyiz? Her düşmana ne dersin? Hepsini yapacak RAM'imiz yok, ancak disk yükleri pahalı! Aynı anda 5 veya 6 farklı düşman ortaya çıkarsa otostopu görebilirsiniz! (Tamam, yumurtlamaya ne dersin?)
- Tüm parçacıklar arasında tek bir işlem mi yapıyoruz yoksa tek bir parçacığımızdaki tüm işlemleri mi yapıyoruz? (Bu bir icache / dcache dengesidir ve cevap her zaman net değildir.) Tüm parçacıkları ayırmaya ve konumları birlikte depolamaya (ünlü "dizilerin yapısı") karşı tüm parçacık verilerini tek bir yerde tutmaya (" yapı dizisi ").
Herhangi bir üniversite düzeyinde bilgisayar bilimi dersinde iğrenç hale gelene kadar duyuyorsunuz, ama: gerçekten veri yapıları ve algoritmalar ile ilgili. Algoritma ve veri akışı tasarımı üzerinde biraz zaman harcamanız, genel olarak para için daha fazla patlama sağlayacak. ( Burada bir fikir edinmek için bir Sony Geliştirici Hizmetleri görevlisinin Nesne Odaklı Programlama slaytlarının mükemmel tuzaklarını okuduğunuzdan emin olun .) Bu, optimizasyon gibi "hissetmez"; geçerli kodun daha hızlı çalışmasını sağlamak yerine çoğunlukla beyaz tahta veya UML aracıyla veya çok sayıda prototip oluştururken harcanan zamandır. Ama genellikle çok daha değerli.
Ve bir başka yararlı sezgisel: Eğer motorunuzun "çekirdeğine" yakınsanız, optimize etmek için fazladan çabaya ve denemeye değer olabilir (örneğin, bu matris çarpanlarını vektörleyin!). Çekirdekten ne kadar uzak olursanız, profil oluşturma araçlarınızdan biri size aksini söylemedikçe, bu konuda daha az endişe duymalısınız.