Чи нормально в грі використовувати 100% процесор?


23

Я щойно реалізував багатопотокове керування входом у своєму ігровому двигуні, де код, який опитує ОС для збору вхідних даних від неї та часових позначок, знаходиться в окремому потоці, і кожен кадр у головному потоці я просто з'їдаю зібраний вхід до логічний ігровий час. Це все працює, але ця настройка використовує 100% мого процесора. У мене є два ядра, і це відбувається до 100% під час роботи моєї гри.

Я перевірив інші ігри, щоб перевірити, чи роблять вони це теж. Наприклад, Skyrim і Doom 3 здаються непоганими з процесором трохи більше 60%.

Чи прийнятно для гри, яка використовує багатопотоковий вхід, щоб використовувати до 100% ЦП? Якщо ні, то якими трюками користуються такі ігри, щоб знизити використання процесора вхідним потоком?


7
Отже, що ви говорите, у вас в основному є нитка з нескінченним циклом, який постійно опитує ОС для нових подій? while true do CheckForEvents;
Кромстер каже, що підтримує Моніку

5
Якщо програма використовує 100% часу процесора незалежно від використання та швидкості процесора, це справедливо може вважатися помилкою. Ви не повинні використовувати більше процесорного часу, ніж потрібно для візуалізації кадру за цикл оновлення монітора.
kasperd

3
@TheLightSpark Тема для голосування навіть не спить? Якщо ви постійно лупцюєте і перевіряєте, не спаючи, ви, ймовірно, будете їсти набагато більше часу в процесорі, ніж потрібно.
Лука

3
Re @Luke: Навіть спати лише мілісекунда між опитуваннями різко зменшить використання процесора. Нещодавно я написав графічний інтерфейс для інструменту командного рядка, який взяв вхідний файл і зробив вихідний файл приблизно однакового розміру. Щоб оцінити відсоток, я прочитав розмір файлу вихідного файлу та оновив панель ходу (використовуючи while (true)). Для цього використано 90% + одного процесора. Додані Thread.Sleep(5)до нього знизили використання процесора до менше 40%. Перехід до 25 мілісекунд між опитуваннями знизив її до менше 10%.
Коул Джонсон

2
@AlecTeal Я думаю, ви не приділили достатньої уваги тому, що я сказав. Надання кращої графіки - це не те саме використання, і, звичайно, включення кращої графіки збільшить споживання процесора. Але якщо перехід на більш швидкий процесор призведе до того, що ваш код просто витратить більше циклів, створюючи такий самий результат, ваш код виявиться помилковим. Автоматичне вимірювання того, яка якість графіки може бути надана за допомогою конкретного процесора, є розумним замовчуванням. Але ви повинні дозволити користувачам обирати, якщо вони працюють від акумулятора або також потрібен процесор для фонових завдань.
kasperd

Відповіді:


41

Так, це нормально, щоб гра в режимі реального часу намагалася використовувати 100% -ний процесор, щоб виконувати його максимально швидко та добре. Так що гравець бачить стільки кадрів в секунду або хорошу фізичну симуляцію чи все інше, що може забезпечити його ПК.

У вашому випадку - Ні, це виглядає як неефективна конструкція, взяти нитку і зробити її опитуванням на події в циклі ( while true do CheckForEvents;). Виправте мене, якщо я помиляюся, але ОС вже опитує події. Ви повинні просто перевірити їх у головному потоці раз на кожен галочку.

Основний цикл гри повинен бути досить швидким для запуску 30+ кліщів в секунду, що цілком достатньо для опитування команд для багатьох ігор. Гравець не побачить різниці, якщо його команди будуть оброблені, наприклад, 0-33ms пізніше. З іншого боку, ви могли б використовувати це додаткове ядро ​​процесора для більш вигідних завдань, таких як МНОГО кращий штучний інтелект чи фізика чи що завгодно.

PS Як вимагається уточнити в коментарях, не приймайте вище номерів сліпо для всіх видів ігор. У той час як для гри TBS може знадобитися лише 1 галочка за поворот, а гра RTS може бути чудовою з 10 кліщами за поворот, інші жанри, як RaceSims, потребують значно більше. І звичайно не пов'язуйте логічні кліщі з частотою кадрів, це дві окремі речі.


5
Я б підтримав це питання, але тоді я бачу, що ви рекомендуєте 30 кліщів на секунду. ІМХО (а також у багатьох інших геймерів), вам слід націлитись на 60 тиків (а значить, і на 60 кадрів) в секунду. 60 FPS для багатьох людей виглядає більш текучою, грає більш чуйно і менше шансів надати певній підгрупі користувачів.
Nzall

4
33мс затримка введення дуже помітна ...
Synxis

1
@NateKerkhofs: Я прийшов з фона RTS, де зазвичай 10 кліщів. Це широкий світ, я додам деталі про це. Дякуємо, що вказали.
Кромстер каже, що підтримує Моніку

1
@KromStern: Я не можу повністю говорити за Нейт, але третій абзац можна інтерпретувати як "30 Гц повинен бути вашою ціллю", хоча це також може бути інтерпретовано як "30 Гц - це мінімум, який ви можете терпіти" (що може бути, що ви мали на увазі ).
Шон Міддлічч

1
Використання 100% процесора - жахлива практика. Ви накручуєте користувачів ноутбуків на речі, які ні в якому разі, формі чи формі не повинні використовувати 100% ЦП. Зашифруйте правильний цикл гри, який може ефективно подавати кадри на монітор.
Кріс Деннетт

9

Гра з постійним активним оновленням вікон в основному працюватиме в повноекранному режимі і буде єдиною (великою) програмою машини, якою керує ОС. Тому цілком прийнятно використовувати 100% процесора, тому що нічого іншого йому не потрібно.

Однак це не означає, що, звичайно, завжди потрібно використовувати 100% незалежно від стану гри. Більшість ігрових циклів використовують режим сну як роздільник рамки, якщо вони закінчили виводити кадр перед обмеженням частоти кадрів, щоб не використовувати процесор дарма.
Це, мабуть, те, що відбувається у ваших прикладах: ваш апарат швидше, ніж Skyrim або Doom 3 потрібно запустити, тому вони використовують лише те, що потрібно - але все те, що їм потрібно.

Як сказав @KromSterm, ОС зазвичай вже опитує події для вас, тому немає необхідності робити цикл швидше, ніж у ОС. Якщо у вас є лише два ядра, використовувати 100% другого лише для виявлення подій - це не дуже гарна ідея, тому що якщо ви переносите події лише в основний цикл оновлення, це дуже швидко виконати. Спробуйте використати це ядро ​​для частини основного завдання замість іншого потоку.


"використовувати метод сну" - я правий, думаючи, що це відомий як обмежувач частоти кадрів?
Гусдор

3
сон не є точним методом обмеження кадру, якщо мета - обмежити кадри для моніторингу частоти оновлення, тоді краще використовувати апаратну підтримку vsync (або g-синхронізацію nvidia, якщо вона доступна)
Sarge Borsch,

8

Є кілька недоліків, спрямованих на використання всього доступного часу процесора в ПК або мобільній грі.

Системні вимоги: Якщо гра може бути відтворена на ПК, де ви розвиваєте свою гру, вона може бути відтворена на слабшому ПК, який належить тому, хто придбав вашу гру. Обмеження використання процесора дозволить утримувати гру, придатну для використання на машинах, на яких, швидше за все, вже є люди. Якщо ви дійсно хочете дізнатися, чи обмежуєте ви свій ринок, протестуйте свої ПК на комп’ютері та ігри своїх конкурентів на роз'єм Atom, який працює на трансформаторі, як-от Transformer Book, або протестуйте свої мобільні ігри на недорогий передплачений телефон Android.

Використання енергії: портативний комп'ютер розряджає акумулятор швидше, коли чотири ядра використовуються на 100 відсотках повної частоти, ніж коли, скажімо, два ядра використовуються на 60 відсотках половини частоти. Тому переконайтесь, що потоки опитування контролера, потоку AI, фізики і графіки є заблокованими, поки не настав час їх запуску. За винятком кількох дуже хитромудрих жанрів, таких як бійка та ритм, вам не потрібно буде опитувати контролери швидше, ніж приблизно 60 Гц, тому встановіть свою тему для опитування, щоб вона працювала на таймері 60 Гц.

Змінність фізики: Якщо фізика, яка впливає на геймплей, буде більш детальною на сильніших машинах, однакові дії гравця матимуть різні результати на різних машинах. Це означає, що гравець, можливо, зможе обдурити, використовуючи більш сильну або слабку машину. Quake III Arena Id відомий тим, що частота кадрів впливає на висоту стрибка . Щоб цього уникнути, багато ігор використовують фіксований крок часу з фізики. Але це не впливає на фізику, відключену від геймплея, наприклад, ефект частинок або ефект тканини або інтерполяція координат між фізичними кадрами для відтворення відео з більшою швидкістю кадрів, ніж фізика. Тож спроектуйте свою фізику, використовуючи якийсь варіант модельного перегляду-контролера архітектура, де необхідні речі (прискорення, виявлення ударів тощо) входять у модель, і цукерки для очей, що регулюються, переглядаються.

Мінливість AI: Якщо AI буде детальніше на сильніших машинах, вороги поводяться по-різному на різних машинах. Наприклад, у реалізації Go або Chess супротивник буде слабшим на слабшому ПК, і гравці можуть обманювати, граючи в гру на слабшому ПК або запускаючи фонові процеси, такі як антивірусне чи перекодування відео чи оновлення операційної системи.


4
+1 для використання енергії. Тим більше, що слід враховувати в галузі мобільних телефонів та планшетів, де це надзвичайно важливо.
акалтар

1
Використання електроенергії також впливає на шум, навіть на робочих столах. Для сучасних настільних комп’ютерів прийнято підтримувати своїх шанувальників повільними та тихими, коли система прохолодна. Також, можливо, користувач кодує відео (з низьким пріоритетом) під час відтворення, тому будь-який запасний час процесора не витрачається даремно. Або для гравців, які потоковуються, посмикуватися, залишати більше циклів для кодування відео - це велика справа та дає можливість вищої якості відео. (Кодування відео - це тристороння компроміс між часом процесора, бітрейтом та якістю, тому більше часу процесора означає кодування в реальному часі з більш високою якістю при тому ж бітрейті.)
Пітер Кордес,

1
Використання електроенергії повинно бути основним фактором, всі інші міркування вторинними, ІМХО. Єдине, для чого я використовував би 100% процесор (якщо це справді допомогло!) - це VR-речі.
Кріс Деннетт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.