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


23

เพิ่งผ่านภาพนิ่งบางส่วนและสังเกตว่าแคช L1 (อย่างน้อยใน CPU ของ Intel) แยกความแตกต่างระหว่างข้อมูลและแคชคำสั่งฉันอยากจะรู้ว่าทำไมนี่คือ ..


คำตอบ:


28

มีหลายเหตุผลจริง ๆ

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

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

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

ประการที่สี่มันสามารถประหยัดพลังงาน ในขณะที่คุณต้องการรักษาพลังงานให้กับเซลล์หน่วยความจำด้วยตนเองเพื่อรักษาเนื้อหาของตัวประมวลผลบางตัวสามารถ / สามารถปิดวงจรที่เกี่ยวข้องบางส่วน (ตัวถอดรหัสและอื่น ๆ ) เมื่อไม่ได้ใช้งาน ด้วยการแยกแคชพวกเขาสามารถเปิดวงจรเหล่านี้แยกต่างหากสำหรับคำแนะนำและข้อมูลเพิ่มโอกาสของวงจรที่ยังไม่ได้รับพลังงานในระหว่างรอบใด ๆ (ฉันไม่แน่ใจว่าโปรเซสเซอร์ x86 ตัวใดที่ทำสิ่งนี้ - AFAIK เป็น ARM สิ่ง).


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

1
@gablin: ในขณะที่เป็นจริงความแตกต่างในรูปแบบเหล่านั้นมักจะชอบแคชแบบรวม ในวงแคบ ๆ อย่างที่คุณพูดถึงแคชคำสั่งส่วนใหญ่ไม่ได้ทำงาน แคชรวมจะทำให้ขนาดของแคชข้อมูลเพิ่มขึ้นเป็นสองเท่าในช่วงเวลาของการวนซ้ำ
Jerry Coffin

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

@ Donal Fellows: ใช่จริง ๆ ฉันทราบดีว่าการแคชเร็วทำได้อย่างไรและทำไมพวกเขาจึงเปลี่ยนเป็นแคชแบบแยก
Jerry Coffin

5

เช่นเดียวกับอสังหาริมทรัพย์การใช้แคชนั้นขับเคลื่อนด้วยสามสิ่ง: สถานที่ตั้งสถานที่ตั้ง จุดรวมของการแคชคือว่าโปรแกรมส่วนใหญ่มีรูปแบบของตำแหน่ง: ถ้าพวกเขาเข้าถึง byte 1111111, byte ต่อไปที่พวกเขาจะเข้าถึงนั้นน่าจะเป็น 1111110 หรือ 1111112 และไม่มากถึง 9999999 ไบต์อย่างไรก็ตามโปรแกรมส่วนใหญ่จะมีความแตกต่างกันมาก รูปแบบของสถานที่สำหรับคำแนะนำและข้อมูลของพวกเขา ซึ่งหมายความว่าไม่น่าเป็นไปได้ที่คำแนะนำและข้อมูลจะสามารถแชร์แคชได้อย่างมีประสิทธิภาพ เนื่องจากคำแนะนำและข้อมูลไม่จำเป็นต้องอยู่ใกล้กันในหน่วยความจำ การเข้าถึงข้อมูลจะทำให้คำสั่งชนจากแคชและคำแนะนำในการโหลดจะกระทบข้อมูลจากแคช

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