Chapter 4 Cache Memory Computer Memory System Overview Cache Memory Principles Elements of Cache Design
ประเด็นสำคัญ ในระดับโครงสร้างลำดับชั้นของหน่วยความจำ ถ้ามองลงมาสู่ระดับล่างพบ หน่วยความจำที่มีมูลค่าราคาต่อบิตต่ำลงมาเรื่อยๆ มีขนาดหน่วยความจำเพิ่มขึ้น แต่ใช้ระยะเวลาในการอ่านหรือบันทึกข้อมูลสูงขึ้น ในความเป็นจริงเราไม่สามารถใช้หน่วยความจำระดับบนได้อย่างเดียวเพราะมีราคาสูงส่วนใหญ่จึงใช้วิธีการรอมชอม ด้วยการใช้หน่วยความจำระดับบนน้อย และใช้หน่วยความจำระดับล่างมากขึ้น เพื่อให้เกิดความสมดุลระหว่างประสิทธิภาพและราคา โดยทั่วไปตำแหน่งการอ้างอิงข้อมูลในหน่วยความจำหลักโดยโปรเซสเซอร์นั้นมักจะเป็นตำแหน่งเดิม ดังนั้นหน่วยความจำ cache มักจะคัดลอกข้อมูลในหน่วยความจำหลัก ซึ่งถ้า Cache ได้รับการออกแบบเป็นอย่างดีแล้วเวลาส่วนใหญ่โปรเซสเซอร์ก็จะเรียกใช้ข้อมูลที่อยู่ใน Cache เป็นส่วนมาก
Characteristics ที่เกี่ยวกับ Computer Memory System Location (สถานที่ที่หน่วยความจำอยู่) Internal (main) (หน่วยความจำภายในเครื่องคอมพิวเตอร์)เช่นจำพวก Register , Main Memory,Cache External(secondary) (ติดต่อโดยผ่านหน่วยความคุม I/O)เช่นจำพวก Harddisk, FFD Capacity (หน่วยความจำภายในมักใช้หน่วยเป็น Bit หรือ Word) Word size เป็นขนาดของหน่วยความจำ โดยทั่วไปถ้าภายในเป็น bit ถ้าภายนอกเป็น byte โดยปกติ 1 word มีขนาด 8,16 หรือ 32 Number of words Unit of transfer จำนวนของ bit ที่ อ่านหรือเขียนใน memory ณ หนึ่งหน่วยเวลา
Characteristics ที่เกี่ยวกับ Computer Memory System Access method เป็นวิธีการเข้าถึง Memory ด้วยวิธีต่างๆ เช่น Sequential access(วิธีการเข้าถึง Mem แบบเรียงลำดับ)เช่น หน่วยบันทึกข้อมูลแบบเทปแม่เหล็ก Direct access(เข้าถึงแบบตรง จะเปลี่ยนตำแหน่งจากตำแหน่งปัจจุบันไปเป็นตำแหน่งที่ต้องการ ทำให้ระยะเวลาที่ใช้ในการเข้าถึงหน่วยความจำแต่ละครั้งอาจจะแตกต่างกัน เช่น disk) Random access การเข้าถึงหน่วยความจำแบบไม่มีลำดับ ระยะเวลาในการเข้าถึงเป็นอิสระ ดังนั้นจึงสามารถเลือกตำแหน่งใดๆ ในหน่วยความจำโดยไม่ต้องเรียงลำดับใด และสามารถเข้าถึงตำแหน่งนั้นได้โดยตรงเช่น Main Memory Associative หรือความเกี่ยวข้อง จัดว่าเป็นการเข้าถึงหน่วยความจำแบบ random access อย่างหนึ่งที่มีการเปรียบเทียบข้อมูลบิตจำนวนหนี่ง เช่น Cache Memory
Characteristics ที่เกี่ยวกับ Computer Memory System Performance วิธีการวัดประสิทธิภาพ Access time ระยะเวลาในการเข้าถึงหน่วยความจำ Memory cycle time ระยะเวลาในการเข้าถึงหน่วยความจำรวมกับระยะเวลาอื่นๆ ที่จำเป็นต้องใช้ Transfer rate อัตราการถ่ายเทข้อมูลเข้าหรือออกจากหน่วยความจำ
Characteristics ที่เกี่ยวกับ Computer Memory System Physical type แบ่งออกตามลักษระทางกายภาพ - Semiconductor เช่น RAM - Magnetic เช่น Disk & Tape - Optical เช่น CD & DVD
Memory Hierarchy (ลำดับของหน่วยความจำ) Registers In CPU Internal or Main memory May include one or more levels of cache “RAM” External memory Backing store
ปัจจัยที่เกี่ยวข้องกับหน่วยความจำ How much? (Size) Capacity How fast? (Speed) Time is money How expensive? (Prize) องค์ประกอบที่สำคัญทั้ง 3 ประการคือ ราคา ปริมาณ และ ความเร็ว มีความสัมพันธ์กันดังนี้ - การเพิ่มความเร็วในการเข้าถึงข้อมูล จะทำให้หน่วยความจำราคาสูงขึ้น - ปริมาณหน่วยความจำเพิ่มขึ้น จะทำให้ราคาต่อหน่วยลดลง - ปริมาณหน่วยความจำเพิ่มขึ้น จะทำให้เสียเวลาในการเข้าถึงหน่วยความจำมากขึ้น
Memory Hierarchy - Diagram
ลำดับชั้นของ Memory (เรียงจากเร็วที่สุดไปช้าที่สุด) Registers L1 Cache L2 Cache Main memory จำพวก Ram , Rom Disk cache - ระหว่าง main memory กับ Megnetic disk ควรมี Disk cache เพื่อที่จะทำงานเร็วขึ้น Disk Optical Tape
Cache เนื่องจาก Main memory หรือ RAM (Random Access Memory) นั้นตามปกติจะมีความเร็วต่ำกว่า CPU อยู่มาก ดังนั้นถ้าใช้เฉพาะ Register กับ RAM ก็จะมีผลทำให้คอมพิวเตอร์ทำงานได้ช้า จึงมีการวางหน่วยความจำ Cache ซึ่งมีความเร็วกว่า RAM แต่ราคาแพงกว่า คั่นระหว่าง CPU กับ Main memory
Cache มี ความจุต่ำแต่ความเร็วสูง ทำงานอยู่ระหว่าง normal main memory and CPU อาจจะสร้างภายในตัว CPU เองหรืออุปกรณ์ภายนอกที่มีความเร็วสูง
ตัวอย่างของการมี cache ความเร็ว cache = 10 ns ความเร็ว memory = 100 ns ถ้าไม่มี Cache ถ้า 1 คำสั่งใช้เวลา 100ns สมมุติมี 100 คำสั่งจะใช้เวลา 100 * 100ns = 10000ns ถ้ามี Cache จะได้ (10 * 10ns(ความเร็ว cache)) + (10 * 100ns(ความเร็วของ Memory)) = 1100 ซึ่งจะเห็นว่าเร็วกว่ากันประมาณ 10 เท่า
Cache operation (ขั้นตอนการทำงาน)- overview CPU ต้องการข้อมูลใน Main Memory Check ที่ cache ว่าข้อมูลที่ต้องการอยู่ใน cache หรือไม่ If มี ก็ส่งข้อมูลให้ CPU If ไม่มี, ก็ทำการอ่านข้อมูล จาก main memory ไปยัง cache (อ่านเป็น block) Then deliver from cache to CPU
Cache operation (ขั้นตอนการทำงาน)- สรุป โดยในระหว่างการทำงานของคอมพิวเตอร์จะมีการอ่านโปรแกรมและข้อมูลบางส่วนจาก Main memory มาเก็บไว้ใน Cache เมื่อ CPU อ่านบาง word จาก Memory ก็จะมีการตรวจสอบว่า word ที่ต้องการนั้นอยู่ใน Cache หรือไม่ ถ้าอยู่ก็สามารถอ่านไปได้อย่างรวดเร็ว แต่ถ้าไม่มีก็จะมีการอ่านทั้ง Block ที่มี word ที่ต้องการนั้นจาก Main memory เข้ามาวางไว้ใน Cache และส่ง Word นั้นให้ CPU โดยคาดว่าต่อไป CPU น่าจะอ่าน word อื่น ๆ ใน Block เดียวกันนั้น อัตราการที่ CPU สามารถพบ word ที่ต้องการพบใน Cache เรียกว่า Hit Rate หรือ Cache Hit อัตราการที่ CPU ไม่สามารถพบเรียกว่า Miss Rate หรือ Cache Miss ดังนั้นคอมพิวเตอร์ที่ออกแบบระบบ Cache ดีก็จะทำให้มี Hit Rate สูง มีผลทำให้คอมพิวเตอร์สามารถทำงานได้เร็วขึ้น
- ถ้าใช้ Cache ขนาดใหญ่จะได้อัตรา Cache hit สูงแต่วงจรจะช้าและราคาแพง Size Cost ราคา More cache is expensive Speed ความเร็ว More cache is faster (up to a point) Checking cache for data takes time - ถ้าใช้ Cache ขนาดเล็ก ราคาก็จะถูกและความเร็วสูงกว่า แต่จะได้อัตรา Cache hit ต่ำ - ถ้าใช้ Cache ขนาดใหญ่จะได้อัตรา Cache hit สูงแต่วงจรจะช้าและราคาแพง - โดยทั่วไปถือว่าขนาดที่พอดีอยู่ระหว่าง 1 K – 512 KWords
Cache Design (ปัจจัยในการสร้าง Cache) Size (ขนาดของ cache) Mapping Function Replacement Algorithm Write Policy Block Size Number of Caches
Size (ขนาดของ cache) โดยทั่วไปนักออกแบบต้องการให้ cache มีขนาดเพียงพอที่จะทำให้ราคาเฉลี่ยต่อบิตนั้นใกล้เคียงกับราคาของหน่วยความจำหลัก และต้องการให้มีขนาดใหญ่เพียงพอ เพื่อให้ค่าเฉลี่ยของเวลาในการเข้าถึงข้อมูลใกล้เคียงกับระยะเวลาในการเข้าถึงข้อมูลของ cache ทำไมถึงไม่สร้าง cache ขนาดใหญ่ เพื่อความรวดเร็ว? คือขนาดที่ใหญ่ขึ้นของ Cache จะไปเพิ่มจำนวนของ gate ที่เกี่ยวข้องกับการค้นหาตำแหน่งข้อมูลใน Cache ทำให้ Cache ทำงานได้ช้าลง เนื้อที่บนแผงวงจรก็เป็นส่วนหนึ่งที่บังคับขนาดของ Cache ให้มีขนาดจำกัด
Mapping Function - Cache จะมีขนาดเล็กว่า main memory ดังนั้นจะต้องมีอัลกอริทึม ที่ต้อง map ข้อมูล จาก main memory ไปยัง cache - การ Mapping คือ การกำหนดตำแหน่งหน่วยความจำของของ Main Memory ไปยัง Cache - ซึ่งมีวิธีการอยู่สามแบบ Direct, Associative และ Set Associative ดังตัวอย่างต่อไปนี้ สำหรับคอมพิวเตอร์ตัวอย่างที่ใช้มี สรุป พูดง่ายๆ คือเป็นการกำหนดตำแหน่งหน่วยความจำไปยัง Cache Memory นั่นเอง เพราะถ้ากำหนดดี ประสิทธิภาพก็จะดีไปด้วย
ตัวอย่างจากโจทย์มี Cache มีขนาด 64kByte Cache block มีขนาด 4 bytes Main memory มีขนาด 16MBytes
ขั้นตอน Direct Mapping หา tag (เป็นตัวบอกตำแหน่งว่าเป็นกลุ่มไหนของ Main Memory) หาได้จาก เอาขนาดของ main memory/ขนาดของ cache memory ซึ่งจะได้ - 16 Mb/64Kb = 250 ตำแหน่งใน memory - จะได้ tag = 8 เนื่องจาก 28 อ้างได้ 256 ตำแหน่ง หา จำนวนสายหรือ bit ที่ใช้ในการอ้างถึง ซึ่งจะได้ = 24 เส้นหรือ bit เนื่องจาก Main memory มีขนาด 16Mb เพราะฉะนั้นจะได้ 224 = 16 Mb
จากนั้นนำมาเขียน Main Memory Address หา Word จากโจทย์บอกว่าแต่ละ line ใน cache มีขนาด 4 byte เพราะฉะนั้น ในการอ้างว่าอยู่ byte ไหนจะใช้เพียง 2 bit คือ 00 01 10 11 Tag Line or Slot Word 8 14 2
สุดท้าย หา line หรือ slot โดยหาได้ 2 วิธีคือ โดยเอา 24-8-2 = 14 bit โดยเอา 64k/4byte = 16k แล้วดูว่า 2 ยกกำลังอะไรได้ 16k คือ = 14 นั่นเอง ก็จะได้ 14 bit 214 = 16 k ดังนั้นสามารถอ้างได้ 16k ของ cache หรือพูดง่ายๆ ว่า cache จะมีตำแหน่งอยู่ 16k ในแต่ละ line มีขนาด 4 byte ลองเอา 16k * 4 = 64 kb คือขนาดของ Cache จริงๆ (อ้างได้คือ 0000-3fff)
สมมุติว่าต้องการข้อมูลมาเก็บที่ Cache โดยข้อมูลที่เราต้องการคือ เอา Block ที่ 3 เอา Line ที่ 15 Byte ที่ 2 เราจะมีวิธีการอ้าง Main Memory Address เป็นเลขอะไร Tag Line or Slot Word 8 14 2 0000 0011 00000000001111 10 จะได้เป็น 03003Eh เวลาต้องการใช้งานก็อาจจะเรียก Ld A,03003Eh ซึ่งก็หมายความว่าเป็นการเอาข้อมูลที่อยู่ใน Main Memory ใน Block ที่ 3 ของ Main Memory ในช่องที่ 15 และ Byte ที่ 2 นั่นเอง
ในบางครั้ง ตำแหน่งของ Cache กับ Main Memory อาจจะมีการเลื่อน Bit เล็กน้อย เช่นจากตัวอย่างจะเป็นการเลื่อน 2 Bit (ซึ่งเป็นเหตุผลของทางบริษัท) Cache Memory 0000 3FFF 4 byte สมมุติมีชุดคำสั่ง Load AC,8FFFC จะหมายความว่า ให้เอาข้อมูลที่อยู่ใน Cache memory ณ ตำแหน่ง 3FFF
Direct Mapping Address Structure Tag s-r Line or Slot r Word w 14 2 8 24 bit address 2 bit word identifier (4 byte block) 22 bit block identifier 8 bit tag (=22-14) 14 bit slot or line
Direct Mapping Cache Organization
Direct Mapping Example
Direct Mapping Summary Address length = (s + w) bits Number of addressable units = 2s+w words or bytes Block size = line size = 2w words or bytes Number of blocks in main memory = 2s+ w/2w = 2s Number of lines in cache = m = 2r Size of tag = (s – r) bits
Direct Mapping Summary Simple Inexpensive Fixed location for given block If a program accesses 2 blocks that map to the same line repeatedly, cache misses are very high วิธีการ Direct mapping มีราคาถูกและวงจรง่าย แต่ก็มีข้อเสียคือเป็นการ fix cache location สำหรับแต่ะละ block ดังนั้นถ้าเกิดมีการอ่านข้อมูลจาก 2 block ที่บังเอิญ map มาที่ slot เดียวกันก็จะมีการเปลี่ยนข้อมูลใน slot นั้นอยู่ตลอดเวลา มีผลทำให้ให้ค่า Hit Rate ต่ำ
Associative Mapping วิธีนี้ Memory จะไม่แบ่งเป็น block ดังเช่นวิธี direct ซึ่งวิธีนี้ cache memory จะใช้หน่วยความจำส่วนไหนของ main memory ก็ได้ - ตัวอย่าง Cache มีขนาด 64 kByte Cache block มีขนาด 4 bytes Main memory มีขนาด 16MBytes
วิธีการหา หา tag (เป็นตัวบอกตำแหน่งว่าอยู่ตำแหน่งไหนของ Main Memory) หาได้จากขนาดของ Memory คือ 16 Mbyte = 224 ซึ่งจะได้ main memory address คือ 24 bit จากนั้นได้คือ คือ 24 – 2 bit word = 22 bit จาก 22 bit คือ 1111 1111 1111 1111 1111 1100 => FFFFFC ดังนั้น cache memory มีตำแหน่งทั้งหมด 000000 FFFFFC หรือ 000000 3FFFFF จากนั้นนำมาเขียน Main Memory Address Tag 22 bit Word 2 bit
Fully Associative Cache Organization
Associative Mapping Example
Associative Mapping Summary Address length = (s + w) bits Number of addressable units = 2s+w words or bytes Block size = line size = 2w words or bytes Number of blocks in main memory = 2s+ w/2w = 2s Number of lines in cache = undetermined Size of tag = s bits วิธีนี้จะใช้ส่วนไหนก็ได้ใน memory จน cache จะเต็มหมดซึ่งก็มีข้อดีในการอ่าน block ใหม่เข้ามาไว้ใน cache แต่จะใช้วงจรมากกว่า
Set Associative Mapping เป็นการนำเอาข้อดีของทั้งแบบ Direct และ Associative Mapping มารวมกันไว้ในวิธีนี้ - แบ่งหน่วยความจำ Cache ออกเป็น r sets - แต่ะละ set มี k slots (lines) ตัวอย่าง - Cache มีขนาด 64 kByte Cache block มีขนาด 4 bytes Main memory มีขนาด 16MBytes ให้เป็นแบบ Two-way Set Associative Mapping
Two Way Set Associative Cache Organization (แบ่งเป็น 2 กลุ่ม)
วิธีการหา ดูโจทย์ว่าเป็นแบบไหน จากโจทย์บอกว่าเป็นแบบ 2-way set associative mapping แสดงว่าจะมี cache จำนวน 2 กลุ่ม ซึ่งจะได้ 8 k + 8 k (กลุ่มละ 8k ช่อง) หา set จาก ขนาดของแต่ละกลุ่มของ cache คือ 213 = 8 k เพราะฉะนั้น set จะมีขนาด 13 bit (Set ในที่นี้คือ Line นั่นเอง) หา word จาก cache block size คือ 4 byte ดังนั้น word จะมีขนาด 2 bit
วิธีการหา หา tag ได้ 2 วิธี คือ ( Tag ในที่นี้คือ จำนวนกลุ่มใน Memory) 1. จาก ขนาด main memory คือ 16 M เพราะฉะนั้นจำนวน bit ทั้งหมด คือ 224 ซึ่งจะสามารถหา tag = จำนวน bit ทั้งหมด - set – word คือ 24-13-2 = 9 bit 2. จากขนาด main memory คือ 16 M และขนาดของ Cache มีขนาด 64k แต่โจทย์บอกว่าเป็นแบบ 2-way จะต้องเอา 64k/2 = 32k จากนั้น เอา ขนาดของ Memory/ขนาดของ Cache = 16M/32k = 500 จากนั้น 2 ยกกำลังอะไรได้ใกล้เคียงกับ 500 คือ 29 แสดงว่าจะใช้ทั้งหมด 9 Bit
Set Associative Mapping Address Structure จะได้ Main Memory Address ดังนี้ Tag 9 bit Set 13 bit Word 2 bit
Two Way Set Associative Mapping Example
Set Associative Mapping Summary Address length = (s + w) bits Number of addressable units = 2s+w words or bytes Block size = line size = 2w words or bytes Number of blocks in main memory = 2d Number of lines in set = k Number of sets = v = 2d Number of lines in cache = kv = k * 2d Size of tag = (s – d) bits
Replacement Algorithms เมื่อมีการอ่านข้อมูล Block ใหม่มาจาก Memory เข้ามาวางไว้ใน Cache ก็จะต้องมีการลบ Block เดิมทิ้งไป วิธีการเลือกที่จะลบ block เดิมมีหลายวิธีได้แก่ - Least-recently used (LRU) ลบข้อมูลที่ถูกใช้งานล่าสุดออกไป First-in-first-out (FIFO) ลบข้อมูลที่เข้ามาก่อนออกไปก่อน Least-frequency-used (LFU) ลบข้อมูลที่มีการใช้งานน้อยที่สุดออกไป Random สุ่มเอา
Write Policy นโยบายการบันทึกหน่วยความจำหลัก ก่อนจะทำการลบข้อมูลใน block หรือก่อนที่จะถูกแทนที่ด้วยข้อมูลบล็อกใหม่ จำเป็นต้องตรวจสอบว่าข้อมูลบล็อกนั้นเปลี่ยนแปลงไปแล้วหรือไม่ ถ้ามีจะต้องมีการปรับปรุงข้อมูลจาก Cache ไปยัง Main Memory ก่อน วิธีการที่ง่ายที่สุดเป็นการบันทึกข้อมูลลงในหน่วยความจำในทันทีหรือ Write Through ทุกครั้งที่มีการบันทึกข้อมูลลงใน cache ก็จะถูกบังคับให้เกิดการบันทึกลงในหน่วยความจำทันทีเพื่อเป็นการรับรองว่าข้อมูลใน cache และ Main Memory เท่ากันเสมอข้อเสียคือทำให้เกิดการส่งข้อมูลบ่อยครั้งทำให้เกิดปัญหาคอขวด อีกวิธีคือ Write Back เป็นวิธีการบันทึกข้อมูลในภายหลังช่วยลดจำนวนครั้งในการบันทึกข้อมูลลงใน Main Memory ให้เหลือน้อยที่สุด
Pentium 4 Cache 80386 – no on chip cache 80486 – 8k using 16 byte lines and four way set associative organization Pentium (all versions) – two on chip L1 caches Data & instructions Pentium 4 – L1 caches 8k bytes 64 byte lines four way set associative L2 cache Feeding both L1 caches 256k 128 byte lines 8 way set associative