เหตุใดหน่วยความจำแคช CPU จึงเร็ว


58

อะไรทำให้หน่วยความจำแคช CPU เร็วกว่าหน่วยความจำหลักมาก ฉันเห็นประโยชน์บางอย่างในระบบแคชแบบทำเป็นชั้น ทำให้รู้สึกว่าแคชที่เล็กลงนั้นเร็วกว่าการค้นหา แต่ต้องมีมากกว่านี้


2
หน่วยความจำหลักหมายถึงอะไร
marcocs

1
@marcocs แก้ไขเพื่อความชัดเจน ฉันหมายถึงหน่วยความจำแคช CPU และหน่วยความจำระบบหลักเช่น dimms ที่ถอดออกได้บนเมนบอร์ดส่วนใหญ่
ConditionRacer


2
@ ratchetfreak เอ่อ ... OP ค่อนข้างชัดเจนว่าขอสาเหตุใกล้เคียงไม่ใช่สาเหตุสุดท้าย
Kyle Strand

1
ว้าวฉันไม่คิดว่าฉันจะใช้หลักสูตรวิศวกรรมคอมพิวเตอร์ของฉัน คำตอบที่ยอมรับไม่ใช่คำตอบที่แท้จริง เป็นเพราะแคช CPU ทำงานที่อัตรานาฬิกาที่สูงกว่ามาก (อัตรานาฬิกา CPU ประมาณ 4GHz) ในขณะที่หน่วยความจำหลักทำงานที่อัตรานาฬิกาบัส (ประมาณ 1600MHz) ไม่เพียงแค่นั้น แต่แคชของ CPU สามารถอ่านได้ในรอบสัญญาณนาฬิกา 4 รอบ แต่ RAM ระบบอาจใช้เวลา 100 รอบนาฬิการะบบ นอกจากนี้ RAM ของระบบยังมีข้อขัดแย้งกับอุปกรณ์ต่อพ่วงอื่น ๆ เช่นดิสก์หรือเครือข่ายในขณะที่ CPU แคชทุ่มเท ยิ่งลวดยิ่งนานเท่าไหร่ก็ยิ่งทำให้อัตราสัญญาณนาฬิกาทำงานช้าลงเท่านั้น tinyurl.com/zkdsstd
Chloe

คำตอบ:


115

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

ในกรณีของแคชบนฮาร์ดไดรฟ์จะเร็วกว่าเพราะอยู่ในหน่วยความจำโซลิดสเตตและไม่ได้อยู่บนจานหมุน

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

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

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

การอ่านแคชเพิ่มเติม
(การคำนวณ) บน Wikipedia


29
ฉันคิดว่านี่เป็นคำตอบที่ดี อย่างไรก็ตามอาจมีมูลค่าเพิ่มที่ยังมีลำดับชั้นของค่าใช้จ่ายแคช: พื้นที่เก็บข้อมูลเครือข่ายราคาถูกกว่าฮาร์ดไดรฟ์ภายในเครื่องซึ่งมีราคาถูกกว่า RAM ซึ่งราคาถูกกว่าแคชแคชซีพียู ถ้าไม่ใช่สำหรับสิ่งนี้เราแค่สร้างซีพียูที่มีหน่วยความจำ 120GB บนชิปและทำได้ด้วย
ชาร์ลส์อี. อนุญาตมี. ค.

1
@ConditionRacer: เหตุผลเดียวกัน L1 นั้นเร็วกว่า แต่ก็มีราคาแพงกว่าดังนั้นพวกมันจะให้คุณ L1 แพงหน่อยและอีกน้อยที่แพงกว่า แต่ช้ากว่า L2 ดูเพิ่มเติมที่stackoverflow.com/questions/3699582/…
Robert Harvey

9
"ทำไม L1 ถึงเร็วกว่า L2" - คำถามจะกลายเป็นหัวข้อสำหรับโปรแกรมเมอร์และควรถูกถามใน Electronics.SE
mattnz

5
@ConditionRacer IIRC เป็นเทคโนโลยีที่ใช้ในการสร้างหน่วยความจำ ฉันคิดว่า L2 เป็น DRAM บนชิปในขณะที่ L1 คือ SRAM หรืออะไรทำนองนั้น มากราคาแพงกว่า แต่ได้เร็วขึ้นมาก เป็นเวลากว่าทศวรรษแล้วที่ฉันทำงานในการออกแบบซีพียู…
Donal Fellows

4
@ CharlesE.Grant: ในขณะที่ลำดับชั้นค่าใช้จ่ายเป็นตัวอย่างที่ดีมีเหตุผลอีกประการหนึ่งที่เราไม่มีแคช on-chip 120 GB: การกำหนดที่อยู่หน่วยความจำขนาดใหญ่ต้องการที่อยู่ที่ใหญ่กว่าดังนั้นทั้งคำสั่งที่ใหญ่กว่า ดังนั้นเพื่อให้เร็วที่สุดจำนวนการลงทะเบียนจำเป็นต้องมีขนาดค่อนข้างเล็ก แน่นอนว่าหนึ่งสามารถมีหน่วยความจำบนชิปนอกเหนือจากการลงทะเบียน แต่ระดับที่เร็วที่สุดจะต้องมีขนาดเล็กมิฉะนั้นมันจะไม่เร็วอย่างนั้นอีกต่อไป
vsz

33

มันเร็วกว่าเพราะทั้งคู่เข้าใกล้และเป็น SRAM ไม่ใช่ DRAM

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

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

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


1
SRAM นั้นใช้พลังงานมากขึ้นต่อบิตดังนั้นคุณต้องเพิ่มตัวหม้อน้ำเข้าไปและสิ่งใดก็ตามที่ใช้พลังงานจากแบตเตอรี่จะต้องทนทุกข์ทรมาน
9000

1
ไม่ต้องพูดถึงความจริงที่ว่าการทำให้ SRAM ใหญ่ขึ้นจะทำให้มันช้าลง
Darkhogg

ตกลงพลังมากขึ้นและช้าลงเมื่อเทียบกับ sram อื่น ๆ ฉันคิดว่ามันเป็น 4 ทรานซิสเตอร์ต่อบิตสำหรับ sram และ 1 ต่อบิตสำหรับ dram dram อาศัยความสามารถใน fet ซึ่ง sram อาศัยตรรกะแบบเก่าที่ดี ดังนั้นคุณต้องจ่ายพลังงานให้กับทรานซิสเตอร์เหล่านั้นตลอดเวลาและไม่ใช่เพียงแค่ชาร์จประจุเป็นระยะ
old_timer

4
SRAM ในแคชโดยทั่วไปคือ 6T ไม่ใช่ 4T นอกจากนี้ SRAM (ตัวแปร 6T อย่างแน่นอน) นั้นประหยัดพลังงานมากกว่า การดึงพลังที่แท้จริงใน DRAM คือวงจรการรีเฟรชและ SRAM ไม่ต้องการสิ่งนั้น ทรานซิสเตอร์ SRAM ดึงพลังงานเมื่อทำการสลับตัวเก็บประจุ DRAM รั่วไหลตลอดเวลา หากคุณเปลี่ยนฝา DRAM ที่รั่วออกมาคุณจะต้องจบด้วย EEPROM แต่ก็ไม่เร็ว: ถ้ามันยากสำหรับประจุที่จะรั่วไหลออกไป
MSalters

@dwelch CMOS FET ไม่ระบายพลังงานหากอยู่ในสถานะเปิดหรือปิดดังนั้นข้อโต้แย้งเกี่ยวกับการใช้พลังงานจึงไม่ถูกต้อง นอกจากนี้ก็เปลี่ยนตรรกะ CMOS ซึ่งทำให้ซีพียูท่อระบายน้ำส่วนใหญ่ของการใช้พลังงานของพวกเขา - ยอดเขาในปัจจุบันในรัฐกลาง (ไม่ใช่ที่ 1 และที่ไม่ใช่ 0) เพื่อให้สถานการณ์เป็นสิ่งที่ตรงกันข้ามกับสิ่งที่คุณพูด :)
Ruslan

21

สิ่งหนึ่งที่ควรกล่าวถึงอย่างชัดเจนคือผลกระทบของความเร็วแสง ในวิดีโอนี้ Grace Hopperแสดงชิ้นส่วนของลวดยาวประมาณหนึ่งฟุตซึ่งเป็นระยะทางที่สัญญาณไฟฟ้าสามารถเดินทางในหนึ่งนาโนวินาที * หาก CPU ทำงานที่ 3GHz นั่นหมายถึงระยะทาง 4 "ต่อรอบสัญญาณนาฬิกานี่เป็นข้อ จำกัด ทางกายภาพอย่างหนักเกี่ยวกับความเร็วในการเข้าถึงหน่วยความจำนี่เป็นส่วนใหญ่ของสาเหตุที่อยู่ใกล้กับ CPU (เนื่องจากแคช L1) อนุญาต หน่วยความจำให้เร็วขึ้น

EDIT * จริง ๆ แล้วแสงเดินทางไกลแค่ไหนในสุญญากาศระยะทางผ่านทองแดง / ซิลิคอนนั้นน้อยกว่า


2
ข้อ จำกัด อย่างหนักสำหรับทองแดง นี่เป็นจุดที่ดี แต่ฉันไม่ได้พิจารณาว่าตัวประมวลผลที่ทันสมัยรวดเร็วน่าขันเพียงใด
ConditionRacer

@ConditionRacer ฉันเพิ่งเพิ่มการแก้ไข 11.8 นิ้วเป็นแสงในสุญญากาศ
Matthew Finlay

2
คุณต้องลดจำนวนนั้นลงครึ่งหนึ่งเนื่องจากคุณต้องเดินทางไปกลับเพื่อเรียกคืนหน่วยความจำ ดังนั้นมันจึงเป็นเพียง 5cm ไม่ 10cm ต่อวงจรของความล่าช้าในสูญญากาศ
CodesInChaos

2
ความเร็วของแสงคือเหตุผลที่นาฬิการถบัสหน่วยความจำหลักหยุดได้เร็วขึ้นเมื่อหลายปีที่ผ่านมา (2000ish?) มันไม่ได้เป็นผลโดยตรง - มันจะทำอย่างไรกับ CMOS สัญญาณตรรกะไม่เป็นตารางคลื่นที่สมบูรณ์แบบอีกต่อไปที่ความถี่บัส - แต่แสดงให้เห็นว่า โดดเด่นในวิชาคณิตศาสตร์
zwol

5

คำตอบอื่น ๆ ครอบคลุมบิตที่เกี่ยวข้องทั้งหมดแล้ว: ท้องที่ (และค่าโอนข้อมูลที่เกี่ยวข้องความกว้างบัสและนาฬิกาเป็นต้น) ความเร็วของแสง (อีกครั้งที่เกี่ยวข้องกับการถ่ายโอนค่าใช้จ่ายและความกว้างและปริมาณงานบัส); เทคโนโลยีหน่วยความจำที่แตกต่างกัน (SRAM เทียบกับ DRAM) ทั้งหมดนี้เห็นในแง่ของค่าใช้จ่ายสมดุลประสิทธิภาพ /

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

มีคำถามและคำตอบที่ยอดเยี่ยมในประเด็นนี้ทางอิเล็กทรอนิกส์ SE

จากคำตอบดูเหมือนว่าจุดที่จะเน้นคือ: ตรรกะที่ดำเนินการทั้งหมดที่จำเป็นสำหรับการอ่านแคชไม่ใช่เรื่องง่าย (โดยเฉพาะถ้าแคชมีการตั้งค่าเชื่อมโยงเหมือนแคชส่วนใหญ่ในปัจจุบัน) มันต้องมีประตูและตรรกะ ดังนั้นแม้ว่าเราจะออกกฎราคาและพื้นที่ตาย

หากใครบางคนพยายามที่จะใช้แคช L1 ที่มีขนาดใหญ่อย่างน่าขันตรรกะที่ทำหน้าที่ดำเนินการที่จำเป็นทั้งหมดสำหรับการอ่านแคชก็จะกลายเป็นเรื่องใหญ่เช่นกัน ในบางจุดความล่าช้าในการแพร่กระจายผ่านตรรกะนี้ทั้งหมดจะยาวเกินไปและการดำเนินการที่ใช้เพียงรอบนาฬิกาเดียวก่อนจะต้องแบ่งออกเป็นหลายรอบนาฬิกา สิ่งนี้จะเพิ่มความล่าช้า


5

มีจุดดีมากมายในคำตอบอื่น ๆ แต่มีปัจจัยหนึ่งที่ขาดหายไปนั่นคือเวลาถอดรหัสที่อยู่

ต่อไปนี้เป็นข้อผิดพลาดที่ใหญ่หลวงของวิธีการถอดรหัสที่อยู่หน่วยความจำ แต่ให้ความคิดที่ดีว่าเหตุใดชิป DRAM ขนาดใหญ่จึงค่อนข้างช้า

เมื่อโปรเซสเซอร์ต้องการเข้าถึงหน่วยความจำจะส่งคำสั่งไปยังชิปหน่วยความจำเพื่อเลือกคำเฉพาะที่ต้องการใช้ คำสั่งนี้เรียกว่าการเลือกที่อยู่คอลัมน์ (เราจะไม่สนใจที่อยู่แถวในขณะนี้) ตอนนี้ชิพหน่วยความจำต้องเปิดใช้งานคอลัมน์ที่ร้องขอซึ่งทำได้โดยการส่งที่อยู่ลงไปตามลำดับของประตูตรรกะเพื่อทำการเขียนเดี่ยวที่เชื่อมต่อกับเซลล์ทั้งหมดในคอลัมน์ จะมีการหน่วงเวลาจำนวนหนึ่งสำหรับที่อยู่แต่ละบิตจนกว่าผลลัพธ์จะออกมาอีกด้านหนึ่ง สิ่งนี้เรียกว่า CAS เวลาแฝงของหน่วยความจำ เนื่องจากบิตเหล่านั้นจะต้องได้รับการตรวจสอบตามลำดับกระบวนการนี้ใช้เวลานานกว่าวงจรประมวลผล (ซึ่งโดยปกติจะมีทรานซิสเตอร์เพียงไม่กี่ตัวเท่านั้นที่จะรอลำดับ) นอกจากนี้ยังใช้เวลานานกว่ารอบบัส (ซึ่งโดยปกติจะช้ากว่ารอบโปรเซสเซอร์เล็กน้อย) คำสั่ง CAS บนชิปหน่วยความจำทั่วไปมีแนวโน้มที่จะเรียงตามลำดับของ 5ns (IIRC - เป็นเวลานานแล้วที่ฉันดูการกำหนดเวลา) ซึ่งมากกว่าลำดับขนาดที่ช้ากว่ารอบตัวประมวลผล

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

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


-2

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

การถ่ายโอนข้อมูลจากดิสก์ -> หน่วยความจำหลัก (RAM) (ที่เก็บข้อมูลชั่วคราว) -> แคช CPU (ที่เก็บข้อมูลชั่วคราวขนาดเล็กใกล้กับ CPU สำหรับข้อมูลที่เข้าถึงบ่อย) -> CPU (กำลังประมวลผล)

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

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

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

การอ้างอิง: หน่วยความจำคอมพิวเตอร์ทำงานอย่างไร


"ปรัชญาระบบปฏิบัติการคือ ... " - นี่เป็นเพียงความคิดเห็นของคุณหรือคุณสามารถสำรองข้อมูลได้หรือไม่
ริ้น

ได้รับการสอนเกี่ยวกับเรื่องนี้ในขณะที่เรียน Unix โดย Maurice Bach น่าเสียดายที่ไม่มีเอกสารสนับสนุน แก้ไข ..
roshan4074

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