เป็นเรื่องปกติหรือไม่ที่เกมจะใช้ CPU 100%?


23

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

ฉันได้ตรวจสอบกับเกมอื่น ๆ เพื่อดูว่าพวกเขาทำเช่นนั้นหรือไม่ ยกตัวอย่างเช่น Skyrim และ Doom 3 นั้นใช้ได้กับซีพียูมากกว่า 60%

เป็นที่ยอมรับหรือไม่สำหรับเกมที่ใช้อินพุตแบบมัลติเธรดเพื่อใช้ CPU 100%? ถ้าไม่เช่นนั้นมีเทคนิคอะไรบ้างที่เกมดังกล่าวใช้เพื่อลดการใช้ cpu โดยเธรดอินพุต?


7
ดังนั้นสิ่งที่คุณพูดคุณโดยทั่วไปมีเธรดที่ไม่มีที่สิ้นสุดในขณะที่วนรอบที่โพลระบบปฏิบัติการสำหรับเหตุการณ์ใหม่อย่างต่อเนื่อง? while true do CheckForEvents;
Kromster พูดว่าสนับสนุน Monica

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

3
@TheLightSpark โพลไม่แม้แต่จะนอนไหม? หากคุณวนลูปและตรวจสอบอย่างต่อเนื่องโดยไม่ต้องนอนคุณอาจจะกินซีพียูมากกว่าที่จำเป็น
ลุค

3
Re @Luke: แม้แต่การนอนหลับเพียงแค่เสี้ยววินาทีระหว่างการสำรวจจะช่วยลดการใช้งาน CPU ได้อย่างมาก เมื่อก่อนฉันก็เขียน GUI สำหรับเครื่องมือบรรทัดคำสั่งที่ใช้ไฟล์อินพุตและสร้างไฟล์เอาต์พุตให้มีขนาดเท่ากัน ในการประมาณเปอร์เซ็นต์ฉันอ่านขนาดไฟล์ของไฟล์เอาต์พุตและอัพเดตแถบความคืบหน้า (โดยใช้while (true)) ใช้ 90% + ของ CPU หนึ่งตัวเพื่อทำเช่นนั้น เพิ่มการThread.Sleep(5)ใช้ CPU ลงไปต่ำกว่า 40% การไปที่ 25 มิลลิวินาทีระหว่างการสำรวจนำมาลงต่ำกว่า 10%
โคลจอห์นสัน

2
@AlecTeal ฉันคิดว่าคุณไม่ได้ใส่ใจกับสิ่งที่ฉันพูด การแสดงผลกราฟิกที่ดีกว่าไม่ใช่การใช้งานที่เหมือนกันและแน่นอนว่าการเปิดใช้งานกราฟิกที่ดีกว่าจะเพิ่มการใช้ CPU แต่ถ้าเปลี่ยนเป็น CPU ที่เร็วกว่าจะทำให้โค้ดของคุณใช้เวลามากขึ้นทำให้เกิดผลลัพธ์ที่เหมือนกันแน่นอนรหัสของคุณนั้นมีข้อบกพร่อง การวัดคุณภาพของกราฟิกที่สามารถแสดงผลได้โดยอัตโนมัติด้วย CPU เฉพาะนั้นเป็นค่าเริ่มต้นที่เหมาะสม แต่คุณควรอนุญาตให้ผู้ใช้เลือกในกรณีที่พวกเขากำลังใช้พลังงานแบตเตอรี่หรือยังต้องการ CPU สำหรับงานพื้นหลัง
kasperd

คำตอบ:


41

ใช่นี่เป็นเรื่องปกติสำหรับเกมเรียลไทม์ที่จะลองใช้ CPU 100% เพื่อดำเนินการอย่างรวดเร็วและดีที่สุดเท่าที่จะทำได้ เพื่อให้ผู้เล่นเห็นเฟรมมากต่อวินาทีหรือการจำลองทางฟิสิกส์ที่ดีหรืออย่างอื่นที่พีซีของเขาสามารถให้ได้

ในกรณีของคุณ - ไม่สิ่งนี้ดูเหมือนการออกแบบที่ไม่มีประสิทธิภาพเพื่อใช้เธรดและทำให้โพลสำหรับเหตุการณ์ในลูป ( while true do CheckForEvents;) แก้ไขให้ถูกต้องหากฉันทำผิด แต่ระบบปฏิบัติการโพลเหตุการณ์อยู่แล้ว คุณควรตรวจสอบพวกเขาจากหัวข้อหลักของคุณทุกครั้งที่เห็บ

ลูปหลักของเกมควรเร็วพอที่จะรันที่ 30+ ขีดต่อวินาทีซึ่งค่อนข้างเพียงพอสำหรับคำสั่งการโพลสำหรับหลาย ๆ เกม ผู้เล่นจะไม่เห็นความแตกต่างถ้าคำสั่งของเขาได้รับการประมวลผลเช่น 0-33 มิลลิวินาทีในภายหลัง ในทางกลับกันคุณอาจใช้ซีพียูเสริมพิเศษเพื่องานที่มีประโยชน์มากกว่าเช่น AI หรือฟิสิกส์ที่ดีขึ้นหรืออะไรก็ตาม

ป.ล. ขอให้ชี้แจงในความคิดเห็นอย่าใช้ตัวเลขข้างต้นสุ่มสี่สุ่มห้าสำหรับเกมทุกประเภท ในขณะที่เกม TBS อาจต้องการเพียง 1 ติ๊กต่อเทิร์นและเกม RTS สามารถปรับได้ด้วย 10 ติ๊กต่อเทิร์นประเภทอื่น ๆ เช่น RaceSims ต้องการมากขึ้น และแน่นอนไม่ผูกเห็บตรรกะกับเฟรมเหล่านี้เป็นสองสิ่งที่แยกจากกัน


5
ฉันต้องการโหวตคำถามนี้ แต่แล้วฉันเห็นคุณแนะนำ 30 เห็บต่อวินาที IMHO (และบรรดาผู้เล่นเกมอื่น ๆ ) คุณควรตั้งเป้าหมายไว้ที่ 60 เห็บ (และ 60 เฟรม) ต่อวินาที 60 FPS สำหรับคนจำนวนมากดูลื่นไหลตอบสนองได้ดีขึ้นและมีโอกาสน้อยกว่าที่จะให้ผู้ใช้บางคนเกิดอาการเมารถ
Nzall

4
ล่าช้า 33ms สำหรับการป้อนข้อมูลจะเห็นได้ชัดมาก ...
SynXis

1
@NateKerkhofs: ฉันมาจากพื้นหลัง RTS ที่มี 10 เห็บเป็นเรื่องปกติ มันเป็นโลกกว้างฉันจะเพิ่มรายละเอียดเกี่ยวกับเรื่องนั้น ขอบคุณสำหรับการชี้ให้เห็น
Kromster พูดว่าสนับสนุน Monica

1
@ KromStern: ฉันไม่สามารถพูดกับ Nate ได้ทั้งหมด แต่ย่อหน้าที่สามสามารถตีความได้ว่า "30hz ควรเป็นเป้าหมายของคุณ" แม้ว่ามันอาจตีความได้ว่า "30hz เป็นขั้นต่ำที่คุณสามารถทนได้" (ซึ่งอาจเป็นสิ่งที่คุณหมายถึง )
Sean Middleditch

1
การใช้ CPU 100% เป็นการฝึกฝนที่แย่มาก คุณกำลังไขผู้ใช้แล็ปท็อปสำหรับสิ่งที่ไม่ได้อยู่ในรูปแบบหรือรูปแบบใด ๆ จำเป็นต้องใช้ CPU 100% กำหนดรหัสวนรอบเกมที่เหมาะสมที่สามารถป้อนเฟรมเข้ากับจอภาพได้อย่างมีประสิทธิภาพ
Chris Dennett

9

เกมที่มีการรีเฟรชหน้าต่างที่ใช้งานอย่างต่อเนื่องส่วนใหญ่จะทำงานในโหมดเต็มหน้าจอและเป็นโปรแกรมเดียว (ใหญ่) ของเครื่องที่จัดการโดยระบบปฏิบัติการ ดังนั้นจึงเป็นที่ยอมรับกันโดยสิ้นเชิงในการใช้ CPU 100% เพราะไม่มีสิ่งอื่นใดที่ต้องการ

อย่างไรก็ตามนั่นไม่ได้หมายความว่าคุณจะต้องใช้ 100% ไม่ว่าสถานะเกมของคุณจะเป็นอย่างไร ลูปเกมส่วนใหญ่ใช้เมธอดsleepเป็นตัวคั่นเฟรมหากพวกเขาเสร็จสิ้นการเรนเดอร์เฟรมก่อนที่จะ จำกัด อัตราเฟรมเพื่อไม่ให้ CPU ใช้เพื่ออะไร
นี่อาจเป็นสิ่งที่เกิดขึ้นในตัวอย่างของคุณ: เครื่องของคุณเร็วกว่า Skyrim หรือ Doom 3 จำเป็นต้องเรียกใช้ดังนั้นพวกเขาจึงใช้เฉพาะสิ่งที่ต้องการ - แต่ทุกสิ่งที่พวกเขาต้องการ

ตามที่ @ KromSterm กล่าวว่าโดยปกติแล้วระบบปฏิบัติการจะทำการสำรวจเหตุการณ์ให้คุณแล้วดังนั้นไม่จำเป็นต้องทำการวนซ้ำเร็วกว่าระบบปฏิบัติการ หากคุณมีสองคอร์เท่านั้นการใช้ 100% ของวินาทีที่สองเท่านั้นสำหรับการตรวจจับเหตุการณ์ไม่ใช่ความคิดที่ดีเพราะถ้าคุณถ่ายโอนเหตุการณ์ไปยังลูปการอัปเดตหลักเท่านั้น คุณควรลองใช้ core นี้เป็นส่วนหนึ่งของงาน thread หลักด้วย thread อื่นแทน


"ใช้วิธีการนอนหลับ" - ฉันคิดถูกไหมว่านี่เป็นที่รู้จักในชื่อตัว จำกัด อัตราเฟรม
Gusdor

3
โหมดสลีปไม่ใช่วิธีการ จำกัด เฟรมที่แม่นยำหากเป้าหมาย จำกัด เฟรมเพื่อตรวจสอบอัตราการรีเฟรชดีกว่าคือใช้ vsync ที่สนับสนุนฮาร์ดแวร์ (หรือ g-sync ของ nvidia ถ้ามี)
Sarge Borsch

8

มีข้อบกพร่องบางประการในการใช้เวลา CPU ทั้งหมดที่มีในพีซีหรือเกมมือถือ

ความต้องการของระบบ:หากเกมสามารถเล่นได้บนพีซีที่คุณพัฒนาเกมของคุณเกมนั้นอาจไม่สามารถเล่นได้บนพีซีที่อ่อนกว่าซึ่งเป็นเจ้าของโดยผู้ที่ซื้อเกมของคุณ การ จำกัด การใช้ CPU จะทำให้เกมใช้งานได้บนเครื่องที่มีผู้คนจำนวนมากที่มีอยู่แล้ว หากคุณต้องการดูว่าคุณ จำกัด ตลาดอยู่หรือไม่ลองทดสอบเกมพีซีของคุณและคู่แข่งของคุณเกี่ยวกับอุปกรณ์ที่ถอดออกได้จาก Atom เช่น Transformer Book หรือทดสอบเกมมือถือของคุณบนโทรศัพท์ Android ที่จ่ายล่วงหน้าราคาไม่แพง

การใช้พลังงาน:คอมพิวเตอร์แล็ปท็อปจะใช้พลังงานจากแบตเตอรี่เร็วกว่าเมื่อใช้คอร์สี่แกนที่ความถี่เต็ม 100 เปอร์เซ็นต์เมื่อเทียบกับตอนที่ใช้คอร์สองแกนที่ความถี่ 60 เปอร์เซ็นต์ของความถี่ครึ่ง ดังนั้นตรวจสอบให้แน่ใจว่าเธรดตัวควบคุมของคุณ, เธรด AI, เธรดฟิสิกส์และเธรดกราฟิกถูกบล็อกจนกว่าจะถึงเวลาที่พวกเขาจะทำงานอีกครั้ง ยกเว้นในแนวกระตุกเล็กน้อยเช่นการต่อสู้และจังหวะคุณไม่จำเป็นต้องสำรวจตัวควบคุมเร็วกว่าประมาณ 60 Hz ดังนั้นให้ตั้งค่าโพลของคุณให้ทำงานบนตัวจับเวลา 60 Hz

ความแปรปรวนทางฟิสิกส์:หากฟิสิกส์ที่มีผลต่อการเล่นเกมมีรายละเอียดเพิ่มเติมเกี่ยวกับเครื่องจักรที่แข็งแกร่งกว่าการกระทำของผู้เล่นคนเดียวกันจะมีผลลัพธ์ที่แตกต่างกันในเครื่องที่แตกต่างกัน ซึ่งหมายความว่าผู้เล่นอาจสามารถโกงได้โดยใช้เครื่องที่แข็งแกร่งกว่าหรืออ่อนแอกว่า Id ของQuake III Arenaเป็นที่รู้จักสำหรับการมีอัตราเฟรมที่ส่งผลกระทบต่อการกระโดดสูง เพื่อหลีกเลี่ยงปัญหานี้เกมจำนวนมากใช้ขั้นตอนเวลาที่แน่นอนสำหรับฟิสิกส์ แต่สิ่งนี้จะไม่ส่งผลกระทบต่อฟิสิกส์ที่ถูกตัดการเชื่อมต่อจากการเล่นเกมเช่นเอฟเฟกต์ของอนุภาคหรือเอฟเฟกต์ผ้าหรือการแก้ไขพิกัดระหว่างเฟรมฟิสิกส์เพื่อแสดงวิดีโอที่อัตราเฟรมที่สูงกว่าฟิสิกส์ ดังนั้นออกแบบฟิสิกส์ของคุณโดยใช้model-view-controller สถาปัตยกรรมที่สิ่งสำคัญ (การเร่งความเร็วการตรวจจับการโจมตีและสิ่งที่คล้ายกัน) มีให้ในโมเดลและอาหารตาแบบปรับได้จะไปในมุมมอง

ความแปรปรวน AI:ถ้า AI มีรายละเอียดเพิ่มเติมเกี่ยวกับเครื่องจักรที่แข็งแกร่งกว่าศัตรูจะทำงานต่างกันในเครื่องที่แตกต่าง ตัวอย่างเช่นในการใช้งาน Go หรือหมากรุกฝ่ายตรงข้ามจะอ่อนแอลงบนพีซีที่อ่อนแอกว่าและผู้เล่นสามารถโกงโดยการเล่นเกมบนพีซีที่อ่อนแอกว่าหรือโดยใช้กระบวนการพื้นหลังเช่นแอนตี้ไวรัสหรือการแปลงรหัสวิดีโอหรือการอัปเดตระบบปฏิบัติการ


4
+1 สำหรับการใช้พลังงาน โดยเฉพาะอย่างยิ่งคุณควรพิจารณาอุตสาหกรรมมือถือและแท็บเล็ตซึ่งเป็นสิ่งสำคัญอย่างยิ่ง
akaltar

1
การใช้พลังงานมีผลต่อเสียงรบกวนเช่นกันแม้กระทั่งบนเดสก์ท็อป เป็นเรื่องปกติที่เดสก์ท็อปสมัยใหม่จะทำให้แฟน ๆ เงียบและเงียบเมื่อระบบเย็น นอกจากนี้ผู้ใช้อาจกำลังเข้ารหัสวิดีโอ (ที่มีลำดับความสำคัญต่ำ) ในขณะที่เล่นดังนั้นเวลา CPU ใด ๆ ที่เหลืออยู่ก็จะไม่สูญเปล่า หรือสำหรับผู้เล่นที่สตรีมไปยัง Twitch การออกรอบเพิ่มเติมสำหรับการเข้ารหัสวิดีโอเป็นเรื่องใหญ่และทำให้วิดีโอมีคุณภาพสูงขึ้น (การเข้ารหัสวิดีโอเป็นการแลกเปลี่ยนสามทางระหว่างเวลา CPU บิตเรตและคุณภาพดังนั้นเวลา CPU มากขึ้นหมายถึงการเข้ารหัสตามเวลาจริงที่คุณภาพสูงกว่าที่บิตเรตเดียวกัน)
Peter Cordes

1
การใช้พลังงานควรเป็นข้อพิจารณาเบื้องต้นข้อควรพิจารณาอื่น ๆ ทั้งหมดรอง IMHO สิ่งเดียวที่ฉันจะใช้ CPU 100% สำหรับ (ถ้าช่วยได้จริงๆ!) คือสิ่งที่ VR
Chris Dennett
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.