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

แอฟฟินิตี้ของแกน CPU
ปัจจัยหนึ่งที่ส่งผลต่อประสิทธิภาพของเวิร์กโหลด CPU อย่างมากคือวิธีจัดกำหนดการในคอร์ ซึ่งอาจแบ่งออกเป็น 2 องค์ประกอบ ได้แก่
- ไม่ว่าเธรดเกมจะทำงานบนคอร์ที่เหมาะสมที่สุดสำหรับภาระงานหรือไม่
- เธรดเกมสลับไปมาระหว่างคอร์บ่อยหรือไม่
อุปกรณ์รุ่นใหม่มักใช้สถาปัตยกรรมที่เรียกว่าการประมวลผลแบบไม่เหมือนกัน ซึ่งแกนประมวลผลจะมีประสิทธิภาพในระดับที่แตกต่างกัน ดังนี้
- แกนประมวลผล 1 หรือ 2 แกนจะให้ประสิทธิภาพสูงสุด แต่ใช้พลังงานมากกว่า บางครั้งก็เรียกว่าคอร์ "ใหญ่"
- ส่วนคอร์อื่นๆ จะมีประสิทธิภาพสูงสุดต่ำกว่า แต่ประหยัดพลังงานมากกว่า บางครั้งก็เรียกว่าคอร์ "เล็ก"
- ไม่บังคับ: คอร์อย่างน้อย 1 คอร์จะช่วยให้ประสิทธิภาพและพลังงานสมดุลกัน บางครั้งเรียกว่าคอร์ "กลาง"
คุณอาจตรวจสอบลักษณะการทำงานของเธรด CPU ในส่วนการใช้งาน CPU ได้โดยการเปิดใช้ CPU ในการกำหนดค่าโปรไฟล์เมื่อทำการติดตาม การซูมเข้าส่วนหนึ่งของ การติดตามที่ใช้เวลาน้อยกว่า 200 มิลลิวินาที จะช่วยให้คุณดูแต่ละกระบวนการที่ทำงานในคอร์ CPU ของอุปกรณ์ได้ โดยปกติแล้ว คอร์ขนาดเล็กจะสอดคล้องกับดัชนีขนาดเล็ก (เช่น CPU '0'-'3') ในขณะที่คอร์ขนาดใหญ่จะสอดคล้องกับดัชนีที่สูงกว่า (เช่น CPU '6'-'7') และหากมีคอร์ขนาดกลาง คอร์ดังกล่าวจะใช้ดัชนีระหว่างนั้น (เช่น CPU '5'-'6') ซึ่งเป็นไปตามธรรมเนียมทั่วไป แต่ก็ไม่มีการรับประกันในเรื่องนี้
หากพบว่ามีการกำหนดเวลาให้บางเธรดทำงานใน CPU ที่ไม่ตรงกับความต้องการด้านประสิทธิภาพหรือพลังงาน ให้พิจารณาตั้งค่าแอฟฟินิตีของ CPU สำหรับเธรดเหล่านั้นด้วยตนเอง

นอกจากนี้ คุณยังสังเกตได้ว่าเธรดสลับไปมาระหว่างคอร์หรือไม่ การสลับหลักดังกล่าวทำให้เกิดค่าใช้จ่ายบางอย่างจากการสลับบริบทและการสูญเสียสถานะด้วยแคช/รีจิสเตอร์ของแกน

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