มีบางสิ่งที่ควรพิจารณาเพื่อตรวจสอบว่ามีการใช้และกำหนดเวลาเธรดของกระบวนการเกมอย่างเหมาะสมเพื่อให้ได้ประสิทธิภาพที่ดีที่สุดหรือไม่
- การเว้นระยะเฟรม
- การทำงานแบบหลายเธรดและการทำงานแบบขนานของเธรด
- ความสัมพันธ์ของแกน 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 ด้วยตนเอง