เพิ่งผ่านภาพนิ่งบางส่วนและสังเกตว่าแคช L1 (อย่างน้อยใน CPU ของ Intel) แยกความแตกต่างระหว่างข้อมูลและแคชคำสั่งฉันอยากจะรู้ว่าทำไมนี่คือ ..
เพิ่งผ่านภาพนิ่งบางส่วนและสังเกตว่าแคช L1 (อย่างน้อยใน CPU ของ Intel) แยกความแตกต่างระหว่างข้อมูลและแคชคำสั่งฉันอยากจะรู้ว่าทำไมนี่คือ ..
คำตอบ:
มีหลายเหตุผลจริง ๆ
ก่อนอื่นข้อมูลที่เก็บไว้ในแคชคำสั่งนั้นค่อนข้างแตกต่างจากที่เก็บไว้ในแคชข้อมูล - พร้อมกับคำแนะนำเองมีคำอธิบายประกอบสำหรับสิ่งต่าง ๆ เช่นที่คำสั่งถัดไปเริ่มต้นเพื่อช่วยในการถอดรหัส โปรเซสเซอร์บางตัว (เช่น Netburst, SPARC บางตัว) ใช้ "แคชการติดตาม" ซึ่งเก็บผลลัพธ์ของการถอดรหัสคำสั่งแทนที่จะเก็บคำสั่งดั้งเดิมในรูปแบบที่เข้ารหัส
ประการที่สองมันลดความซับซ้อนของวงจรบิต - แคชข้อมูลต้องจัดการกับการอ่านและการเขียน แต่แคชคำสั่งเกี่ยวข้องกับการอ่านเท่านั้น (นี่เป็นส่วนหนึ่งของสาเหตุที่รหัสการแก้ไขด้วยตนเองมีราคาแพงมาก - แทนที่จะเขียนทับข้อมูลในแคชคำสั่งโดยตรงการเขียนจะผ่านแคชข้อมูลไปยังแคช L2 จากนั้นบรรทัดในแคชคำสั่งจะไม่ถูกต้องและอีกครั้ง - โหลดจาก L2)
ประการที่สามมันเพิ่มแบนด์วิดท์: โปรเซสเซอร์ที่ทันสมัยส่วนใหญ่สามารถอ่านข้อมูลจากแคชคำสั่งและแคชข้อมูลพร้อมกัน ส่วนใหญ่ยังมีคิวที่ "ทางเข้า" ไปยังแคชดังนั้นพวกเขาจึงสามารถอ่านสองครั้งและเขียนหนึ่งครั้งในรอบใดก็ตาม
ประการที่สี่มันสามารถประหยัดพลังงาน ในขณะที่คุณต้องการรักษาพลังงานให้กับเซลล์หน่วยความจำด้วยตนเองเพื่อรักษาเนื้อหาของตัวประมวลผลบางตัวสามารถ / สามารถปิดวงจรที่เกี่ยวข้องบางส่วน (ตัวถอดรหัสและอื่น ๆ ) เมื่อไม่ได้ใช้งาน ด้วยการแยกแคชพวกเขาสามารถเปิดวงจรเหล่านี้แยกต่างหากสำหรับคำแนะนำและข้อมูลเพิ่มโอกาสของวงจรที่ยังไม่ได้รับพลังงานในระหว่างรอบใด ๆ (ฉันไม่แน่ใจว่าโปรเซสเซอร์ x86 ตัวใดที่ทำสิ่งนี้ - AFAIK เป็น ARM สิ่ง).
เช่นเดียวกับอสังหาริมทรัพย์การใช้แคชนั้นขับเคลื่อนด้วยสามสิ่ง: สถานที่ตั้งสถานที่ตั้ง จุดรวมของการแคชคือว่าโปรแกรมส่วนใหญ่มีรูปแบบของตำแหน่ง: ถ้าพวกเขาเข้าถึง byte 1111111, byte ต่อไปที่พวกเขาจะเข้าถึงนั้นน่าจะเป็น 1111110 หรือ 1111112 และไม่มากถึง 9999999 ไบต์อย่างไรก็ตามโปรแกรมส่วนใหญ่จะมีความแตกต่างกันมาก รูปแบบของสถานที่สำหรับคำแนะนำและข้อมูลของพวกเขา ซึ่งหมายความว่าไม่น่าเป็นไปได้ที่คำแนะนำและข้อมูลจะสามารถแชร์แคชได้อย่างมีประสิทธิภาพ เนื่องจากคำแนะนำและข้อมูลไม่จำเป็นต้องอยู่ใกล้กันในหน่วยความจำ การเข้าถึงข้อมูลจะทำให้คำสั่งชนจากแคชและคำแนะนำในการโหลดจะกระทบข้อมูลจากแคช