นักวิจัย CPU อิสระ Agner Fog ได้ทำการทดสอบประสิทธิภาพสถาปัตยกรรม Zen 5 ของ AMD อย่างครอบคลุม เผยให้เห็นการปรับปรุงที่สำคัญซึ่งแก้ไขปัญหาคอขวดที่มีมายาวนานในการออกแบบโปรเซสเซอร์ ผลการทดสอบเน้นย้ำถึงการเปลี่ยนแปลงทางสถาปัตยกรรมที่สำคัญซึ่งอาจเปลี่ยนแปลงวิธีการที่นักพัฒนาจะเข้าถึงแอปพลิเคชันที่ใช้ CPU อย่างเข้มข้น
การทำลายคอขวดการดึงข้อมูล 16 ไบต์
การปรับปรุงที่สำคัญที่สุดใน Zen 5 คือการเพิ่มอัตราการดึงคำสั่งเป็นสองเท่าจาก 16 เป็น 32 ไบต์ต่อรอบนาฬิกา สิ่งนี้แก้ไขข้อจำกัดที่ร้ายแรงในโปรเซสเซอร์ Intel และ AMD มาหลายรุ่น เนื่องจากคำสั่งแต่ละคำสั่งสามารถมีขนาดตั้งแต่ 1 ถึง 15 ไบต์ โดยคำสั่ง AVX512 ที่ซับซ้อนมีขนาด 6 ถึง 11 ไบต์ ข้อจำกัด 16 ไบต์เดิมสร้างความไม่สอดคล้องระหว่างสิ่งที่โปรเซสเซอร์สามารถดึงมาได้และสิ่งที่สามารถประมวลผลได้
คอขวดนี้เป็นปัญหาเป็นพิเศษเพราะโปรเซสเซอร์ AMD และ Intel รุ่นก่อนหน้าสามารถจัดการคำสั่งได้สี่คำสั่งหรือมากกว่าต่อรอบนาฬิกา แต่เฉพาะเมื่อโค้ดพอดีกับ micro-op cache เท่านั้น ความสามารถในการดึงข้อมูลที่ขยายออกไปทำให้ Zen 5 สามารถใช้ทรัพยากรการประมวลผลได้ดีขึ้นในรูปแบบโค้ดที่หลากหลายมากขึ้น
Micro-op cache: แคชพิเศษที่เก็บคำสั่งที่ถูกถอดรหัสแล้ว ทำให้สามารถประมวลผลลูปโค้ดที่ใช้บ่อยได้เร็วขึ้น
ข้อมูลจำเพาะหลักของ Zen 5:
- อัตราการดึงคำสั่ง: 32 ไบต์ต่อรอบนาฬิกา (เพิ่มขึ้นเป็นสองเท่าจาก 16 ไบต์)
- การประมวลผลสูงสุด: 6 คำสั่งต่อรอบนาฬิกา (สูงสุดถึง 8 คำสั่งในกรณีพิเศษ)
- Integer ALUs: 6 หน่วย
- หน่วยสร้างที่อยู่: 4 หน่วย
- หน่วย Branch: 3 หน่วย
- Vector ALUs: 4 หน่วย (รองรับ 512-bit เต็มรูปแบบ)
- หน่วยอ่าน/เขียน Vector: 2 หน่วย
- การดำเนินการหน่วยความจำ: อ่าน 4 ครั้งต่อรอบ หรือ อ่าน 2 ครั้ง + เขียน 2 ครั้งต่อรอบ
- การดำเนินการหน่วยความจำ Vector: อ่านหรือเขียน 2 ครั้งต่อรอบ (การเขียน 512-bit จะแบ่งเป็นสองการดำเนินการ 256-bit)
ความสามารถในการประมวลผลที่เพิ่มขึ้น
Zen 5 ตอนนี้สามารถประมวลผลคำสั่งได้สูงสุดหกคำสั่งต่อรอบนาฬิกา โดยในกรณีหายากสามารถถึงแปดคำสั่ง การเพิ่มปริมาณงานนี้ได้รับการสนับสนุนจากการขยายหน่วยประมวลผลอย่างมาก: integer ALU หกหน่วย หน่วยสร้างที่อยู่สี่หน่วย หน่วยแบรนช์สามหน่วย vector ALU สี่หน่วย และหน่วยอ่าน/เขียน vector สองหน่วย ความอุดมสมบูรณ์ของหน่วยประมวลผลหมายความว่าโปรเซสเซอร์จะไม่ค่อยต้องรอทรัพยากรที่ว่าง
อย่างไรก็ตาม การสนทนาในชุมชนชี้ให้เห็นความแปลกประหลาดในการออกแบบที่น่าสนใจ แม้ว่าหน่วย vector ทั้งหมดจะรองรับการดำเนินการ 512 บิตเต็มรูปแบบ แต่การเขียนหน่วยความจำถูกจำกัดที่การดำเนินการ 256 บิต ทำให้การเขียน 512 บิตต้องแบ่งเป็นสองการดำเนินการ นักพัฒนาบางคนตั้งคำถามว่าข้อจำกัดนี้จะส่งผลกระทบต่อปริมาณงานที่ใช้หน่วยความจำเข้มข้นหรือไม่ แม้ว่าคนอื่นจะสังเกตว่าการดำเนินการทั่วไปเกี่ยวข้องกับการอ่านมากกว่าการเขียน ทำให้ปัญหานี้น้อยลงในทางปฏิบัติ
ประสิทธิภาพ Branch ที่ดีขึ้นและการดำเนินการ Vector
การทำนาย branch ซึ่งมีความสำคัญสำหรับโครงสร้าง if-then-else ในโค้ด มีการปรับปรุงที่น่าทึ่ง Zen 5 สามารถจัดการ predicted taken branch สองแบรนช์หรือ predicted not-taken branch สามแบรนช์ต่อรอบนาฬิกา ตัวทำนาย branch สามารถวิเคราะห์ branch ล่วงหน้าสองแบรนช์และถอดรหัสทั้งสองด้านของ two-way branch พร้อมกัน
การแลกเปลี่ยนที่น่าสนใจเกิดขึ้นในการดำเนินการ vector ความหน่วงของการบวก integer vector เพิ่มขึ้นจาก 1 เป็น 2 รอบนาฬิกาเมื่อเปรียบเทียบกับ Zen 4 ในขณะที่การบวก floating point ดีขึ้นจาก 3 เป็น 2 นาฬิกา การเปลี่ยนแปลงนี้หมายความว่าคำสั่ง integer และ floating point vector ตอนนี้มีความหน่วงที่ตรงกัน อาจทำให้การตัดสินใจเพิ่มประสิทธิภาพสำหรับนักพัฒนาง่ายขึ้น
ผู้เชี่ยวชาญในชุมชนสังเกตว่าความหน่วงจริงสามารถดีกว่าภายใต้เงื่อนไขบางอย่าง โดยเฉพาะเมื่อ floating point scheduler ไม่เต็มสมบูรณ์ ทำให้การดำเนินการบางอย่างสามารถรักษาประสิทธิภาพรอบเดียวได้
การปรับปรุงประสิทธิภาพ:
- การทำนาย branch: 2 branches ที่ทำนายว่าจะ taken หรือ 3 branches ที่ทำนายว่าจะ not-taken ต่อรอบ
- เวลาแฝงของการบวกเวกเตอร์จำนวนเต็ม: 2 clocks (เพิ่มขึ้นจาก 1 clock ใน Zen 4)
- เวลาแฝงของการบวกจุดทศนิยม: 2 clocks (ลดลงจาก 3 clocks ใน Zen 4)
- อัตราความเร็วของการดำเนินการเวกเตอร์: 2 การบวกเวกเตอร์ + 2 การคูณเวกเตอร์ + 2 การอ่าน/เขียนเวกเตอร์พร้อมกันต่อรอบ
การเข้าถึงหน่วยความจำยังคงเป็นความท้าทาย
แม้จะมีการปรับปรุงการประมวลผลเหล่านี้ ขนาดแคชและ associativity มีการอัปเดตเพียงเล็กน้อยเท่านั้น สิ่งนี้หมายความว่าแม้ว่าปริมาณงาน CPU จะไม่ค่อยเป็นคอขวดใน Zen 5 การเพิ่มประสิทธิภาพการเข้าถึงหน่วยความจำกลายเป็นสิ่งสำคัญมากขึ้นสำหรับนักพัฒนาที่ต้องการใช้ศักยภาพเต็มของโปรเซสเซอร์ โปรแกรมที่ใช้การคำนวณเข้มข้นจะเห็นประโยชน์อย่างมาก ในขณะที่แอปพลิเคชันที่ถูกจำกัดด้วยหน่วยความจำและการเข้าถึงดิสก์อาจไม่ประสบการปรับปรุงอย่างมาก
ผลการทดสอบชี้ให้เห็นว่า Zen 5 เป็นก้าวสำคัญไปข้างหน้าในการแก้ไขคอขวด CPU แบบดั้งเดิม โดยเฉพาะในการดึงคำสั่งและปริมาณงานการประมวลผล อย่างไรก็ตาม การเน้นย้ำเปลี่ยนไปสู่การเพิ่มประสิทธิภาพหน่วยความจำเป็นปัจจัยสำคัญในการบรรลุประสิทธิภาพสูงสุดจากสถาปัตยกรรมใหม่นี้
Associativity: การวัดว่าข้อมูลสามารถวางในหน่วยความจำแคชได้อย่างยืดหยุ่นเพียงใด ส่งผลต่อประสิทธิภาพการใช้แคช