วิเคราะห์การกำหนดเวลาเธรด

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

  • การเว้นระยะเฟรม
  • การทำงานแบบหลายเธรดและการทำงานแบบขนานของเธรด
  • ความสัมพันธ์ของแกน CPU

Multithreading

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

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

เกมที่มีเทรดหลักและเทรดการแสดงผลที่ทำงานแบบขนานกันได้ดี รวมถึงเทรดผู้ปฏิบัติงานและเทรดเสียง
รูปที่ 1 เกมที่มีเทรดหลักและเทรดการแสดงผลที่ทำงานแบบขนานกัน รวมถึงเทรดผู้ปฏิบัติงานและเทรดเสียง

ความสัมพันธ์ของแกน CPU

ปัจจัยหนึ่งที่ส่งผลต่อประสิทธิภาพของเวิร์กโหลด CPU อย่างมากคือวิธีที่กำหนดเวลาในคอร์ ซึ่งอาจแบ่งออกเป็น 2 องค์ประกอบ ได้แก่

  • ไม่ว่าเธรดเกมจะทำงานบนคอร์ที่เหมาะสมที่สุดสำหรับภาระงานหรือไม่
  • เธรดเกมสลับไปมาระหว่างคอร์บ่อยเพียงใด

อุปกรณ์สมัยใหม่มักใช้สถาปัตยกรรมที่เรียกว่าการประมวลผลแบบไม่เหมือนกัน ซึ่งแกนประมวลผลมีประสิทธิภาพในระดับต่างๆ ดังนี้

  • โดยมีคอร์ 1 หรือ 2 คอร์ที่ให้ประสิทธิภาพสูงสุด แต่ใช้พลังงานมากกว่า บางครั้งก็เรียกว่าคอร์ "ใหญ่"
  • ส่วนคอร์อื่นๆ จะมีประสิทธิภาพสูงสุดต่ำกว่า แต่ประหยัดพลังงานมากกว่า บางครั้งก็เรียกว่าคอร์ "เล็ก"
  • ไม่บังคับ: คอร์อย่างน้อย 1 คอร์จะช่วยให้ประสิทธิภาพและพลังงานสมดุลกัน บางครั้งเรียกว่าคอร์ "กลาง"

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

หากพบว่ามีการกำหนดเวลาให้บางเธรดทำงานใน CPU ที่ไม่ตอบสนองความต้องการด้านประสิทธิภาพหรือพลังงาน ให้พิจารณาตั้งค่าแอฟฟินิตีของ CPU สำหรับเธรดเหล่านั้นด้วยตนเอง

เกมที่มีเทรดหลักและเทรดการแสดงผลซึ่งทำงานบนคอร์ขนาดใหญ่เป็นหลัก (CPU 6-7) แสดงเป็นสีฟ้าอ่อน
รูปที่ 2 เกมที่มีเทรดหลักและเทรดการแสดงผลทำงานบนคอร์ขนาดใหญ่เป็นหลัก (CPU 6-7) ซึ่งแสดงเป็นสีฟ้าอ่อน

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

เกมที่มีเธรดหลัก (เธรด-7) และเธรดการแสดงผล (เธรด-8) ที่สลับไปมาระหว่างคอร์ต่างๆ ซึ่งแสดงเป็นสีม่วง
รูปที่ 3 เกมที่มีเธรดหลัก (เธรด 7) และเธรดการแสดงผล (เธรด 8) ที่สลับไปมาระหว่างคอร์ ซึ่งแสดงเป็นสีม่วง

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

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

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

  • การบังคับให้แอปทำงานในคอร์ขนาดใหญ่โดยไม่จำเป็นอาจทำให้แบตเตอรี่หมดเร็วขึ้นและเกิดความร้อนมากขึ้น

ด้วยเหตุนี้ โดยทั่วไปจึงควรหลีกเลี่ยงการตั้งค่าความสัมพันธ์ของ CPU ด้วยตนเอง