ส่วนขยายชุดคำสั่ง
ส่วนขยายชุดคำสั่งเป็นการเพิ่มคำสั่งใหม่ให้กับสถาปัตยกรรมพื้นฐาน สำหรับการคำนวณแบบเวกเตอร์และ SIMD, การเข้ารหัส, การดำเนินการแบบอะตอมมิก หรือการทำงานเฉพาะทางอื่นๆ ซึ่งช่วยเพิ่มขีดความสามารถในขณะที่ยังคงรักษาความเข้ากันได้กับซอฟต์แวร์ที่มีอยู่เดิม
Definition
ส่วนขยายชุดคำสั่งคือชุดของคำสั่งเพิ่มเติมที่ซ้อนทับอยู่บนสถาปัตยกรรมชุดคำสั่งพื้นฐาน เพื่อให้ฟังก์ชันการทำงานใหม่ๆ ซึ่งโดยทั่วไปแล้วจะเป็นการดำเนินการแบบขนานข้อมูล การเข้ารหัส หรือแบบอะตอมมิก โดยยังคงรักษาคำสั่งที่มีอยู่เดิมและความเข้ากันได้แบบไบนารีไว้
Scope
หัวข้อนี้ครอบคลุมถึงวิธีการที่ชุดคำสั่งมีการพัฒนาเมื่อเวลาผ่านไปผ่านส่วนขยายที่เป็นทางเลือกหรือบังคับ: ส่วนขยาย SIMD และเวกเตอร์สำหรับการประมวลผลข้อมูลแบบขนาน, คำสั่งการเข้ารหัสและการจัดการบิต, พรีมิทีฟแบบอะตอมมิกและการซิงโครไนซ์, และรูปแบบส่วนขยายแบบโมดูลาร์ของ ISA เช่น RISC-V โดยจะกล่าวถึงเป้าหมายและข้อจำกัดของการขยาย ISA โดยไม่ทำให้เกิดปัญหาความเข้ากันได้ หัวข้อนี้ไม่รวมถึงฮาร์ดแวร์แบบขนานพื้นฐานที่ใช้ในการประมวลผลคำสั่งเหล่านี้ (โปรเซสเซอร์ SIMD และเวกเตอร์) และโครงสร้างการเข้ารหัสพื้นฐาน (รูปแบบคำสั่งและการเข้ารหัส)
Core questions
- เหตุใดชุดคำสั่งจึงถูกขยายแทนที่จะออกแบบใหม่?
- ส่วนขยายถูกรวมเข้ากับพื้นที่การเข้ารหัสที่จำกัดได้อย่างไรโดยไม่ทำให้โค้ดที่มีอยู่เดิมเสียหาย?
- การดำเนินการประเภทใดที่มักจะสมควรได้รับการขยายเฉพาะ?
- รูปแบบส่วนขยายแบบโมดูลาร์ช่วยให้การนำไปใช้งานสามารถรวมเฉพาะคุณสมบัติที่จำเป็นได้อย่างไร?
Key concepts
- ส่วนขยาย SIMD
- ส่วนขยายเวกเตอร์
- คำสั่งการเข้ารหัส
- คำสั่งอะตอมมิกและการซิงโครไนซ์
- ส่วนขยายแบบโมดูลาร์และทางเลือก
- ความเข้ากันได้แบบย้อนหลัง
- การจัดการพื้นที่รหัสการทำงาน (opcode space)
Mechanisms
ส่วนขยายจะใช้พื้นที่รหัสการทำงาน (opcode space) ที่ยังไม่ได้ใช้งาน และกำหนดคำสั่ง รีจิสเตอร์ หรือสถานะใหม่ ซอฟต์แวร์จะตรวจจับส่วนขยายที่มีอยู่ขณะรันไทม์ (เช่น ผ่านแฟล็กคุณสมบัติ) และส่งไปยังเส้นทางโค้ดที่ได้รับการปรับปรุง ส่วนขยาย SIMD และเวกเตอร์จะเพิ่มรีจิสเตอร์แบบกว้างและการดำเนินการที่ใช้คำสั่งเดียวกับองค์ประกอบข้อมูลหลายรายการ; ISA แบบโมดูลาร์ เช่น RISC-V จะกำหนดมาตรฐานพื้นฐานขนาดเล็กและรายการส่วนขยายที่เป็นทางเลือกที่ผู้ใช้งานสามารถนำมาประกอบกันได้
Clinical relevance
ส่วนขยายเป็นวิธีการที่ชุดคำสั่งสามารถรองรับปริมาณงานใหม่ๆ ได้โดยไม่ต้องละทิ้งระบบนิเวศซอฟต์แวร์ของตน ตระกูล SIMD เช่น x86 SSE/AVX และ ARM NEON ช่วยเร่งความเร็วงานมัลติมีเดีย วิทยาศาสตร์ และการเรียนรู้ของเครื่อง; ส่วนขยายการเข้ารหัสช่วยเร่งความเร็วในการเข้ารหัส; และส่วนขยายแบบโมดูลาร์ช่วยให้ ISA เดียวกันสามารถปรับขนาดได้ตั้งแต่ไมโครคอนโทรลเลอร์ขนาดเล็กไปจนถึงซูเปอร์คอมพิวเตอร์
History
ส่วนขยาย SIMD เข้าสู่ CPU กระแสหลักในช่วงปลายทศวรรษ 1990 ด้วย Intel MMX และ SSE และต่อมาคือ AVX รวมถึง ARM NEON ส่วนขยายเฉพาะสำหรับการเข้ารหัส และล่าสุดคือการเรียนรู้ของเครื่องได้ตามมา ISA ของ RISC-V ซึ่งออกแบบมาตั้งแต่ต้นโดยมีพื้นฐานที่เรียบง่ายพร้อมส่วนขยายที่เป็นทางเลือกที่ได้มาตรฐาน ทำให้รูปแบบส่วนขยายแบบโมดูลาร์มีความชัดเจนและเป็นหัวใจสำคัญ
Key figures
- John L. Hennessy
- David A. Patterson
- Krste Asanović
Related topics
Seminal works
- hennessy2019
- patterson2020
Frequently asked questions
- โปรแกรมใช้ส่วนขยายที่โปรเซสเซอร์บางตัวไม่มีได้อย่างไร?
- ซอฟต์แวร์จะตรวจจับขณะรันไทม์ว่าโปรเซสเซอร์รองรับส่วนขยายใดบ้าง โดยปกติจะทำได้โดยการสอบถามแฟล็กคุณสมบัติ และเลือกเส้นทางโค้ดที่ได้รับการปรับปรุงเมื่อมีส่วนขยาย หรือกลับไปใช้คำสั่งพื้นฐานหากไม่มี เพื่อรักษาความถูกต้องในการทำงานของฮาร์ดแวร์
- RISC-V เป็นแบบโมดูลาร์หมายความว่าอย่างไร?
- RISC-V กำหนดชุดคำสั่งจำนวนเต็มพื้นฐานที่บังคับขนาดเล็ก พร้อมด้วยชุดส่วนขยายที่เป็นทางเลือกที่ได้มาตรฐาน (สำหรับการคูณ, อะตอมมิก, จุดทศนิยม, เวกเตอร์ และอื่นๆ) การนำไปใช้งานจะรวมเฉพาะส่วนขยายที่จำเป็นเท่านั้น ดังนั้น ISA เดียวกันจึงสามารถครอบคลุมตั้งแต่คอร์ฝังตัวขนาดเล็กไปจนถึงโปรเซสเซอร์ประสิทธิภาพสูง