จากการวัดประสิทธิภาพ AWS Graviton3 ล่าสุดของฉันและการดู Graviton3 เทียบกับ Intel Xeon และ AMD EPYC ผู้อ่าน Phoronix จำนวนหนึ่งแสดงความสนใจที่จะเห็นเกณฑ์มาตรฐานการปรับแต่งคอมไพเลอร์สำหรับ Graviton3 รอบแกน Arm Neoverse-V1 พร้อมรองรับ SVE ต่อไปนี้คือเกณฑ์มาตรฐานสำหรับผู้ที่สนใจผลกระทบในการปรับแต่งคอมไพเลอร์สำหรับโปรเซสเซอร์ Arm cloud ประสิทธิภาพสูงรุ่นใหม่นี้
การทดสอบในบทความนี้ใช้กับอินสแตนซ์ Amazon EC2 c7g.8xlarge ที่มีคุณลักษณะ 32 คอร์จากแพลตฟอร์ม Graviton3 Ubuntu 22.04 LTS ทำงานบนอินสแตนซ์ EC2 นี้ด้วยเคอร์เนล Linux 5.15 ที่มีสต็อกในขณะที่เลือกใช้ gcc-snapshot บน Ubuntu 22.04 เพื่อจัดเตรียมคอมไพเลอร์สแต็กใหม่ที่ใช้ GCC12
จากอินสแตนซ์ Graviton3 เดียวกันนี้ จำนวนหนึ่ง ของเบนช์มาร์ก C/C++ แบบโอเพนซอร์สได้ดำเนินการขณะทดสอบด้วย CFLAGS/CXXFLAGS ต่อไปนี้ภายใต้การทดสอบ:
-O3-march=armv8.4-a สำหรับ ARMv8.4 เนื่องจากเป็น Neoverse-V1
-O3 0march=armv8.4-a+sve สำหรับการระบุการรองรับ Arm SVE (Scalable Vector Extension) ที่พบใน Neoverse-V1
-O3-march-armv8.4-a+sve-mcpu=neoverse-v1 เพื่อเพลิดเพลินกับการปรับแต่ง CPU สำหรับ Neoverse-V1 โดยเฉพาะ
สิ่งที่เพิ่มเข้ามาใน GCC 11 คือการสนับสนุน Arm Scalable Vector Extension (SVE) รวมถึงความสามารถในการกำหนดเวกเตอร์อัตโนมัติสำหรับคุณสมบัติ SVE จำนวนมาก มาดูกันว่าแฟล็กคอมไพเลอร์เหล่านี้มีความแตกต่างกันอย่างไรกับประสิทธิภาพของไบนารีที่สร้างขึ้นซึ่งทำงานบน Graviton3 ในระบบคลาวด์ของ Amazon
การทดสอบคอมไพเลอร์บน Graviton3 ถูกจำกัดให้มีเพียงสามการกำหนดค่าเท่านั้น ประหยัดค่าใช้จ่ายในการดำเนินงานในระบบคลาวด์
ตัวเลือกคอมไพเลอร์ SVE ให้ความช่วยเหลือในการทดสอบตัวเข้ารหัสภาพ JPEG XL เพื่อให้ได้ประสิทธิภาพที่ดีกว่าการกำหนดเป้าหมาย Armv8.4 พื้นฐานที่ไม่มี SVE นอกจากนี้ OpenJPEG ยังได้รับประโยชน์จาก SVE ในระดับหนึ่งด้วย
ในภาระงานอื่นๆ ความได้เปรียบของ SVE แตกต่างกันไปตั้งแต่เล็กน้อยไปจนถึงปานกลาง
การรองรับเวกเตอร์ SVE อัตโนมัติของ GCC 12 ได้ช่วยเรื่องเสียงบางส่วน เข้ารหัสการวัดประสิทธิภาพ
แน่นอนว่าขึ้นอยู่กับซอฟต์แวร์ที่ทดสอบว่ามีผลกระทบมากน้อยเพียงใดจากการปรับแต่ง Arm SVE และการปรับแต่ง Neoverse-V1 อื่นๆ
ด้วย Zstd เป็นต้น การปรับจูนช่วยเฉพาะประสิทธิภาพการบีบอัดสำหรับโหมดยาวในขณะที่การกำหนดค่าการบีบอัด Zstd อื่นๆ ที่ทดสอบไม่มีความแตกต่างที่วัดได้
ในกรณีของการวัดประสิทธิภาพบางอย่าง เช่น Crypto++ การปรับ-mcpu=neovere-v1 มีผลกระทบด้านลบต่อประสิทธิภาพการทำงานจริง ๆ
เวกเตอร์อัตโนมัติของ GCC และ/หรือ SVE มีผลกระทบในทางลบต่อประสิทธิภาพของไลบรารีการประมวลผลสัญญาณดิจิทัลแบบโอเพนซอร์ส Liquid-DSP
หรือ ในการวัดประสิทธิภาพการเข้ารหัสของ Botan การปรับจูน Neoverse-V1 นั้นมีความได้เปรียบที่เห็นได้ชัดเจนสำหรับอัลกอริธึมการเข้ารหัสลับบางตัว.
ประสิทธิภาพของไลบรารีเครือข่ายนิวรัลของ TNN Tencent นั้นแตกต่างกันไปตาม SVE
เรื่องสั้นที่มักเกิดขึ้นมักจะมาจากโค้ดเบสเฉพาะและปริมาณงานของคุณ มีส่วนร่วมอย่างเต็มที่ว่าการปรับแต่งคอมไพเลอร์เพิ่มเติมนั้นคุ้มค่าหรือไม่ ในบางปริมาณงาน GCC 12 ตามที่ทดสอบได้แสดงให้เห็นประโยชน์บางประการกับการสนับสนุนเวกเตอร์อัตโนมัติของ SVE ในขณะที่ในกรณีอื่นๆ ก็ไม่มากนัก และในบางกรณีก็ลดประสิทธิภาพการทำงานลง เป็นเรื่องที่น่าสนใจที่จะได้เห็นผลกระทบของการใช้งานภายใน SVE ที่ปรับแต่งด้วยมือโดยซอฟต์แวร์โอเพนซอร์ซรายใหญ่ เนื่องจากมีโปรเซสเซอร์ Arm จำนวนมากขึ้นที่ให้การสนับสนุน SVE/SVE2 รวมถึงการพัฒนาคอมไพเลอร์โอเพนซอร์ซที่ไม่มีวันสิ้นสุด
p>
ผู้ที่ต้องการดูมาตรฐานการเปรียบเทียบค่าสถานะคอมไพเลอร์ที่ทดสอบทั้งหมดสำหรับอินสแตนซ์ Graviton3 สามารถดูหน้าผลลัพธ์นี้.