Có phải bình thường cho một trò chơi sử dụng CPU 100%?


23

Tôi vừa thực hiện xử lý đầu vào đa luồng trong công cụ trò chơi của mình, trong đó mã thăm dò hệ điều hành để thu thập dữ liệu đầu vào từ đó và dấu thời gian chúng nằm trong một luồng riêng biệt và mỗi khung trong luồng chính tôi chỉ ăn hết đầu vào được thu thập đến một thời gian trò chơi hợp lý. Tất cả đều hoạt động, nhưng thiết lập này đang sử dụng 100% CPU của tôi. Tôi có hai lõi, và nó sẽ tăng tới 100% khi chạy trò chơi của tôi.

Tôi đã kiểm tra với các trò chơi khác để xem nếu họ cũng làm điều đó. Ví dụ, Skyrim và Doom 3 dường như vẫn ổn với chỉ hơn 60% CPU.

Có thể chấp nhận một trò chơi sử dụng đầu vào đa luồng để sử dụng 100% CPU không? Nếu không, một số thủ thuật mà các trò chơi như vậy sử dụng để giảm mức sử dụng cpu của luồng đầu vào là gì?


7
Vì vậy, những gì bạn nói, về cơ bản bạn có một chuỗi với một vòng lặp vô tận liên tục thăm dò hệ điều hành cho các sự kiện mới? while true do CheckForEvents;
Kromster nói hỗ trợ Monica

5
Nếu một ứng dụng sử dụng 100% thời gian CPU bất kể mức độ sử dụng và tốc độ CPU, thì nó có thể được coi là một lỗi chính xác. Bạn không nên sử dụng nhiều thời gian CPU hơn mức cần thiết để hiển thị khung hình trên mỗi chu kỳ làm mới màn hình.
kasperd

3
@TheLightSpark Chủ đề bỏ phiếu thậm chí không ngủ? Nếu bạn liên tục lặp đi lặp lại và kiểm tra mà không ngủ, có lẽ bạn sẽ ăn nhiều thời gian CPU hơn mức cần thiết.
Lu-ca

3
Re @Luke: Ngay cả việc ngủ chỉ một phần nghìn giây giữa các cuộc thăm dò sẽ làm giảm đáng kể việc sử dụng CPU. Một thời gian trước, tôi đã viết một GUI cho một công cụ dòng lệnh lấy một tệp đầu vào và tạo một tệp đầu ra có cùng kích thước. Để ước tính tỷ lệ phần trăm, tôi đọc kích thước tệp của tệp đầu ra và cập nhật thanh tiến trình (sử dụng while (true)). Đã sử dụng 90% + của một CPU để làm như vậy. Thêm một Thread.Sleep(5)vào nó mang lại mức sử dụng CPU xuống dưới 40%. Đi đến 25 mili giây giữa các cuộc thăm dò đã đưa nó xuống dưới 10%.
Cole Johnson

2
@AlecTeal Tôi nghĩ bạn đã không chú ý đầy đủ đến những gì tôi nói. Kết xuất đồ họa tốt hơn không phải là cách sử dụng tương tự, và tất nhiên cho phép đồ họa tốt hơn sẽ tăng mức tiêu thụ CPU. Nhưng nếu việc chuyển sang CPU nhanh hơn sẽ khiến mã của bạn chỉ mất nhiều chu kỳ hơn tạo ra kết quả chính xác, mã của bạn bị thiếu sót. Tự động đo chất lượng đồ họa có thể được hiển thị với một CPU cụ thể là một mặc định hợp lý. Nhưng bạn nên cho phép người dùng lựa chọn trong trường hợp họ đang chạy bằng pin hoặc cũng cần CPU cho các công việc nền.
kasperd

Câu trả lời:


41

Vâng, điều này là bình thường đối với một trò chơi thời gian thực để cố gắng sử dụng CPU 100% để hoạt động nhanh và tốt nhất có thể. Vì vậy, người chơi sẽ nhìn thấy nhiều khung hình mỗi giây hoặc mô phỏng vật lý tốt hoặc bất cứ thứ gì khác mà PC của anh ta có thể cung cấp.

Trong trường hợp của bạn - Không, điều này trông giống như một thiết kế không hiệu quả, để lấy một chuỗi và làm cho nó thăm dò các sự kiện trong một vòng lặp ( while true do CheckForEvents;). Sửa lỗi cho tôi nếu tôi sai, nhưng HĐH đã thăm dò các sự kiện. Bạn chỉ nên kiểm tra chúng từ chủ đề chính của bạn mỗi lần đánh dấu.

Vòng lặp trò chơi chính phải đủ nhanh để chạy ở tốc độ 30+ tick mỗi giây, khá đủ cho các lệnh bỏ phiếu cho nhiều trò chơi. Người chơi sẽ không thấy sự khác biệt nếu các lệnh của anh ta được xử lý, ví dụ 0-33ms sau đó. Mặt khác, bạn có thể đã sử dụng lõi CPU bổ sung đó cho các nhiệm vụ có lợi hơn, như AI tốt hơn hoặc vật lý hoặc bất cứ điều gì.

PS Như được yêu cầu làm rõ trong các bình luận, đừng lấy con số trên một cách mù quáng cho tất cả các loại trò chơi. Trong khi trò chơi TBS có thể chỉ cần 1 tick mỗi lượt và trò chơi RTS có thể ổn với 10 tick một lượt, các thể loại khác, như RaceSims cần nhiều hơn nữa. Và tất nhiên không gắn các dấu logic với tốc độ khung hình, đây là hai điều riêng biệt.


5
Tôi sẽ đưa ra câu hỏi này, nhưng sau đó tôi thấy bạn đề nghị 30 tick mỗi giây. IMHO (và của nhiều game thủ khác), bạn nên nhắm tới 60 tick (và do đó là 60 khung hình) mỗi giây. 60 FPS đối với nhiều người có vẻ trôi chảy hơn, chơi nhạy hơn và ít có khả năng đưa ra một tập hợp con nhất định của người dùng bị say tàu xe.
Nzall

4
Độ trễ 33ms cho đầu vào là rất đáng chú ý ...
Synxis

1
@NateKerkhofs: Tôi đến từ nền RTS, nơi thường có 10 tích tắc. Đó là một thế giới rộng lớn, tôi sẽ thêm chi tiết về điều đó. Cảm ơn đã chỉ ra.
Kromster nói hỗ trợ Monica

1
@KromStern: Tôi không thể nói hoàn toàn cho Nate, nhưng đoạn thứ ba có thể được hiểu là "30hz nên là mục tiêu của bạn" mặc dù nó cũng có thể được hiểu là "30hz là mức tối thiểu bạn có thể chịu đựng" (đó có thể là ý bạn ).
Sean Middleditch

1
Sử dụng CPU 100% là một thực tế khủng khiếp. Bạn đang lừa đảo người dùng máy tính xách tay cho những thứ không theo bất kỳ cách nào, hình dạng hoặc hình thức cần sử dụng CPU 100%. Mã một vòng lặp trò chơi thích hợp có thể cung cấp khung cho màn hình một cách hiệu quả.
Chris Dennett

9

Một trò chơi với tính năng làm mới cửa sổ hoạt động liên tục sẽ chủ yếu được chạy ở chế độ toàn màn hình và là chương trình (lớn) duy nhất của máy do HĐH quản lý. Vì vậy, việc sử dụng 100% CPU là hoàn toàn chấp nhận được, bởi vì không có gì khác cần đến nó.

Tuy nhiên , điều đó không có nghĩa là tất nhiên bạn phải luôn sử dụng 100% cho dù trạng thái trò chơi của bạn là gì. Hầu hết các vòng lặp trò chơi sử dụng một phương thức ngủ như một dấu phân cách khung hình nếu chúng kết thúc để hiển thị một khung trước giới hạn tốc độ khung hình, để không làm cho CPU không được sử dụng.
Đây có lẽ là điều xảy ra trong các ví dụ của bạn: máy của bạn nhanh hơn Skyrim hoặc Doom 3 cần chạy, vì vậy họ chỉ sử dụng những gì họ cần - nhưng tất cả những gì họ cần.

Như @KromSterm đã nói, HĐH thường đã thăm dò các sự kiện cho bạn, do đó không cần phải thực hiện một vòng lặp nhanh hơn so với HĐH. Nếu bạn chỉ có hai lõi, chỉ sử dụng 100% lõi thứ hai để phát hiện sự kiện không phải là ý hay, vì nếu bạn chỉ chuyển các sự kiện sang vòng cập nhật chính thì sẽ rất nhanh để thực thi. Bạn nên cố gắng sử dụng lõi này cho một phần của công việc luồng chính với một luồng khác thay thế.


"Sử dụng phương pháp ngủ" - tôi có đúng không khi nghĩ rằng điều này được gọi là giới hạn tốc độ khung hình?
Gusdor

3
Ngủ không phải là phương pháp giới hạn khung chính xác, nếu mục tiêu là giới hạn khung để theo dõi tốc độ làm mới, thì tốt hơn là sử dụng vsync được hỗ trợ bằng phần cứng (hoặc đồng bộ hóa của nvidia, nếu có)
SUND Borsch

8

Có một vài hạn chế của việc nhắm đến việc sử dụng tất cả thời gian CPU có sẵn trong PC hoặc trò chơi di động.

Yêu cầu hệ thống: Nếu trò chơi có thể chơi được trên PC nơi bạn phát triển trò chơi của mình, thì có thể không chơi được trên PC yếu hơn thuộc sở hữu của người đã mua trò chơi của bạn. Hạn chế sử dụng CPU sẽ giúp trò chơi có thể sử dụng được trên các máy mà nhiều người có khả năng đã có. Nếu bạn thực sự muốn xem liệu bạn có giới hạn thị trường của mình hay không, hãy kiểm tra các trò chơi trên PC và các đối thủ của bạn trên một thiết bị có thể tháo rời chạy bằng năng lượng nguyên tử như Transformer Book hoặc thử nghiệm các trò chơi di động của bạn trên điện thoại Android trả trước rẻ tiền.

Sử dụng năng lượng: Một máy tính xách tay làm cạn kiệt pin nhanh hơn khi bốn lõi được sử dụng ở mức 100 phần trăm tần số đầy đủ so với khi, giả sử, hai lõi được sử dụng ở mức 60 phần trăm của một nửa tần số. Vì vậy, hãy đảm bảo luồng thăm dò bộ điều khiển, luồng AI, luồng vật lý và luồng đồ họa của bạn bị chặn cho đến khi chúng chạy lại. Ngoại trừ một vài thể loại rất khó hiểu, chẳng hạn như chiến đấu và nhịp điệu, bạn sẽ không cần phải thăm dò bộ điều khiển nhanh hơn khoảng 60 Hz, vì vậy hãy đặt chủ đề bỏ phiếu của bạn để chạy trên bộ đếm thời gian 60 Hz.

Biến thiên vật lý: Nếu vật lý ảnh hưởng đến trò chơi chi tiết hơn trên các máy mạnh hơn, cùng một hành động của người chơi sẽ có kết quả khác nhau trên các máy khác nhau. Điều này có nghĩa là người chơi có thể gian lận bằng cách sử dụng máy mạnh hơn hoặc yếu hơn. Đấu trường Quake III của Id nổi tiếng là có tốc độ khung hình ảnh hưởng đến chiều cao nhảy . Để tránh điều này, rất nhiều trò chơi sử dụng một bước thời gian cố định cho vật lý. Nhưng điều này không ảnh hưởng đến vật lý bị ngắt kết nối với trò chơi, chẳng hạn như hiệu ứng hạt hoặc hiệu ứng vải hoặc nội suy tọa độ giữa các khung vật lý để hiển thị video ở tốc độ khung hình cao hơn vật lý. Vì vậy, thiết kế vật lý của bạn bằng cách sử dụng một số biến thể của trình điều khiển mô hình-khung nhìn kiến trúc, nơi những thứ thiết yếu (tăng tốc, phát hiện nhấn và tương tự) đi vào mô hình và kẹo mắt có thể điều chỉnh đi trong tầm nhìn.

Biến thiên AI: Nếu AI chi tiết hơn trên các máy mạnh hơn, kẻ thù sẽ hành xử khác nhau trên các máy khác nhau. Ví dụ: khi triển khai Go hoặc Chess, đối thủ sẽ yếu hơn trên PC yếu hơn và người chơi có thể gian lận bằng cách chơi trò chơi trên PC yếu hơn hoặc bằng cách chạy các quy trình nền như chống vi-rút hoặc chuyển mã video hoặc cập nhật hệ điều hành.


4
+1 cho việc sử dụng năng lượng. Đặc biệt là bạn nên xem xét ngành công nghiệp điện thoại di động và máy tính bảng, nơi điều này là vô cùng quan trọng.
akaltar

1
Việc sử dụng năng lượng cũng ảnh hưởng đến tiếng ồn, ngay cả trên máy tính để bàn. Nó là phổ biến cho máy tính để bàn hiện đại để giữ cho quạt của họ chậm và yên tĩnh khi hệ thống mát mẻ. Ngoài ra, có thể người dùng đang mã hóa video (ở mức ưu tiên thấp) trong khi phát, do đó, mọi thời gian CPU dự phòng sẽ không bị lãng phí. Hoặc đối với người chơi phát trực tuyến đến co giật, việc để lại nhiều chu kỳ hơn cho mã hóa video là một vấn đề lớn và cho phép video chất lượng cao hơn. (mã hóa video là sự đánh đổi ba chiều giữa thời gian CPU, tốc độ bit và chất lượng, vì vậy thời gian CPU nhiều hơn có nghĩa là mã hóa thời gian thực với chất lượng cao hơn ở cùng tốc độ bit.)
Peter Cordes

1
Sử dụng năng lượng nên được xem xét chính, tất cả các cân nhắc khác, IMHO. Điều duy nhất tôi sẽ sử dụng 100% CPU cho (nếu nó thực sự có ích!) Là công cụ VR.
Chris Dennett
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.