Чи розблокує кадр у XNA / MonoGame, скажіть, наскільки ефективний мій код?


12

Я розблокував кадр в MonoGame через:

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

І використовувати його як основу для того, наскільки ефективно я оновлюю і малюю в грі.

При роздільній здатності 240 х 160, при цьому нічого не малюється і не оновлюється, окрім лічильника кадрів, я отримую значення FPS від 9000 до 11000 FPS.

Якщо я знову додаю весь код, він знижується до приблизно 1100 FPS.

Це хороший показник того, що мій код значно сповільнює роботу графічного процесора (10 разів), і чи варто мене турбувати? Гра буде працювати зі швидкістю 60 кадрів в секунду, тому я все ще досить далекий від цього, але в якому моменті частота розблокованих кадрів повинна мене турбувати?

GPU: AMD FirePro W5000 (FireGL V)


1
Як бічна примітка: на своєму шляху розвитку я б запропонував вам зберегти цільовий FPS як у налагодженні, так і у випуску; щось може працювати добре, але може бути повільним, як пекло в налагодженні, що насправді не корисно :)
Vaillancourt

Не зовсім. Інші відповіді відповідають на це добре, але головне в тому, що більшість важких підйомів буде виконана вашою відеокартою за допомогою апаратного прискорення. Якщо ви не працюєте в тій самій нитці, що й графіка (ви не повинні бути), то жодних причин для FPS не впливати на ваш код - всередині причини.
Ден Комора

Відповіді:


30

Тільки грубо.

По-перше, FPS - це не лінійна міра . Різниця між 11k FPS і 9k надзвичайно мала (0,0000201 секунд на кадр). Але різниця між 60 і 2060 FPS (дельта 2k FPS, та сама, що існує між 11 к і 9 к) становить 0,0161 секунди ... набагато більша. Таким чином, він може бути небезпечним як показник ефективності просто тому, що великі відмінності можуть бути, а можуть бути і не такими поганими.

Замість цього використовувати час за кадром - дещо простіше міркувати, але навіть тоді це все ще дуже широкий погляд на ситуацію. Він просто говорить вам, скільки секунд займає один кадр гри. Це не говорить вам, чому , якщо ви не дивитесь на значне збільшення часу кадру відразу після додавання або включення однієї конкретної функції.

Це може бути базовим барометром для того, щоб вирішити, що настав час зробити більш поглиблене профілювання. Особливо погано використовувати FPS, щоб визначити, чи є ви CPU чи GPU; Профілювання GPU не так-то просто, як вимірювання часу на процесорі (саме там, напевно, є ваш термін та FPS-код обчислення).

Що стосується того, коли вас турбує ... ну, ви самі сказали, що гра націлена на 60 FPS. Якщо ви почнете занурюватися поблизу або нижче, вам, ймовірно, потрібно почати більш ретельно думати про свої проблеми з продуктивністю. До цього часу я б зосередився на тому, щоб все працювало, а потім переймаюся тим, як зробити це швидко .


6
+1 за останнє речення. Передчасна оптимізація продуктивності, на мій погляд, є досить поганою практикою (якщо говорити з досвіду).
sirdank

1
c2.com/cgi/wiki?PrematureOptimization - Рекомендовано прочитати на тему
Махінарій

Не завжди, якщо у вас машина високого класу і вона отримує близько 80 FPS, то це буде досить добре на вашій машині, але якщо ви хочете орієнтуватися на комп’ютери нижнього кінця, вони можуть отримати лише 15 FPS, в ідеалі, було б найкраще зробити тестування на машині з мінімальними специфікаціями, на які ви хочете націлити, але якщо цього не зробити, оптимізація його для вашої машини може також оптимізувати їх. Звичайно, якщо він працює досить швидко на ваших низькопрофільних машинах, то немає ніяких причин витрачати додаткові зусилля на оптимізацію подальшої оптимізації, особливо під загрозою збільшення помилок.
Programmdude

5

Я не бачу, чому ти не міг ним скористатися! Майте на увазі, що вам, можливо, доведеться кодувати по-різному, щоб врахувати відмінності між фіксованим / змінним часовим кроком, тому якщо ви плануєте зробити його фіксованим під час випуску, вам доведеться внести корективи. Дивіться цю статтю: http://rbwhitaker.wikidot.com/time-steps

Це хороший показник того, що мій код значно сповільнює GPU

Може бути і процесор. Я рекомендую періодично запускати вбудований в профілер Visual Studio (або коли ви бачите велику крапку кадрів), щоб знайти гарячі точки у своєму коді.

я повинен турбуватися?

Це очевидно залежить від обладнання, на яке ви орієнтовані. Вам потрібно буде протестувати свій код на машинах із найменшими мінімальними вимогами, які ви готові підтримати. Якщо там працює щонайменше 60, то я б не надто хвилювався.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.