การปลดล็อกอัตราเฟรมใน XNA / MonoGame จะบอกฉันว่ารหัสของฉันมีประสิทธิภาพหรือไม่


12

ฉันได้ปลดล็อกอัตราเฟรมใน MonoGame ผ่านทาง:

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

และใช้เป็นพื้นฐานสำหรับการปรับปรุงและวาดภาพในเกมอย่างมีประสิทธิภาพ

ที่ความละเอียด240 x 160โดยไม่มีการวาดหรืออัปเดตใด ๆ ยกเว้นตัวนับเฟรมฉันจะได้รับค่า FPS 9,000ถึง11,000 FPS

หากฉันเพิ่มรหัสทั้งหมดของฉันลงไปมันจะลดลงเหลือประมาณ1,100 FPS

นี่เป็นตัวบ่งชี้ที่ดีว่ารหัสของฉันทำให้ GPU ช้าลงอย่างมาก (10x) และฉันควรจะกังวลไหม? เกมจะวิ่งที่ 60 FPS ดังนั้นฉันก็ยังค่อนข้างห่างไกลจากจุดนั้น แต่ควรจะกังวลเกี่ยวกับอัตราเฟรมที่ปลดล็อคที่จุดใด

GPU: AMD FirePro W5000 (FireGL V)


1
ตามหมายเหตุด้านข้าง: ในเส้นทางการพัฒนาของคุณฉันขอแนะนำให้คุณเก็บ FPS เป้าหมายของคุณไว้ในการดีบักและในการเปิดตัว บางสิ่งบางอย่างอาจทำงานได้ดีในข่าว แต่อาจจะช้าเป็นนรกในการแก้ปัญหาที่เป็นจริงไม่ได้มีประโยชน์ :)
Vaillancourt

ไม่ได้จริงๆ คำตอบอื่น ๆ ตอบคำถามนี้ได้ดี แต่ประเด็นหลักก็คือการ์ดกราฟิกของคุณส่วนใหญ่จะใช้การเร่งด้วยฮาร์ดแวร์ นอกจากว่าคุณกำลังทำงานในเธรดเดียวกับกราฟิก (คุณไม่ควรทำ) ดังนั้นจึงไม่มีเหตุผลที่ FPS จะได้รับผลกระทบจากรหัสของคุณ - ด้วยเหตุผล - ในทุกกรณี
Dan Pantry

คำตอบ:


30

อย่างโหดร้ายเท่านั้น

ครั้งแรกFPS เป็นไม่ได้เป็นตัวชี้วัดเชิงเส้น ความแตกต่างระหว่าง 11k FPS และ 9k นั้นน้อยมาก (0.0000201 วินาทีต่อเฟรม) แต่ความแตกต่างระหว่าง 60 และ 2060 FPS (เดลต้า 2k FPS เหมือนกับที่มีอยู่ระหว่าง 11k และ 9k) คือ 0.0161 วินาที ... ใหญ่กว่ามาก มันอาจเป็นอันตรายในฐานะที่เป็นตัวชี้วัดประสิทธิภาพเพียงเพราะความแตกต่างมากหรืออาจจะไม่เลว

การใช้เวลาต่อเฟรมแทนนั้นง่ายกว่านิดหน่อยที่จะให้เหตุผล แต่ถึงอย่างนั้นก็ยังคงเป็นมุมมองที่กว้างมากเกี่ยวกับสถานการณ์ มันแค่บอกคุณว่าเกมหนึ่งเฟรมใช้เวลากี่วินาที มันไม่ได้บอกคุณว่าทำไมเว้นแต่คุณจะเห็นเวลาเพิ่มขึ้นอย่างมากในทันทีหลังจากเพิ่มหรือเปิดใช้งานคุณลักษณะเฉพาะอย่างใดอย่างหนึ่ง

มันอาจเป็นบารอมิเตอร์พื้นฐานสำหรับการตัดสินใจว่าถึงเวลาที่จะทำโปรไฟล์ในเชิงลึกมากขึ้น การใช้ FPS เป็นสิ่งที่ไม่ดีเป็นพิเศษหากพิจารณาว่าคุณใช้ CPU หรือ GPU การทำโปรไฟล์ GPU นั้นไม่ใช่เรื่องง่ายเหมือนการวัดเวลาบนซีพียู (ซึ่งเป็นที่ที่เวลาและรหัสการคำนวณ FPS ของคุณ)

สำหรับเมื่อคุณควรกังวล ... ดีคุณบอกว่าตัวเองเป็นเกมที่มีเป้าหมาย 60 FPS หากคุณเริ่มจุ่มลงไปใกล้หรือต่ำกว่านั้นคุณอาจต้องเริ่มคิดอย่างรอบคอบมากขึ้นเกี่ยวกับปัญหาด้านประสิทธิภาพของคุณ จนแล้วฉันจะมุ่งเน้นไปที่การทำทุกอย่างที่ทำงานแล้วต้องกังวลเกี่ยวกับการทำมันได้อย่างรวดเร็ว


6
+1 สำหรับประโยคสุดท้าย ในความคิดของฉันการเพิ่มประสิทธิภาพก่อนวัยอันควรคือการเพิ่มประสิทธิภาพก่อนวัยอันควร (พูดจากประสบการณ์)
sirdank

1
c2.com/cgi/wiki?PrematureOptimization - แนะนำให้อ่านในเรื่องนี้
Machinarius

ไม่เสมอไปหากคุณมีเครื่องระดับไฮเอนด์และได้รับประมาณ 80 FPS แล้วมันจะดีพอสำหรับเครื่องของคุณ แต่ถ้าคุณต้องการกำหนดเป้าหมายคอมพิวเตอร์ระดับล่างพวกเขาอาจได้รับ 15 FPS เท่านั้นมันจะดีที่สุด เพื่อทำการทดสอบบนเครื่องที่มีสเปคขั้นต่ำที่คุณต้องการกำหนดเป้าหมาย แต่ไม่สำเร็จการปรับให้เหมาะสมสำหรับเครื่องของคุณอาจปรับให้เหมาะสมสำหรับพวกเขาเช่นกัน แน่นอนถ้ามันทำงานได้เร็วพอบนเครื่องระดับต่ำสุดของคุณก็ไม่มีเหตุผลที่จะต้องใช้ความพยายามเพิ่มเติมเพื่อเพิ่มประสิทธิภาพโดยเฉพาะอย่างยิ่งเมื่อมีความเสี่ยงจากข้อบกพร่องที่เพิ่มขึ้น
Programmdude

5

ฉันไม่เห็นว่าทำไมคุณไม่สามารถใช้มัน! โปรดทราบว่าคุณอาจต้องใช้รหัสต่างกันในการพิจารณาความแตกต่างระหว่างการประทับเวลาคงที่ / ผันแปรดังนั้นหากคุณวางแผนที่จะแก้ไขเมื่อมีการวางจำหน่ายคุณจะต้องทำการปรับเปลี่ยน ดูบทความนี้: http://rbwhitaker.wikidot.com/time-steps

นี่เป็นข้อบ่งชี้ที่ดีว่ารหัสของฉันทำให้ GPU ช้าลงอย่างมาก

อาจเป็นซีพียูก็ได้เช่นกัน ฉันขอแนะนำให้เรียกใช้ Visual Studio ที่สร้างขึ้นใน profiler เป็นระยะ (หรือเมื่อใดก็ตามที่คุณเห็นการปล่อยเฟรมขนาดใหญ่) เพื่อค้นหาฮอตสปอตในรหัสของคุณ

ฉันควรจะกังวลหรือไม่

แน่นอนว่าขึ้นอยู่กับฮาร์ดแวร์ที่คุณกำหนดเป้าหมาย คุณจะต้องทดสอบรหัสของคุณกับเครื่องที่มีความต้องการขั้นต่ำสุดที่คุณยินดีให้การสนับสนุน ถ้ามันวิ่งอย่างน้อย 60 ตรงนั้นฉันก็จะไม่เป็นห่วง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.