Akankah membuka framerate di XNA / MonoGame memberi tahu saya seberapa efisien kode saya?


12

Saya telah membuka kunci framerate di MonoGame via:

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

Dan menggunakannya sebagai dasar seberapa efisien saya memperbarui dan menggambar dalam permainan.

Pada resolusi 240 x 160 dengan tidak ada yang ditarik atau diperbarui kecuali frame counter saya mendapatkan nilai FPS dari 9000 hingga 11.000 FPS.

Jika saya menambahkan semua kode saya kembali turun menjadi sekitar 1.100 FPS.

Apakah ini indikasi yang baik bahwa kode saya secara signifikan memperlambat GPU (10x), dan haruskah saya khawatir? Game ini akan berjalan pada 60 FPS jadi saya masih cukup jauh dari itu, tetapi pada titik berapa frame rate yang tidak terkunci harus saya perhatikan?

GPU: AMD FirePro W5000 (FireGL V)


1
Sebagai catatan tambahan: Di jalur pengembangan Anda, saya sarankan Anda menyimpan target FPS Anda dalam debug dan juga dalam rilis; sesuatu bisa berjalan dengan baik dalam rilis tetapi bisa lambat sekali dalam debug, yang benar-benar tidak berguna :)
Vaillancourt

Tidak juga. Jawaban lain menjawab ini dengan baik, tetapi poin utamanya adalah sebagian besar pengangkatan berat akan dilakukan oleh kartu grafis Anda menggunakan akselerasi perangkat keras. Kecuali jika Anda melakukan pekerjaan di utas yang sama dengan grafik (Anda seharusnya tidak), maka tidak ada alasan bagi FPS untuk dipengaruhi oleh kode Anda - dengan alasan - sama sekali.
Dan Pantry

Jawaban:


30

Hanya dengan kasar.

Pertama, FPS bukan ukuran linier . Perbedaan antara 11k FPS dan 9k sangat kecil (0,0000201 detik per frame). Tetapi perbedaan antara 60 dan 2060 FPS (delta FPS 2k, sama yang ada antara 11k dan 9k) adalah 0,0161 detik ... jauh lebih besar. Dengan demikian dapat berbahaya sebagai metrik kinerja hanya karena perbedaan besar mungkin atau mungkin tidak seburuk itu.

Menggunakan time-per-frame sebagai gantinya sedikit lebih mudah untuk dipikirkan, tetapi meskipun demikian itu masih merupakan pandangan yang sangat luas tentang situasi. Ini hanya memberi tahu Anda berapa detik yang dibutuhkan oleh satu frame permainan. Itu tidak memberi tahu Anda alasannya , kecuali jika Anda melihat peningkatan besar dalam waktu bingkai segera setelah menambahkan atau mengaktifkan satu fitur tertentu.

Ini bisa menjadi barometer dasar untuk memutuskan saatnya untuk melakukan lebih banyak profil mendalam. Sangat buruk menggunakan FPS untuk menentukan apakah Anda menggunakan CPU atau GPU; Pembuatan profil GPU tidak semudah mengukur waktu pada CPU (yang merupakan tempat pengaturan waktu Anda dan kode komputasi FPS).

Adapun ketika Anda harus khawatir ... well, Anda mengatakan pada diri sendiri bahwa permainan menargetkan 60 FPS. Jika Anda mulai mencelupkan dekat atau di bawah itu, maka Anda mungkin perlu mulai berpikir lebih hati-hati tentang masalah kinerja Anda. Sampai saat itu, saya akan fokus untuk membuat semuanya bekerja dan kemudian khawatir membuatnya cepat .


6
+1 untuk kalimat terakhir. Optimalisasi kinerja prematur, menurut saya, adalah praktik yang sangat buruk (berbicara dari pengalaman).
sirdank

1
c2.com/cgi/wiki?PrematureOptimization - Disarankan membaca tentang subjek
Machinarius

Tidak selalu, jika Anda memiliki mesin kelas atas dan mendapat sekitar 80 FPS, maka itu akan cukup baik pada mesin Anda, tetapi jika Anda ingin menargetkan komputer kelas bawah, mereka mungkin hanya mendapatkan 15 FPS, Idealnya, itu akan lebih baik untuk melakukan pengujian pada mesin dengan spesifikasi minimum yang ingin Anda targetkan, tetapi jika gagal, mengoptimalkannya untuk mesin Anda dapat mengoptimalkannya juga untuk mereka. Tentu saja, jika itu berjalan cukup cepat pada mesin low end Anda, maka tidak ada alasan untuk menghabiskan upaya ekstra untuk mengoptimalkan lebih lanjut, terutama dengan risiko peningkatan bug.
Programmdude

5

Saya tidak mengerti mengapa Anda tidak bisa menggunakannya! Ingatlah bahwa Anda mungkin harus membuat kode berbeda untuk memperhitungkan perbedaan antara cap waktu tetap / variabel, jadi jika Anda berencana memperbaikinya saat dirilis, Anda harus membuat penyesuaian. Lihat artikel ini: http://rbwhitaker.wikidot.com/time-steps

Apakah ini indikasi yang baik bahwa kode saya secara signifikan memperlambat GPU

Bisa jadi CPU juga. Saya akan merekomendasikan secara berkala menjalankan profiler bawaan Visual Studio (atau setiap kali Anda melihat penurunan framerate besar) untuk menemukan hot spot dalam kode Anda.

haruskah saya khawatir?

Itu jelas tergantung pada perangkat keras yang Anda targetkan. Anda harus menguji kode Anda terhadap mesin persyaratan minimum terendah yang bersedia Anda dukung. Jika berjalan setidaknya 60 di sana, maka saya tidak akan terlalu khawatir.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.