XNA / MonoGame'deki kare hızının kilidini açmak, kodumun ne kadar verimli olduğunu söyleyecek mi?


12

Ben MonoGame framerate kilidini olmuştur:

this.graphics.SynchronizeWithVerticalRetrace = false;
base.IsFixedTimeStep = false;

Ve oyunda güncelleme ve çizim ne kadar verimli için bir temel olarak kullanmak.

240 x 160 çözünürlüğünde, çerçeve sayacı dışında hiçbir şey çizilmiyor veya güncellenmiyor. 9.000 ila 11.000 FPS'lik bir FPS değeri elde ediyorum .

Tüm kodumu geri eklersem yaklaşık 1.100 FPS'ye düşer .

Bu, kodumun GPU'yu önemli ölçüde yavaşlattığının iyi bir göstergesi mi (10x) ve endişelenmem gerekir mi? Oyun 60 FPS'de çalışacak, bu yüzden hala oldukça uzaktayım, ancak kilitlenmemiş kare hızında hangi noktada endişelenmeliyim?

GPU: AMD FirePro W5000 (FireGL V)


1
Bir yan not olarak: Geliştirme yolunuzda, hedef FPS'nizi hata ayıklamada ve sürümde tutmanızı öneririm; bir şey sürümde iyi çalışabilir ama hata ayıklamada cehennem gibi yavaş olabilir, bu gerçekten yararlı değil :)
Vaillancourt

Pek sayılmaz. Diğer cevaplar buna iyi cevap veriyor, ancak asıl nokta, ağır kaldırma işleminin çoğunun donanım hızlandırma kullanılarak grafik kartınız tarafından yapılması. Grafiklerle aynı iş parçacığında çalışmadığınız sürece (olmamalısınız), o zaman FPS'nin kodunuzdan - herhangi bir nedenle - etkilenmesi için hiçbir neden yoktur.
Dan Pantry

Yanıtlar:


30

Sadece kabaca.

Birincisi, FPS doğrusal bir ölçü değildir . 11k FPS ve 9k arasındaki fark çok küçüktür (kare başına 0.0000201 saniye). Ancak 60 ve 2060 FPS (2k FPS deltası, 11k ve 9k arasında aynı olan) arasındaki fark 0.0161 saniyedir ... çok daha büyük. Bu nedenle, bir performans ölçütü olarak tehlikeli olabilir, çünkü büyük farklılıklar bu kadar kötü olabilir veya olmayabilir.

Bunun yerine kare başına zamanı kullanmak biraz daha kolaydır, ancak o zaman bile durumun çok geniş bir görünümüdür. Sadece oyunun bir karesinin kaç saniye sürdüğünü gösterir. Belirli bir özelliği ekledikten veya etkinleştirdikten hemen sonra kare süresinde büyük bir artışa bakmadığınız sürece nedenini söylemez .

Daha derinlemesine profil oluşturma zamanı olduğuna karar vermek için temel bir barometre olabilir. CPU veya GPU'ya bağlı olup olmadığınızı belirlemek için FPS kullanmak özellikle kötüdür; GPU profili oluşturma, CPU'da zamanı ölçmek kadar kolay değildir (zamanlama ve FPS hesaplama kodunuz muhtemelen buradadır).

Ne zaman endişelenmeniz gerektiğine gelince ... iyi, kendinize oyunun 60 FPS'yi hedeflediğini söylediniz. Bunun yakınına veya altına daldırmaya başlarsanız, muhtemelen performans sorunlarınız hakkında daha dikkatli düşünmeye başlamanız gerekir. O zamana kadar, her şeyi işler hale getirmeye odaklanıp, hızlı yapma konusunda endişelenirdim .


6
Son cümle için +1. Zamanından önce performans optimizasyonu, bence oldukça kötü bir uygulamadır (deneyimden bahsederek).
sirdank

1
crem.com/cgi/wiki?PrematureOptimization - Konuyla ilgili tavsiye edilen okuma
Machinarius

Her zaman değil, üst düzey bir makineniz varsa ve yaklaşık 80 FPS alırsa, makinenizde yeterince iyi olurdu, ancak alt uç bilgisayarları hedeflemek isterseniz, sadece 15 FPS alabilirler, İdeal olarak, en iyisi olurdu testinizi hedeflemek istediğiniz minimum spesifikasyonlara sahip bir makinede yapmak, ancak bunu yapmazsanız, makineniz için optimize etmek de makineyi onlar için optimize edebilir. Tabii ki, düşük uçlu makinelerinizde yeterince hızlı çalışıyorsa, özellikle hataların artması riski altında daha fazla optimize etmek için ekstra çaba harcamak için hiçbir neden yoktur.
Programmdude

5

Neden kullanamadığını anlamıyorum! Sabit / değişken zaman aralığı arasındaki farkları hesaba katmak için farklı kodlar yapmanız gerekebileceğini unutmayın, bu nedenle bıraktığınızda düzeltmeyi planlıyorsanız ayarlamalar yapmanız gerekir. Bu makaleye bakın: http://rbwhitaker.wikidot.com/time-steps

Bu, kodumun GPU'yu önemli ölçüde yavaşlattığının iyi bir göstergesi mi?

CPU da olabilir. Kodunuzda sıcak noktaları bulmak için düzenli olarak Visual Studio'nun yerleşik profillerini (veya büyük bir kare hızı düşüşü gördüğünüzde) çalıştırmanızı öneririm.

endişelenmeli miyim?

Bu açıkça hedeflediğiniz donanıma bağlıdır. Kodunuzu, desteklemek istediğiniz en düşük minimum gereksinim makinelerine göre test etmeniz gerekir. Orada en az 60 çalışırsa, o zaman çok endişelenmezdim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.