ทำไมเราไม่ลงทะเบียนเพิ่มเติมในไมโครโปรเซสเซอร์


18

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

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


8
@ Alper91 สถาปัตย์หลายตัวทั้งสมมุติและจริงไม่มีทะเบียนและก็ไม่จำเป็นเลย เป็นเพียงการเพิ่มประสิทธิภาพที่มีประโยชน์
ท่อ

4
อืมมม ไม่มีใครพูดถึง Sparc การติดตั้งที่ใหญ่ที่สุดสามารถมี 520 register ในนั้น (32 windows คูณ 16 register, + 8 globals) ฉันแน่ใจว่าจำได้
jonk

13
ฉันคิดว่าจำนวนบิตในการเรียนการสอนที่คุณต้องระบุการลงทะเบียนเป็นปัญหาใหญ่ หากคุณมีการลงทะเบียน 1024 รายการคุณต้องมีอย่างน้อย 30 บิตสำหรับทุกคำสั่งทางคณิตศาสตร์ - เว้นแต่คุณจะเพิ่มข้อ จำกัด อื่น ๆ เช่น "การลงทะเบียนทั้ง 3 จะต้องมาจากกลุ่มเดียวกัน 32 (ซึ่งในกรณีนี้คุณต้อง 20 บิต)
user253751

8
@pipe - จริง ๆ แล้วการออกแบบที่ใช้งานได้จริง ๆ นั้นจำเป็นต้องมี "register" ในความหมายของแผนผังแม้ว่าคุณจะสร้างเครื่องสแต็คหรืออะไรทำนองนั้นคุณต้องมีที่สำหรับเก็บอาร์กิวเมนต์ของ ALU - ความทรงจำส่วนใหญ่ไม่มีพอร์ตการเข้าถึงสามพอร์ต และเครื่องสแต็คต้องมีตัวชี้สแต็คซึ่ง ... ลงทะเบียน! และไม่ต้องพูดถึงการลงทะเบียนไปป์ไลน์ คุณสามารถซ่อนการใช้งาน "รีจิสเตอร์" ดังกล่าวจากโปรแกรมเมอร์ แต่คุณยังคงต้องการบางอย่างและอาจจะเกือบเท่าที่เครื่องลงทะเบียนดั้งเดิมมี
Chris Stratton

4
@ChrisStratton แน่นอน แต่ตราบใดที่พวกเขาไม่ได้เปิดเผยผ่าน ISA มันเป็นเพียงรายละเอียดการนำไปปฏิบัติ อาร์กิวเมนต์ไม่มีจุดหมายค่อนข้าง แต่เนื่องจากเราไม่ทราบว่าหมายถึง OP โดยการลงทะเบียน
ท่อ

คำตอบ:


33

มีหลายปัจจัย:

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

  • การเพิ่มจำนวนการลงทะเบียนไม่ได้เพิ่มขึ้นเป็นสองเท่า ISTR (จากสถาปัตยกรรมคอมพิวเตอร์ A, Quantitative Approach ) ที่เพิ่มจาก 16 เป็น 32 register ทำให้เกิดการพัฒนาขึ้น 10% โดยสมมติว่าการเพิ่มขึ้นไม่มีผลกระทบเชิงลบ (ซึ่งเป็นข้อสมมติในแง่ดีมาก)

  • การลงทะเบียนทางสถาปัตยกรรมที่มองเห็นมีค่าใช้จ่าย ตัวอย่างเช่น

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

1
ฉันต้องการเดิมพันว่าการปรับปรุงประสิทธิภาพของการลงทะเบียน 16 ถึง 32 ขึ้นอยู่กับศักยภาพการเพิ่มประสิทธิภาพของคอมไพเลอร์ในคำถาม ในแอสเซมเบลอร์การเข้าถึงจำนวนของการลงทะเบียน (ในสถาปัตยกรรม x64) เป็นสองเท่าสามารถปรับปรุงประสิทธิภาพได้อย่างมหาศาล - เฉพาะสำหรับบทบาทเฉพาะและเฉพาะเมื่อมีการใช้งานจริงเท่านั้น
rdtsc

6
@rdtsc: เริ่มจาก 8 ไปยัง 16 สถาปัตยกรรมทะเบียนให้การปรับปรุงใหญ่ในปริมาณของการรั่วไหล / reloads สำหรับรหัสทั่วไปตามข้อมูลจากการจำลองในกระดาษที่เชื่อมโยงจากคำตอบนี้ มันมีผลต่อขนาดรหัสจำนวนการเรียนการสอนและความสำคัญของการส่งต่อร้านค้าที่มีความหน่วงแฝงต่ำ 16-> 32 เป็นเอฟเฟกต์ที่เล็กกว่ามาก AFAICT ผู้ลงทะเบียนสถาปัตยกรรม 16 รายเป็นตัวเลือกที่ดีสำหรับฮาร์ดแวร์ที่มีการเปลี่ยนชื่อรีจิสเตอร์เพื่อลบอันตรายของ WAR และ WAW
Peter Cordes

2
อย่างไรก็ตาม AVX512 ของ Intel เพิ่ม vector regs อีก 16 ตัวรวมเป็น 32 (รวมทั้งเพิ่มความกว้างเป็น 64 bytes ซึ่งเป็นบรรทัดแคชแบบเต็ม) การซ่อนเวลาแฝงจากการดำเนินการ FP ความเร็วสูงในการรับส่งข้อมูลที่สูงอาจทำให้มีการลงทะเบียนจำนวนมาก เช่น Intel Haswell มี 5c lat หนึ่งต่อ 0.5c ปริมาณงาน FMA ดังนั้นคุณจึงจำเป็นต้องมีตัวสะสมเวกเตอร์ 10 ตัวเพื่อลดจำนวนหน่วยดำเนินการ FMA ให้อิ่มตัว (เช่นจุดผลิตภัณฑ์หรือข้อสรุปอาร์เรย์ซึ่ง FMA เป็นส่วนหนึ่งของการพึ่งพาแบบวนซ้ำ) ) x86-64 มี 16 เวกเตอร์ regs เท่านั้น แต่จำไว้จำนวนเต็ม ops, esp ใน GP regs มักจะมีเวลาแฝงมากกว่า 1c
Peter Cordes

1
การแลกเปลี่ยนแตกต่างกันสำหรับจำนวนเต็ม FP และเวกเตอร์ เช่นการบันทึก / เรียกคืนของการลงทะเบียนจำนวนเต็มอย่างเกียจคร้านไม่สมเหตุสมผลการทำเวกเตอร์หนึ่งเป็นการเดิมพันที่ดีกว่ามาก และเวกเตอร์ ISA มักจะมีการลงทะเบียนมากกว่าจำนวนเต็ม (AltiVec มีอย่างน้อยมากถึง 128, ISTR ที่อ่านเกี่ยวกับ 256 สำหรับ Sparc แต่ไม่สามารถหาข้อมูลอ้างอิงได้ในตอนนี้)
AProgrammer

1
en.wikipedia.org/wiki/AltiVecมีเวกเตอร์ขนาด 128b สามสิบสามสิบสอง ฉันอยากรู้เกี่ยวกับ SPARC และค้นหาว่าสิ่งที่หน้าต่างการลงทะเบียนของมันทำงานอย่างไรสำหรับการสลับบริบท มีการลงทะเบียน 32 รายการพร้อมกัน แต่ใช้หน้าต่างแบบเลื่อนลงบนไฟล์ลงทะเบียนที่ใหญ่กว่า ฟังจากเวอร์ชั่นที่เรียบง่ายเช่นระบบปฏิบัติการจำเป็นต้องทราบขนาดของไฟล์ลงทะเบียนหน้าต่างแบบเลื่อนทั้งหมดเพื่อบันทึก / กู้คืนเนื่องจากแม้ว่าคำแนะนำในการเลื่อนหน้าต่างจะมีหน่วยความจำสำหรับการบันทึก / เรียกคืน regs หากจำเป็นทำได้โดยการวางกับดัก ไปยังระบบปฏิบัติการ
ปีเตอร์กอร์เดส

16

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

รีจิสเตอร์นั้นมีความผูกพันกับ ALU อย่างแน่นหนาและสามารถมีบทบาทมากมายในแหล่งข้อมูลอ่างล้างมือตัวดัดแปลงและอื่น ๆ ดังนั้นพวกเขาจึงต้องการการเชื่อมต่อแบบมัลติเพล็กซ์มากมาย ในสถาปัตยกรรมบางอย่างเราสามารถเขียน R1 <= R2 + R3 และนั่นคือสิ่งที่เกิดขึ้นในรอบสัญญาณนาฬิกาเดียว การลงทะเบียนแต่ละครั้งได้รับการแก้ไขโดยตรงในรหัส op การกำหนดที่อยู่นี้เป็นทรัพยากรที่ จำกัด มาก

เนื่องจากการลงทะเบียนมีราคาแพงในการติดตั้งจำนวนมักจะถูก จำกัด อยู่ที่ 10/20 ในสถาปัตยกรรมส่วนใหญ่

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

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


4
อีกแง่มุมหนึ่งคือคุณต้องบันทึก / กู้คืนรีจิสเตอร์ระหว่างการสลับบริบท ลงทะเบียนมากขึ้นมีเวลามากขึ้น
Michel Billaud

ฉันจะทราบว่า TMS9900 เก่าเก็บทะเบียนทำงานทั้งหมดไว้ในหน่วยความจำภายนอกen.wikipedia.org/wiki/Texas_Instruments_TMS9900
Peter Smith

1
ฉันมีคุณสมบัติ 'คงเส้นคงวา' ด้วย (ยกเว้นการปรับแต่งเล็กน้อย) แต่เอาออกมาเพื่อทำให้มันง่ายขึ้น บางทีฉันอาจจะเปลี่ยนเป็น 'โดยทั่วไป' โดยทั่วไปถ้าคุณสามารถค้นหาและเข้าใจข้อยกเว้นคุณไม่ต้องการให้ฉันชี้ให้พวกเขาเห็น หากคุณเป็นคนขี้กลัวพอที่จะหลงผิดมันไม่สำคัญเพราะมันจะไม่ทำให้คุณเดือดร้อน TMS9900 นั่นแปลกมากฉันมี 99/4 สำหรับความผิดของฉันในชีวิตก่อนหน้านี้สัตว์ร้าย!
Neil_UK

Itanium ยังมีหน้าต่างลงทะเบียน
Simon Richter

1
@ChrisStratton: ในขณะที่มีบางอย่างสำหรับ "คุณไม่สามารถใช้การลงทะเบียน X และ Y" ได้รับการพิจารณาเป็นส่วนหนึ่งของ "ABI" (เช่นการลงทะเบียน k0 และ k1 บน mips) มันใช้งานผิดปกติ แน่นอนว่ามีช่องทางการส่งข้อความแอบแฝงที่ไม่พึงประสงค์ / ไม่ปลอดภัยระหว่างกระบวนการหากการบันทึก / กู้คืนของ "การลงทะเบียนต้องห้าม ABI" เหล่านี้ไม่ได้ดำเนินการที่การสลับบริบท นั่นคือกระบวนการที่ไม่สามารถสื่อสารได้อาจทำได้โดยการจัดเก็บข้อมูลในการลงทะเบียนที่ต้องห้ามและรอการสลับบริบท
..

12

ต้องลงทะเบียนภายในคำแนะนำ หากมีการลงทะเบียนจำนวนมากคำสั่งจะยาวขึ้น การบันทึกและกู้คืนเนื้อหาการลงทะเบียนสำหรับบริการขัดจังหวะต้องใช้เวลามากขึ้นหากมีการลงทะเบียนจำนวนมาก


5

สิ่งที่สำคัญที่สุดคือจำนวนการลงทะเบียนคือการประนีประนอมระหว่างค่าใช้จ่ายความซับซ้อนและประโยชน์

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

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

ถัดไปคือคุณต้องการลงทะเบียนจำนวนเท่าใด มีข้อ จำกัด ในการใช้ประโยชน์ของพวกเขา ลองพิจารณาว่าคุณเขียนอัลกอริธึมที่ดำเนินการทางคณิตศาสตร์บางส่วนบน 1024 ไบต์สมมติว่าคูณด้วย 5 ด้วยจำนวนการลงทะเบียนปัจจุบันคุณจะได้สิ่งที่ต้องการ:

load operand1=5
load address
loop: load operand2=byte1@address
multiply Register1 with Register2
store result
increment address
if address = end goto endLoop
jump loop
endLoop:

ตอนนี้ถ้าคุณจะมีการลงทะเบียน 1024 และข้อมูลทั้งหมดที่เก็บไว้ที่นั่นโปรแกรมของคุณจะมีลักษณะ:

multiply Register1 with Register2
multiply Register1 with Register3
multiply Register1 with Register4
multiply Register1 with Register5
multiply Register1 with Register6
...

เนื่องจากแต่ละคนมีคำสั่งต่างกันทุกคนจึงต้องเขียนออกมา ดังนั้นหน่วยความจำโปรแกรมที่คุณต้องการจะระเบิด หลังจากตระหนักถึงสิ่งนี้คุณอาจต้องการแนะนำขั้นตอนบางอย่างเช่น, multiply register1 with register(2 to 256). แต่เมื่อไหร่ที่คุณจะหยุดคุณมีคำแนะนำสำหรับชุดค่าผสมทั้งหมดหรือไม่?

ดังนั้นตัวเลขที่เรามีอยู่ในขณะนี้อาจเป็นการแลกเปลี่ยนที่ดีระหว่างค่าใช้จ่ายความซับซ้อนและประโยชน์


1
ฉันคิดว่าโปรแกรมmultiply Register1 with Register2 multiply Register1 with Register3นั้นไม่สมจริงอย่างมากเนื่องจากข้อมูลจะต้องมาจากทางตรงหรือทางอ้อมจากคอมพิวเตอร์ดังนั้นต้องลงทะเบียนและผลลัพธ์ต้องถูกนำไปใช้ที่ใดที่หนึ่งไม่ว่าโดยตรงหรือโดยอ้อมดังนั้นการลงทะเบียนต้องเก็บไว้ ในความเป็นจริงคอมไพเลอร์การปรับให้เหมาะสมที่เหมาะสมสำหรับภาษาระดับสูงจะ 'คลี่' ลูปของโปรแกรมแรกเพื่อสร้างบางอย่างเช่นโปรแกรมที่สองเพิ่มประสิทธิภาพการใช้งานรีจิสเตอร์เวลาแฝงของหน่วยความจำ
gbulmer

1
ไม่จำเป็นต้องมีmultiply register1 with register(2 to 256)คำแนะนำสำหรับวัตถุประสงค์พิเศษจำนวนมาก Pipelining ปรับปรุง throughput ของ CPU อย่างมีนัยสำคัญโดยเฉพาะอย่างยิ่งง่ายต่อการถอดรหัสและดำเนินการคำสั่ง ดังนั้นผลที่ได้จากคำสั่งที่ซับซ้อนสามารถทำได้หลายอย่างด้วยการใช้คำสั่งที่ง่ายกว่าและมีอัตราการใช้งานที่สูง การมีจำนวนรีจิสเตอร์ที่มากขึ้นช่วยให้คอมไพเลอร์สร้างคำสั่งที่เป็นอิสระจำนวนมาก (อันที่ไม่แชร์รีจิสเตอร์) ซึ่งสามารถทำให้เสร็จได้อย่างอิสระปรับปรุงการส่งผ่าน ตัวอย่างของคุณ = การลงทะเบียนมากกว่าดีกว่า
gbulmer

4

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

แน่นอนคุณสามารถใช้ทรานซิสเตอร์ได้มากขึ้น ปัญหาคือ: ความเร็วลดลง คุณต้องการฮาร์ดแวร์เพิ่มเติมเพื่อเลือกจากการลงทะเบียนเพิ่มเติม พื้นที่สำหรับลงทะเบียนไฟล์ใหญ่ขึ้น สิ่งที่ทำให้ช้าลง ดังนั้นด้วยเทคโนโลยีเดียวกันคุณอาจมี 16 รีจิสเตอร์และรันที่ 2,600 MHz หรือมี 32 รีจิสเตอร์และรันที่ 2,400 MHz ตอนนี้รีจิสเตอร์เพิ่มเติมต้องชดเชยความเร็วสัญญาณนาฬิกาที่ลดลงอย่างมาก


2

ปัจจัยอะไรที่มีผลต่อจำนวนการลงทะเบียน

- ลำดับชั้นของหน่วยความจำ

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

เทคโนโลยีที่แตกต่างกันมีความแตกต่างกัน

  1. เข้าถึงครั้ง
  2. ราคา
  3. ความหนาแน่น

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

เซลล์ไบนารี RAM แบบคงที่ถูกนำมาใช้โดยใช้วงจร 6-transistor ในขณะที่เซลล์ไบนารีแบบไดนามิก RAM จะดำเนินการโดยใช้ตัวเก็บประจุและทรานซิสเตอร์ เปรียบเทียบ SRAM และ DRAM

  • หน่วยความจำ SRAM นั้นเร็วกว่าหน่วยความจำ DRAM มาก [ไม่กี่รอบในการเข้าถึง SRAM เมื่อเทียบกับ DRAM]
  • วงจร SRAM ใช้พลังงานน้อยกว่า DRAM
  • DRAM ต้องการการรีเฟรชทุก ๆ บิตในหน่วยความจำเป็นระยะซึ่งแตกต่างจาก SRAM
  • SRAM มีราคาสูงกว่า DRAM
  • SRAM มีความหนาแน่นต่ำกว่า DRAM

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

- ความยาวคำสั่ง

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


2

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

ภายในแต่ละกลุ่มของคำแนะนำเดียวกันอาจมีรุ่นที่ทำงานในหน่วยความจำหรือลงทะเบียน นี่คือการจัดกลุ่มย่อยที่กำหนดจำนวนการลงทะเบียนที่โปรเซสเซอร์มีประสิทธิภาพ

เป็นตัวอย่างสมมุติ 8 บิตสมมติว่า$Axคำแนะนำอาจเป็นADDคำแนะนำและ$Cxอาจเป็นXORคำแนะนำ ด้วยการออกแบบนี้มีเพียงสี่บิตที่เหลือเพื่อกำหนดตัวถูกดำเนินการ!

  • หนึ่งอาจมีเพียงสี่ลงทะเบียนวัตถุประสงค์ทั่วไปและใช้สองบิตเพื่อกำหนดหนึ่งและสองบิตเพื่อกำหนดอื่น ๆ
  • หรืออาจใช้บิตแรกเพื่อแยกแยะความแตกต่างของ "พิเศษ" และอีก 3 บิตเพื่อกำหนดว่าการลงทะเบียนใดแปดตัวที่จะทำงานกับตัวสะสม ( $x0อาจเป็นตัวสะสมเอง)
  • หรือหนึ่งอาจมีจำนวนการลงทะเบียนมากกว่านี้ - แต่จากนั้น จำกัด การลงทะเบียนที่สามารถเข้าถึงคำแนะนำได้

แน่นอนเรามีชุดคำสั่ง 8 บิตที่ผ่านมา แต่ถึงกระนั้นตรรกะนี้ช่วยกำหนดชุดลงทะเบียนในอดีต - มันจะทำต่อไปในอนาคต

แก้ไข (ตามที่ร้องขอ)

กล่าวว่าด้านบนสี่บิตมีการเรียนการสอน: ADD, SUB, XOR, MOV, CMPฯลฯ มีความเป็นไปได้ 16 ที่นี่มี แล้วสำหรับคำแนะนำเหล่านั้นที่ลงทะเบียนเพื่อลงทะเบียนทำให้รู้สึก (เช่นADD Rx,Ry) คุณจะต้องระบุและRx Ryพูดสองบิตต่อไปมีการและสองคนสุดท้ายมีการx yดังนั้น:

ADD R1, R2  =>  'ADD' + 'R1' + 'R2' => $A0 + $04 + $02

ด้วยสองบิตเท่านั้นในการกำหนดรีจิสเตอร์เช่นนี้คุณมีที่ว่างสำหรับการลงทะเบียนทั้งหมดสี่รายการ!

นอกจากนี้คุณจะทราบว่าชุดค่าผสมของการลงทะเบียนบางรายการไม่สมเหตุสมผล ตัวอย่างเช่นMOV Rx, Rx(ไม่ทำอะไรเลย) และSUB Rx, Rx(สร้างเสมอ0) สิ่งเหล่านี้อาจกลายเป็นคำแนะนำกรณีพิเศษ:

  1. SUB Rx, Rxอาจกลายเป็นNOT Rx- คำสั่งตัวถูกดำเนินการเดียว
  2. MOV Rx, Rxอาจจะกลายเป็นคำสั่งที่ใช้ไบต์ที่สองเป็นค่าทันทีตีความว่าเป็นMOVMOV Rx, #$yy

ด้วยวิธีนี้คุณสามารถ "เล่น" ด้วยแผนที่คำแนะนำเติมลงในรูสำหรับคำแนะนำที่ไร้ประโยชน์หรือ - ไร้ความหมายเพื่อจัดเตรียมชุดคำสั่งที่ใหญ่กว่าสำหรับโปรแกรมเมอร์ แต่ท้ายที่สุดชุดคำสั่งจะกำหนดชุดรีจิสเตอร์


ฉันยังสับสนอยู่คุณสามารถอธิบายได้ว่าเหลือเพียง 4 บิตสำหรับตัวถูกดำเนินการได้อย่างไร
Darshan Chaudhary

ตรวจสอบคำตอบที่อัปเดตของฉัน
John Burger

1
IMHO คำตอบนี้จะได้รับการปรับปรุงอย่างมีนัยสำคัญโดยการย้าย " ตัวอย่างสมมุติสมมติชุดคำสั่ง 8 บิต " ไปยังจุดเริ่มต้นของคำถาม ฉันเสียเวลาพยายามทำความเข้าใจมันสรุปว่ามันสมเหตุสมผลสำหรับการเรียนการสอนความยาว 8 บิตแบบคงที่จากนั้นอ่านต่อเพื่อค้นหาว่าเป็นกรณีนี้ IMHO ชุดของชุดคำสั่งนั้นไม่เกี่ยวข้องมากในบริบทของคำถาม พื้นที่ที่อยู่ทั้งหมดของมันอาจเป็นแรมแบบคู่ที่แน่นหนา ฉันคิดว่าส่วนที่เริ่มต้นด้วย " ชุดค่าผสมของการลงทะเบียนบางรายการไม่สมเหตุสมผล ... " ไม่เกี่ยวข้องกับคำถามและอาจถูกลบได้ $ 0.02 ของฉัน
gbulmer

-2

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

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