게임이 100 % CPU를 사용하는 것이 정상입니까?


23

방금 게임 엔진에서 멀티 스레드 입력 처리를 구현하여 OS를 폴링하여 입력을 수집하고 타임 스탬프를 찍는 코드가 별도의 스레드에 있고 메인 스레드의 각 프레임이 수집 된 입력을 최대 논리적 게임 시간. 모두 작동하지만이 설정은 내 CPU의 100 %를 사용하고 있습니다. 두 개의 코어가 있으며 게임을 실행하는 동안 최대 100 %가됩니다.

나는 다른 게임들도 그렇게하는지 확인했다. 예를 들어 Skyrim과 Doom 3은 CPU가 60 % 이상인 것으로 보입니다.

멀티 스레드 입력을 사용하는 게임에서 100 % CPU를 사용할 수 있습니까? 그렇지 않다면, 그러한 게임이 입력 스레드의 CPU 사용량을 낮추기 위해 사용하는 몇 가지 트릭은 무엇입니까?


7
그래서 당신은 기본적으로 끝없는 while 루프가있는 스레드가있어 새로운 이벤트를 위해 OS를 지속적으로 폴링합니까? while true do CheckForEvents;
크롬 스터는 모니카

5
응용 프로그램이 사용량과 CPU 속도에 관계없이 CPU 시간의 100 %를 사용하는 경우, 버그로 간주 될 수 있습니다. 모니터 새로 고침주기 당 프레임을 렌더링하는 데 필요한 것보다 많은 CPU 시간을 사용해서는 안됩니다.
kasperd

3
@TheLightSpark 폴링 스레드는 잠들지 않습니까? 자지 않고 계속 반복하고 확인하면 아마도 필요한 것보다 훨씬 많은 CPU 시간을 소비하게 될 것입니다.
누가

3
Re @Luke : 폴링 사이에 1 밀리 초 만 잠자더라도 CPU 사용량이 크게 줄어 듭니다. 얼마 전 저는 입력 파일을 가져 와서 거의 같은 크기의 출력 파일을 만드는 명령 줄 도구 용 GUI를 작성했습니다. 백분율을 추정하기 위해 출력 파일의 파일 크기를 읽고 진행률 표시 줄을 업데이트했습니다 (을 사용하여 while (true)). 하나의 CPU 중 90 % 이상을 사용했습니다. 에 Thread.Sleep(5)CPU 사용량을 40 % 미만으로 낮추었습니다. 여론 조사 사이에 25 밀리 초가되면 10 % 미만으로 떨어졌습니다.
콜 존슨

2
@AlecTeal 나는 당신이 내가 말한 것에 충분히주의를 기울이지 않았다고 생각합니다. 더 나은 그래픽을 렌더링하는 것은 같은 사용법이 아니며, 더 나은 그래픽을 활성화하면 CPU 소비가 증가합니다. 그러나 더 빠른 CPU로 전환하여 코드가 정확히 동일한 결과를 생성하는 데 더 많은 사이클을 소비하면 코드에 결함이 있습니다. 특정 CPU로 렌더링 할 수있는 그래픽 품질을 자동으로 측정하는 것이 적절한 기본값입니다. 그러나 배터리 전원으로 실행 중이거나 백그라운드 작업을 위해 CPU가 필요한 경우 사용자가 선택할 수 있도록해야합니다.
kasperd

답변:


41

그렇습니다. 이는 실시간 게임 100 % CPU를 사용하여 최대한 빠르고 우수한 성능을 발휘하는 것이 일반적입니다. 따라서 플레이어는 초당 많은 프레임 또는 우수한 물리 시뮬레이션 또는 그의 PC가 제공 할 수있는 다른 모든 것을 볼 수 있습니다.

귀하의 경우-아니오, 이것은 비효율적 인 디자인처럼 보입니다. 스레드를 가져 와서 루프 ( while true do CheckForEvents;)의 이벤트를 폴링합니다 . 내가 틀렸다면 정정하지만 OS는 이미 이벤트를 폴링합니다. 매 틱마다 한 번 메인 스레드에서 확인해야합니다.

메인 게임 루프는 초당 30 회 이상의 틱으로 실행할 수있을 정도로 빠르므로 많은 게임의 폴링 명령에 충분합니다. 명령이 0-33ms 후에 처리되면 플레이어는 차이를 볼 수 없습니다. 다른 한편으로는, 더 나은 인공 지능이나 물리학 또는 기타와 같은 더 유익한 작업에 추가 CPU 코어를 사용할 수 있습니다.

추신 의견에서 명확하게 요청한대로 모든 종류의 게임에 대해 위의 숫자를 맹목적으로 사용하지 마십시오. TBS 게임은 한 턴에 1 틱만 필요하고 RTS 게임은 한 턴에 10 틱으로 괜찮을 수 있지만 RaceSims와 같은 다른 장르는 훨씬 더 필요합니다. 물론 로직 틱을 프레임 속도와 연결하지 마십시오.


5
나는이 질문을 찬성하지만 초당 30 틱을 추천하는 것을 보았습니다. IMHO (및 다른 많은 게이머의 것)는 초당 60 틱 (따라서 60 프레임)을 목표로해야합니다. 많은 사람들을위한 60 FPS는보다 유동적으로 보이며, 반응이 빠르고, 특정 사용자에게 멀미를 줄 가능성이 적습니다.
Nzall

4
입력을 위해 33ms 지연이 눈에 띄게 ...
Synxis

1
@ NateKerkhofs : RTS 배경에서 왔는데 10 틱이 일반적입니다. 그것은 넓은 세상입니다. 자세한 내용을 추가하겠습니다. 지적 해 주셔서 감사합니다.
크롬 스터는 모니카

1
@KromStern : Nate를 완전히 말할 수는 없지만 세 번째 단락은 "30hz가 목표가되어야합니다"로 해석 될 수 있지만 "30hz는 허용 할 수있는 최소값"으로 해석 될 수 있습니다. ).
Sean Middleditch

1
100 % CPU를 사용하는 것은 끔찍한 연습입니다. 어떤 식 으로든 모양이나 형태가 100 % CPU를 필요로하지 않는 물건을 위해 랩탑 사용자를 괴롭 히고 있습니다. 프레임을 모니터에 효율적으로 공급할 수있는 적절한 게임 루프를 코딩하십시오.
Chris Dennett

9

지속적으로 활성화 된 창을 새로 고치는 게임은 대부분 전체 화면 모드로 실행되며 OS에서 관리하는 머신의 유일한 (큰) 프로그램입니다. 따라서 다른 어떤 것도 필요하지 않기 때문에 CPU의 100 %를 사용하는 것이 허용됩니다.

그러나 그렇다고해서 게임 상태에 관계없이 항상 100 %를 사용해야한다는 의미는 아닙니다. 대부분의 게임 루프 는 프레임 속도 제한 전에 프레임 렌더링을 완료 한 경우 CPU를 전혀 사용하지 않도록 휴면 방법을 프레임 속도 구분 기호로 사용합니다.
이것은 아마도 당신의 예제에서 일어날 것입니다 : 기계가 Skyrim 또는 Doom 3을 실행하는 것보다 빠르므로 필요한 것만 사용하지만 필요한 모든 것을 사용합니다.

@KromSterm이 말했듯이 OS는 일반적으로 이미 이벤트를 폴링하므로 OS보다 루프를 더 빨리 만들 필요가 없습니다. 코어가 두 개 뿐인 경우 이벤트 감지에만 두 번째 코어의 100 %를 사용하는 것은 좋지 않습니다. 주 업데이트 루프로만 이벤트를 전송하면 실행 속도가 매우 빠르기 때문입니다. 대신 다른 스레드와 함께 기본 스레드 작업의 일부에이 코어를 사용해야합니다.


"수면 방법 사용" -이것이 프레임 속도 제한기로 알려져 있다고 생각합니까?
Gusdor

3
수면은 정확한 프레임 제한 방법이 아니며, 재생 빈도를 모니터링하기 위해 프레임을 제한하는 것이 목표라면 하드웨어 지원 vsync (또는 가능한 경우 NVIDIA의 g-sync)를 사용하는 것이 좋습니다.
Sarge Borsch

8

PC 또는 모바일 게임에서 사용 가능한 모든 CPU 시간을 사용한다는 목표에는 몇 가지 단점이 있습니다.

시스템 요구 사항 : 게임을 개발 한 PC에서 게임을 플레이 할 수있는 경우 게임을 구입 한 사람이 소유 한 약한 PC에서는 게임을 플레이하지 못할 수 있습니다. CPU 사용을 제한하면 더 많은 사람들이 이미 가지고있는 컴퓨터에서 게임을 계속 사용할 수 있습니다. 시장을 제한하고 있는지 확인하려면 Transformer Book과 같은 Atom 전원 분리형 PC에서 PC 게임과 경쟁 업체의 게임을 테스트하거나 저렴한 선불 Android 전화에서 모바일 게임을 테스트하십시오.

전력 사용 : 랩탑 컴퓨터는 4 개의 코어가 전체 주파수의 100 %로 사용될 때보 다 2 개의 코어가 절반 주파수의 60 %에서 사용될 때보 다 배터리를 더 빨리 소모합니다. 따라서 컨트롤러 폴링 스레드, AI 스레드, 물리 스레드 및 그래픽 스레드가 다시 실행될 때까지 차단되어야합니다. 전투 및 리듬과 같이 매우 까다로운 장르를 제외하고 컨트롤러를 약 60Hz보다 빠르게 폴링 할 필요가 없으므로 폴링 스레드가 60Hz 타이머에서 실행되도록 설정하십시오.

물리 변동성 : 게임 플레이에 영향을 미치는 물리가 더 강한 머신에서 더 자세 해지면 동일한 플레이어 액션이 머신마다 다른 결과를 갖습니다. 이것은 플레이어가 더 강하거나 약한 기계를 사용하여 속임수를 쓸 수 있음을 의미합니다. Id의 Quake III Arena프레임 속도가 점프 높이에 영향을 미치는 것으로 유명합니다 . 이를 피하기 위해 많은 게임에서 물리에 고정 시간 간격을 사용합니다. 그러나 파티클 효과 나 헝겊 효과 또는 물리 프레임 간의 좌표 보간과 같이 게임 플레이와 연결이 끊어진 물리에는 영향을 미치지 않으며 물리보다 높은 프레임 속도로 비디오를 렌더링합니다. 따라서 모델 뷰 컨트롤러의 변형을 사용하여 물리를 설계하십시오 필수 항목 (가속, 적중 감지 등)이 모델에 들어가고 조정 가능한 아이 캔디가 보이는 아키텍처입니다.

AI의 가변성 : AI가 강력한 기계에 대해 더 자세하면 적들은 다른 기계에서 다르게 행동합니다. 예를 들어, Go 또는 Chess 구현에서는 상대방이 약한 PC에서 약해지며, 약한 PC에서 게임을하거나 바이러스 백신 또는 비디오 트랜스 코딩 또는 운영 체제 업데이트와 같은 백그라운드 프로세스를 실행하여 부정 행위를 할 수 있습니다.


4
전력 사용시 +1 특히 모바일 및 태블릿 산업을 고려해야 할 때 이것이 매우 중요합니다.
akaltar

1
전력 사용은 데스크탑에서도 소음에 영향을 미칩니다. 최신 데스크탑은 시스템이 시원 할 때 팬 속도를 낮추고 조용하게 유지하는 것이 일반적입니다. 또한 사용자가 재생하는 동안 비디오를 낮은 우선 순위로 인코딩하여 여분의 CPU 시간이 낭비되지 않을 수 있습니다. 또는 트 위치로 스트리밍하는 플레이어의 경우 비디오 인코딩주기를 늘리는 것이 중요하며 고품질 비디오를 가능하게합니다. (비디오 인코딩은 CPU 시간, 비트 전송률 및 품질 간의 삼자 교환 방식이므로 CPU 시간이 많을수록 동일한 비트 전송률에서 더 높은 품질로 실시간 인코딩을 의미합니다.)
Peter Cordes

1
전력 사용은 기본 고려 사항이어야하며 다른 모든 고려 사항은 부차적이어야합니다 (IMHO). 100 % CPU를 사용하는 유일한 것은 (실제로 도움이된다면!) VR입니다.
크리스 데넷
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.