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