สองเธรด หนึ่งคอร์: หลักการทำงานของ Simultaneous Multithreading
พื้นหลังและแรงจูงใจ
- เหตุผลของการนำ SMT มาใช้: ถูกนำมาใช้เพื่อเพิ่มการใช้ทรัพยากรของโปรเซสเซอร์ให้คุ้มค่ามากขึ้น ภายในโปรเซสเซอร์มีรีจิสเตอร์หลายร้อยตัว รวมถึงหน่วย load/store และหน่วยคำนวณหลายชุด เพื่อใช้ทรัพยากรเหล่านี้ให้มีประสิทธิภาพยิ่งขึ้น จึงมีการใช้เทคนิคการประมวลผลแบบขนานระดับคำสั่ง (ILP)
- Instruction pipelining: แบ่งการรันคำสั่งออกเป็นหลายขั้นตอน และในแต่ละ cycle จะสามารถนำคำสั่งใหม่เข้ามาประมวลผลเพิ่มได้ ยิ่ง pipeline ลึกมาก ก็ยิ่งประมวลผลคำสั่งแบบขนานได้มากขึ้น
- สถาปัตยกรรม superscalar: สามารถออกคำสั่งได้หลายคำสั่งในแต่ละ cycle ตัวอย่างเช่น โปรเซสเซอร์ Intel Core i7 รุ่นใหม่สามารถออกคำสั่งได้ 4 คำสั่งต่อ cycle
- การสูญเปล่าแนวนอนและแนวตั้ง: เป็นการสูญเสียทรัพยากรที่เกิดขึ้นเมื่อไม่สามารถหาคำสั่งอิสระได้เพียงพอ การสูญเปล่าแนวนอนเกิดขึ้นเมื่อโปรเซสเซอร์หาคำสั่งอิสระได้ไม่พอ ส่วนการสูญเปล่าแนวตั้งเกิดขึ้นเมื่อคำสั่งทั้งหมดขึ้นต่อคำสั่งที่กำลังรันอยู่ในขณะนั้น
การทำ SMT ในโปรเซสเซอร์ Intel
- การทำซ้ำ architectural state: เพื่อให้รันสองเธรดพร้อมกันได้ โปรเซสเซอร์จะทำซ้ำ architectural state ของตน ส่งผลให้โปรเซสเซอร์จริงหนึ่งตัวมองเห็นเป็น logical processor สองตัวในระบบปฏิบัติการ
- การแชร์และการทำซ้ำทรัพยากร: ทรัพยากรบางอย่างถูกทำซ้ำ ขณะที่บางอย่างถูกแชร์ การตัดสินใจว่าจะทำซ้ำหรือไม่ขึ้นอยู่กับหลายปัจจัย เช่น การใช้พลังงานและพื้นที่จริงบนชิป
ไมโครสถาปัตยกรรมของโปรเซสเซอร์
- Frontend, backend และ retirement unit: ไมโครสถาปัตยกรรมของโปรเซสเซอร์แบ่งออกเป็นสามส่วน โดย frontend ทำหน้าที่ดึงและถอดรหัสคำสั่ง backend จัดสรรทรัพยากรสำหรับการประมวลผลและรันคำสั่ง ส่วน retirement unit จะ commit ผลลัพธ์ของคำสั่งที่รันแล้วเข้าสู่ architectural state
รายละเอียดของการทำ SMT
- Frontend: ประกอบด้วยองค์ประกอบหลายส่วน เช่น instruction pointer, trace cache, ITLB cache และ uop queue โดยแต่ละองค์ประกอบจะถูกทำซ้ำหรือแชร์เพื่อรองรับ logical processor สองตัว
- Backend: ประกอบด้วย resource allocator, register renaming, instruction ready queue และ instruction scheduler โดย resource allocator จะสลับไปมาระหว่าง logical processor ในแต่ละ cycle
- Retirement unit: ติดตามคำสั่งเมื่อพร้อมจะ commit เข้าสู่ architectural state และทำการ commit ตามลำดับที่ถูกต้อง
ระบบย่อยหน่วยความจำ
- TLB: แคชขนาดเล็กที่ใช้แปลง virtual address เป็น physical address โดยมีการแชร์แบบไดนามิกระหว่าง logical processor ทั้งสอง
- L1, L2, L3 cache: แต่ละ CPU core มี L1 cache ของตัวเอง ส่วน L2 cache อาจแตกต่างกันไปตามไมโครสถาปัตยกรรม และ L3 cache จะถูกแชร์ระหว่างหลายคอร์
ผลกระทบของ SMT ต่อประสิทธิภาพ
- การรันเธรดเดียว: เมื่อรันเธรดเดียวบนคอร์ที่เปิด SMT ประสิทธิภาพอาจลดลงได้เนื่องจากมีการแชร์ทรัพยากร
- การรันสองเธรด: ประสิทธิภาพอาจเปลี่ยนแปลงไปตามรูปแบบการเข้าถึงแคช เธรดที่ทำงานสอดประสานกันอาจช่วยเพิ่มประสิทธิภาพได้ แต่เธรดที่แย่งทรัพยากรกันอาจทำให้ประสิทธิภาพลดลง
- ช่องโหว่ด้านความปลอดภัย: ในช่วงไม่กี่ปีที่ผ่านมา มีการค้นพบปัญหาด้านความปลอดภัยที่เกี่ยวข้องกับ SMT เนื่องจากการแชร์ทรัพยากรและการทำ speculative execution อาจทำให้ข้อมูลสำคัญรั่วไหลได้
บทสรุป
- การตัดสินใจว่าจะใช้ SMT หรือไม่: SMT ถูกออกแบบมาเพื่อเพิ่มการใช้ทรัพยากรของ CPU และเพิ่ม throughput ของคำสั่ง แต่ก็มี trade-off ทั้งด้านประสิทธิภาพและความปลอดภัย จึงควรตัดสินใจว่าจะใช้ SMT หรือไม่ตามลักษณะของ workload
สรุปโดย GN⁺
- ทำความเข้าใจ SMT: SMT ถูกออกแบบมาเพื่อเพิ่มการใช้ทรัพยากรของ CPU และเพิ่ม throughput ของคำสั่ง
- ประสิทธิภาพและความปลอดภัย: SMT อาจช่วยเพิ่มประสิทธิภาพได้ แต่ก็อาจก่อให้เกิดปัญหาประสิทธิภาพลดลงและปัญหาด้านความปลอดภัยจากการแย่งทรัพยากรและช่องโหว่
- การตัดสินใจใช้งาน: ควรพิจารณาอย่างรอบคอบว่าจะใช้ SMT หรือไม่ตาม workload หากต้องการประสิทธิภาพสูงมาก การปิด SMT อาจเป็นทางเลือกที่ดีกว่า
- โครงการที่เกี่ยวข้อง: โครงการวิเคราะห์การทำ SMT ของ AMD และโครงการวิเคราะห์ประสิทธิภาพ SMT บนโปรเซสเซอร์ ARM ก็เป็นสิ่งที่ควรดูเพิ่มเติม
ยังไม่มีความคิดเห็น