การลงทะเบียนคืออะไร?

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

มีหน่วยความจำอีกชั้นหนึ่งแม้ว่า เท่าที่คุณอาจคิดว่าแคช L1 อยู่ใกล้กับแกนประมวลผลจริงมากที่สุดเท่าที่จะเป็นไปได้ มีเลเยอร์ที่สูงกว่าในลำดับชั้นของหน่วยความจำอีก นี่คือการลงทะเบียน CPU เหตุผลที่ไม่ได้โฆษณาหรือกล่าวถึงสิ่งเหล่านี้จริงๆ เพราะพวกเขาไม่ได้เปลี่ยนแปลงเลยจริงๆ อย่างไรก็ตาม ในทางเทคนิคแล้ว จำนวนและขนาดของรีจิสเตอร์เป็นพื้นฐานของสถาปัตยกรรม ซึ่งหมายความว่าซีพียู x86-64 ทั้งหมดมีจำนวนรีจิสเตอร์เท่ากัน ไม่ได้วางตลาดเพราะไม่ใช่จุดแข่งขัน

ทะเบียนทำหน้าที่อะไร?

รีจิสเตอร์เป็นสถานที่จัดเก็บที่พร้อมใช้งานอย่างรวดเร็วสำหรับโปรเซสเซอร์ การเข้าถึงรีจิสเตอร์สามารถทำได้ทันทีโดยมีเวลาแฝงเป็นศูนย์ ในขณะที่แคช L1 มีเวลาแฝงประมาณ 4-5 รอบในซีพียูสมัยใหม่ คำแนะนำในการเข้าถึงอย่างฉับไวนี้บ่งชี้กรณีการใช้งานสำหรับการลงทะเบียน การลงทะเบียนใช้เพื่อจัดเก็บคำแนะนำที่ CPU ใช้งานอยู่ พวกเขายังเก็บจุดข้อมูลที่จะประมวลผล ทะเบียนบางอันมีวัตถุประสงค์ทั่วไป ในขณะที่บางทะเบียนมีวัตถุประสงค์ที่เฉพาะเจาะจงมาก ตัวอย่างของการลงทะเบียนวัตถุประสงค์พิเศษคือตัวนับโปรแกรมซึ่งเป็นตำแหน่งที่โปรเซสเซอร์ติดตามตำแหน่งในลำดับโปรแกรม

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

ลงทะเบียนเปลี่ยนชื่อ

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

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

บทสรุป

การลงทะเบียนเป็นระดับสูงสุดในลำดับชั้นหน่วยความจำ เป็นส่วนเดียวที่ CPU ระบุได้โดยตรงและไม่มีเวลาแฝง Registers ใช้เพื่อเก็บข้อมูลที่ CPU ดำเนินการ พวกเขายังใช้เพื่อจัดเก็บจุดข้อมูลอื่น ๆ เช่นตัวนับโปรแกรมซึ่งติดตามว่าคำสั่งใดที่จะดำเนินการต่อไป มีการลงทะเบียนจำนวนจำกัดมากในสถาปัตยกรรม x86-64 ที่มีการลงทะเบียนวัตถุประสงค์ทั่วไป 16 รายการและการลงทะเบียนทศนิยม 16 หรือ 32 รายการขึ้นอยู่กับว่ารองรับ AVX-512 หรือไม่