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


27

คำถามนี้รบกวนฉันมาระยะหนึ่งแล้วและวันนี้ฉันคิดว่าฉันจะทำ Google ฉันได้อ่านสิ่งบางอย่างเกี่ยวกับเรื่องนี้และดูเหมือนว่ามันคล้ายกันมากกับสิ่งที่ฉันได้รู้จักกันเสมอเป็นหน่วยประมวลผลแคช

มีความแตกต่างระหว่างฉันสองคนหรือว่าถูกต้องเมื่อฉันคิดว่ามันเหมือนกันหรือไม่? จำเป็นต้องมีการลงทะเบียนเพื่อใช้ภายใน CPU เพื่อให้ทำงานได้หรือไม่?

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


13
การลงทะเบียน CPU เป็นองค์กรที่ติดตาม CPU ของคุณ NSA เป็นตัวอย่างของการลงทะเบียน CPU
จิมมี่ฮอฟฟา

3
CPU ระดับ -1 แคชมักทำจากซิลิคอนชนิดเดียวกันกับรีจิสเตอร์ มันไม่เร็วนักเพราะมันต้องการการค้นหาเพิ่มเติมเพื่อเชื่อมโยงที่อยู่แคชกับที่ตั้งแคช แต่การลงทะเบียนและแคชนั้นแตกต่างกันอย่างสิ้นเชิงในชิป
Zan Lynx

3
@JimmyHoffa: ฉันกลัวว่าความคิดเห็นของคุณจะสับสนมากสำหรับ OP เพื่อความเสียหายของความรู้วิทยาศาสตร์คอมพิวเตอร์
ร. ว.

3
@rwong Nah ฉันเข้าใจแล้วฉันคิดว่ามันตลกดี : P
Jeroen

1
และความแตกต่างก็คือขนาด: ไฟล์ลงทะเบียนนั้นใหญ่กว่าคำสองสามร้อยคำในขณะที่แคช L1 สามารถเป็นอะไรที่มีขนาดใหญ่ได้ถึง 64k
SK-logic

คำตอบ:


61

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

ลองนึกภาพช่างไม้ที่ทำงาน เขามีสิ่งของสองสามอย่างอยู่ในมือ (ลงทะเบียน) จากนั้นเข้าใกล้สิ่งที่เขาปรับแต่ง (แคช) บ่อยครั้งที่เขากำลังทำงานอยู่ แต่ไม่ได้ใช้งานในเวลานี้และในการประชุมเชิงปฏิบัติการ (หน่วยความจำหลัก) ที่เกี่ยวข้องกับ โครงการในมือ แต่ไม่สำคัญพอที่จะอยู่บนโต๊ะทำงาน

แก้ไข:นี่คือคำอธิบายง่ายๆสำหรับวิธีการลงทะเบียนตรรกะทำงาน

ลองนึกภาพเรามีสี่ทะเบียนชื่อ R1..R4 หากคุณรวบรวมคำสั่งที่มีลักษณะเช่นนี้:

x = y + z * 3;

คอมไพเลอร์จะเอาท์พุทรหัสเครื่องที่ (เมื่อถอดประกอบ) มีลักษณะดังนี้:

LOAD  R1, ADDRESS_Z //move the value of Z into register 1
MUL   R1, 3         //multiply the value of register 1 by 3
LOAD  R2, ADDRESS_Y //move the value of Y into register 2
ADD   R1, R2        //adds the value in R2 to the value in R1
STORE R1, ADDRESS_X //move the value of register 1 into X

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


26
และสิ่งอื่น ๆ อีกมากมายในคลังสินค้าทั่วเมือง (ดิสก์) และสิ่งอื่น ๆ ที่เขาสามารถมี Fedex'd ใน (เครือข่าย) :-)
Dan Pichelman

2
ขึ้นอยู่กับสถาปัตยกรรมระบบเป็นอย่างมาก
วิศวกรโลก

5
@Binero ในโปรเซสเซอร์ 16 บิต x86 คุณได้ลงทะเบียนชื่อ Ax, Bx และอื่น ๆ เมื่อพวกเขาย้ายไปยังตัวประมวลผลแบบ 32 บิตพวกเขาขยายการลงทะเบียนเป็น 32 บิต EAx, EBx หากคุณเข้าถึง Axe คุณจะได้รับ EAx ต่ำ 16 บิต ในโหมด 64 บิตพวกเขาตั้งชื่อเรจิสเตอร์ RAx ด้วย 32 บิตที่ต่ำกว่าเป็น EAx และ 16 บิตที่ต่ำกว่ายังคงเป็นขวาน ตรวจสอบไดอะแกรมเหล่านี้เพื่อดูว่าคุณจะไปยังส่วนอื่น ๆ ของไบต์เช่น AH ได้อย่างไรเพื่อรับไบต์สูง 16 บิตลงทะเบียน Axe: en.wikipedia.org/wiki/X86#
โครงสร้าง

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

2
@MasonWheeler ทางเลือกที่ดีในส่วนของคุณ
Vatine

3

จริง ๆ แล้วการลงทะเบียนในคำศัพท์ของ CPU นั้นมีขนาดเล็กชื่อหน่วยความจำที่มีอยู่ในไมโครโปรเซสเซอร์ (CPU) รีจิสเตอร์มีชื่อเฉพาะขนาดและฟังก์ชั่นที่แตกต่างจากโปรเซสเซอร์ไปยังโปรเซสเซอร์ตัวอย่างเช่นถ้าใช้ 8085 ไมโครโปรเซสเซอร์เป็นโปรเซสเซอร์ 8 บิตซึ่งมี 8 รีจิสเตอร์บิต (A: Accumulator, B, C, D, E, H และ L รีจิสเตอร์และหนึ่งแฟล็กรีจิสเตอร์ทั้งหมด 8 บิต) สองเครื่องที่ลงทะเบียน 16 บิตทั้งพีซีและ SP ล้วน แต่มีฟังก์ชั่นพิเศษและฟังก์ชั่นเข้ามาในภาพระหว่างการเขียนโปรแกรมการประกอบ การควบคุมการลงทะเบียนเพียงไม่กี่ตัวนั้นอยู่เหนือโปรแกรมเมอร์

ถ้าคุณใช้ตัวประมวลผลอื่นการลงทะเบียนจะแตกต่างกันสมมติว่า 8086 เป็นตัวประมวลผล 16 บิตและมี AX, BX, CX และ DX ทั้งหมดเป็น 16 บิต, พีซี, SP และการลงทะเบียน

ตามที่คุณยกมาในคำถามพวกเขาจะเพิ่มความเร็วในการดำเนินการของโปรแกรมและทำหน้าที่เป็นโปรเซสเซอร์แคช แต่ตอนนี้เปลี่ยนสถาปัตยกรรมโปรเซสเซอร์วันและพวกเขา (Intel) เพิ่มหน่วยความจำจำนวนมากเรียกแคชโปรเซสเซอร์

แต่มีความแตกต่างเล็กน้อยระหว่างตัวประมวลผล (CPU) แคชและตัวประมวลผล (CPU) ลงทะเบียนจำเป็นจริง ๆ สำหรับกิจกรรมพิเศษบางอย่างเช่นตัวชี้หน่วยความจำสถานะโปรแกรม ฯลฯ Ex: PC: ตัวนับโปรแกรมซึ่งทำหน้าที่เป็นตัวชี้หน่วยความจำในหน่วยความจำโปรแกรม SP: ตัวชี้สแต็กซึ่งทำหน้าที่ตัวชี้หน่วยความจำในหน่วยความจำสแต็ก และ Accumulator เป็นบัฟเฟอร์และการลงทะเบียนหลักในการเข้าถึง ALU สำหรับ Ops ทางคณิตศาสตร์ ...

คุณสามารถดูคำอธิบายของ Mason Wheeler สำหรับ exaples


1

ฉันคิดว่ามันช่วยให้คิดได้ว่ารีจิสเตอร์ไม่ใช่ความทรงจำและไม่ควรคิดเช่นนี้

คิดเหมือน OO - Register เป็นคลาสที่ไม่ได้มาจาก Memory และ Memory เป็นคลาสที่ไม่ได้มาจาก register แต่คลาส Register มีวิธีการ (Machine Op Codes) เพื่อแปลงข้อมูลเป็นและจากหน่วยความจำ หน่วยความจำในขณะที่ไม่รู้อะไรเกี่ยวกับการลงทะเบียนและไม่สามารถเรียกการกระทำกับพวกเขา ดังนั้นการดำเนินการของ CPU ทั้งหมดจะดำเนินการโดยการลงทะเบียนซึ่งมักจะเข้าถึงหน่วยความจำ

ไม่ใช่เรื่องแปลกที่จะเห็นการเขียนลงทะเบียนเท่านั้น - แทบจะเป็นคุณลักษณะของหน่วยความจำ อาจเป็นไปได้ที่ค่าการลงทะเบียนจะเปลี่ยนแปลงโดยไม่ต้องเขียนลงไป - อีกครั้งไม่ใช่พฤติกรรมที่คุณคาดหวังของหน่วยความจำ


ใน I / O ที่แมปหน่วยความจำขอบเขตการเขียนอย่างเดียวของ "หน่วยความจำ" ไม่ใช่เรื่องแปลก
SK-logic

@ SK-logic - ถูกต้อง - อย่างไรก็ตามบริบทของคำถามที่ถามอย่างชัดเจน OP คิดว่าหน่วยความจำเป็นสิ่งที่คุณอ่านและเขียนจาก ไม่ต้องทำให้เขาสับสนอีก :)
mattnz

0

คำตอบของ @Mason Wheeler นั้นถูกต้อง แต่ฉันคิดว่าเป็นไปได้ที่จะนำคำถามของคุณไปใช้ในมุมมองอื่น ตัดสินโดยคำถามของคุณมันเสียงที่ฉันแนวคิดที่คุณต้องการได้อย่างสมบูรณ์แบบเข้าใจความแตกต่างระหว่างแคชและลงทะเบียนเป็นข้อมูลเส้นทาง เมื่อ Mason ชี้ให้เห็นอย่างถูกต้องตรรกะของ CPU (เช่นเส้นทางข้อมูล) ได้รับการออกแบบในลักษณะที่ข้อมูลหน่วยความจำไม่สามารถจัดการได้โดยตรงจาก CPU และนั่นคือสาเหตุที่มีการลงทะเบียน ในความเป็นจริง CPU ไม่สามารถถอดรหัสคำสั่งปัจจุบันของโปรแกรมที่กำลังทำงานหากคำสั่งนั้นไม่ได้โหลดในการลงทะเบียนที่เหมาะสมก่อน (โดยปกติจะเป็นชื่อ IR, "Instruction Register")

สิ่งนี้เกี่ยวข้องกับวิธีการใช้สายของ CPU ไม่มีเส้นทางกายภาพระหว่างหน่วยความจำและ ALU คือ; ข้อมูลทั้งหมดที่ส่งไปยัง ALU จะต้องถูกบัฟเฟอร์ในการลงทะเบียน มันอาจจะแตกต่างกัน แต่วงจรที่จำเป็นในการเชื่อมต่อหน่วยความจำเข้ากับ ALU โดยตรงนั้นซับซ้อนเกินไป: มันง่ายกว่าและมีประสิทธิภาพมากกว่าในการเป็นสื่อกลางในการสื่อสารระหว่างหน่วยความจำและ ALU ผ่านไฟล์ registerตามที่กำหนดโดยเส้นทางข้อมูลดังกล่าว . ในความเป็นจริงแม้ว่าคำสั่งที่ระบุจะระบุตำแหน่งหน่วยความจำเป็นตัวถูกดำเนินการ (โหมดการกำหนดที่รู้จักกันในชื่อการกำหนดที่อยู่โดยตรง ) หน่วยข้อมูลที่สอดคล้องกันจะถูกโหลดลงทะเบียนที่เรียกว่า MBR (Memory Buffer Register บางครั้งเรียกว่า MDR, Memory Data Buffer )

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.