Today. Cache Memories. General Cache Concept. General Cache Organization (S, E, B) Cache Memories. Example Memory Hierarchy Smaller, faster,

Similar documents
Agenda Cache memory organization and operation Chapter 6 Performance impact of caches Cache Memories

Today Cache memory organization and operation Performance impact of caches

Cache memories are small, fast SRAM based memories managed automatically in hardware.

Cache Memories /18-213/15-513: Introduction to Computer Systems 12 th Lecture, October 5, Today s Instructor: Phil Gibbons

Carnegie Mellon. Cache Memories

Cache Memories. From Bryant and O Hallaron, Computer Systems. A Programmer s Perspective. Chapter 6.

Denison University. Cache Memories. CS-281: Introduction to Computer Systems. Instructor: Thomas C. Bressoud

Memory Hierarchy. Computer Systems Organization (Spring 2017) CSCI-UA 201, Section 3. Instructor: Joanna Klukowska

Memory Hierarchy. Cache Memory Organization and Access. General Cache Concept. Example Memory Hierarchy Smaller, faster,

Carnegie Mellon. Cache Memories. Computer Architecture. Instructor: Norbert Lu1enberger. based on the book by Randy Bryant and Dave O Hallaron

Cache Memories. Andrew Case. Slides adapted from Jinyang Li, Randy Bryant and Dave O Hallaron

Cache Memories : Introduc on to Computer Systems 12 th Lecture, October 6th, Instructor: Randy Bryant.

CS 33. Caches. CS33 Intro to Computer Systems XVIII 1 Copyright 2017 Thomas W. Doeppner. All rights reserved.

Cache Memories. Topics. Next time. Generic cache memory organization Direct mapped caches Set associative caches Impact of caches on performance

Last class. Caches. Direct mapped

Memory Hierarchy. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

Cache memories are small, fast SRAM-based memories managed automatically in hardware. Hold frequently accessed blocks of main memory

Giving credit where credit is due

Cache Memories October 8, 2007

211: Computer Architecture Summer 2016

CISC 360. Cache Memories Nov 25, 2008

Systems Programming and Computer Architecture ( ) Timothy Roscoe

Cache Memories. EL2010 Organisasi dan Arsitektur Sistem Komputer Sekolah Teknik Elektro dan Informatika ITB 2010

Lecture 15: Caches and Optimization Computer Architecture and Systems Programming ( )

Example. How are these parameters decided?

Cache Memories. Cache Memories Oct. 10, Inserting an L1 Cache Between the CPU and Main Memory. General Org of a Cache Memory

Cache memories The course that gives CMU its Zip! Cache Memories Oct 11, General organization of a cache memory

ν Hold frequently accessed blocks of main memory 2 CISC 360, Fa09 Cache is an array of sets. Each set contains one or more lines.

Systems I. Optimizing for the Memory Hierarchy. Topics Impact of caches on performance Memory hierarchy considerations

Cache Memories. Lecture, Oct. 30, Bryant and O Hallaron, Computer Systems: A Programmer s Perspective, Third Edition

Roadmap. Java: Assembly language: OS: Machine code: Computer system:

The course that gives CMU its Zip! Memory System Performance. March 22, 2001

Memory Hierarchy. Instructor: Adam C. Champion, Ph.D. CSE 2431: Introduction to Operating Systems Reading: Chap. 6, [CSAPP]

Memory Hierarchy. Announcement. Computer system model. Reference

High-Performance Parallel Computing

Problem: Processor Memory BoJleneck

Memory hierarchies: caches and their impact on the running time

CSCI-UA.0201 Computer Systems Organization Memory Hierarchy

Caches Spring 2016 May 4: Caches 1

Types of Cache Misses. The Hardware/So<ware Interface CSE351 Winter Cache Read. General Cache OrganizaJon (S, E, B) Memory and Caches II

The Hardware/So<ware Interface CSE351 Winter 2013

Computer Systems CSE 410 Autumn Memory Organiza:on and Caches

Lecture 12. Memory Design & Caches, part 2. Christos Kozyrakis Stanford University

CS 33. Architecture and Optimization (3) CS33 Intro to Computer Systems XVI 1 Copyright 2018 Thomas W. Doeppner. All rights reserved.

Carnegie Mellon. Cache Lab. Recitation 7: Oct 11 th, 2016

Cache Memory and Performance

CS241 Computer Organization Spring Principle of Locality

How to Write Fast Numerical Code

Caches III. CSE 351 Spring Instructor: Ruth Anderson

How to Write Fast Numerical Code

CS 240 Stage 3 Abstractions for Practical Systems

Kathryn Chan, Kevin Bi, Ryan Wong, Waylon Huang, Xinyu Sui

CSCI 402: Computer Architectures. Performance of Multilevel Cache

Computer Organization: A Programmer's Perspective

Cache Memory and Performance

Roadmap. Java: Assembly language: OS: Machine code: Computer system:

Computer Architecture and System Software Lecture 09: Memory Hierarchy. Instructor: Rob Bergen Applied Computer Science University of Winnipeg

Caches III. CSE 351 Winter Instructor: Mark Wyse

Problem: Processor- Memory Bo<leneck

How to Write Fast Numerical Code Spring 2011 Lecture 7. Instructor: Markus Püschel TA: Georg Ofenbeck

F28HS Hardware-Software Interface: Systems Programming

CS24: INTRODUCTION TO COMPUTING SYSTEMS. Spring 2014 Lecture 14

CS 261 Fall Caching. Mike Lam, Professor. (get it??)

CS24: INTRODUCTION TO COMPUTING SYSTEMS. Spring 2017 Lecture 15

Cache Lab Implementation and Blocking

Cache Performance II 1

Locality. CS429: Computer Organization and Architecture. Locality Example 2. Locality Example

CS3350B Computer Architecture

Caches Concepts Review

Advanced Memory Organizations

+ Random-Access Memory (RAM)

General Cache Mechanics. Memory Hierarchy: Cache. Cache Hit. Cache Miss CPU. Cache. Memory CPU CPU. Cache. Cache. Memory. Memory

211: Computer Architecture Summer 2016

Princeton University. Computer Science 217: Introduction to Programming Systems. The Memory/Storage Hierarchy and Virtual Memory

CS24: INTRODUCTION TO COMPUTING SYSTEMS. Spring 2015 Lecture 15

Read-only memory (ROM): programmed during production Programmable ROM (PROM): can be programmed once SRAM (Static RAM)

Computer Organization - Overview

CSE 431 Computer Architecture Fall Chapter 5A: Exploiting the Memory Hierarchy, Part 1

CS356: Discussion #9 Memory Hierarchy and Caches. Marco Paolieri Illustrations from CS:APP3e textbook

Introduction to Computer Systems

Introduction to Computer Systems

CS 31: Intro to Systems Caching. Kevin Webb Swarthmore College March 24, 2015

Chapter 6 Caches. Computer System. Alpha Chip Photo. Topics. Memory Hierarchy Locality of Reference SRAM Caches Direct Mapped Associative

Lecture 17: Memory Hierarchy and Cache Coherence Concurrent and Mul7core Programming

CSF Cache Introduction. [Adapted from Computer Organization and Design, Patterson & Hennessy, 2005]

CISC 360. Cache Memories Exercises Dec 3, 2009

Lecture 2. Memory locality optimizations Address space organization

CMPSC 311- Introduction to Systems Programming Module: Caching

LECTURE 4: LARGE AND FAST: EXPLOITING MEMORY HIERARCHY

Storage Management 1

The Memory Hierarchy. Fall Instructors: Aykut & Erkut Erdem

CS/ECE 250 Computer Architecture

Why memory hierarchy? Memory hierarchy. Memory hierarchy goals. CS2410: Computer Architecture. L1 cache design. Sangyeun Cho

CS 61C: Great Ideas in Computer Architecture. Direct Mapped Caches

Computer Organization: A Programmer's Perspective

Chapter 5A. Large and Fast: Exploiting Memory Hierarchy

Basic Memory Hierarchy Principles. Appendix C (Not all will be covered by the lecture; studying the textbook is recommended!)

CSF Improving Cache Performance. [Adapted from Computer Organization and Design, Patterson & Hennessy, 2005]

EE108B Lecture 13. Caches Wrap Up Processes, Interrupts, and Exceptions. Christos Kozyrakis Stanford University

CMPSC 311- Introduction to Systems Programming Module: Caching

Transcription:

Today Cache Memories CSci 2021: Machine Architecture and Organization November 7th-9th, 2016 Your instructor: Stephen McCamant Cache memory organization and operation Performance impact of caches The memory mountain Rearranging loops to improve spatial locality Using blocking to improve temporal locality Based on slides originally by: Randy Bryant, Dave O Hallaron 1 2 Example Memory Hierarchy Smaller, faster, and costlier (per byte) storage devices Larger, slower, and cheaper (per byte) storage L5: devices L6: L4: L3: L2: : L0: Regs cache (SRAM) L2 cache (SRAM) L3 cache (SRAM) Main memory (DRAM) Local secondary storage (local disks) Remote secondary storage (e.g., Web servers) CPU registers hold words retrieved from the cache. cache holds cache lines retrieved from the L2 cache. L2 cache holds cache lines retrieved from L3 cache L3 cache holds cache lines retrieved from main memory. Main memory holds disk blocks retrieved from local disks. Local disks hold files retrieved from disks on remote servers 3 General Cache Concept Cache Memory 84 9 14 10 3 10 4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Data is copied in block-sized transfer units Smaller, faster, more expensive memory caches a subset of the blocks Larger, slower, cheaper memory viewed as partitioned into blocks 4 Cache Memories General Cache Organization (S, E, B) Cache memories are small, fast SRAM-based memories managed automatically in hardware Hold frequently accessed blocks of main memory CPU looks first for data in cache Typical system structure: S 2 s sets E 2 e lines per set set line CPU chip Register file Cache memory Bus interface ALU System bus I/O bridge Memory bus Main memory 5 v valid bit tag 0 1 2 B-1 Cache size: C S x E x B data bytes B 2 b bytes per cache block (the data) 6 1

Cache Read E 2 e lines per set Locate set Check if any line in set has matching tag Yes + line valid: hit Locate data starting at offset Example: Direct Mapped Cache (E 1) Direct mapped: One line per set Address of word: t bits s bits b bits Address of int: S 2 s sets tag set block index offset S 2 s sets find set data begins at this offset v tag 0 1 2 B-1 valid bit B 2 b bytes per cache block (the data) 7 8 Example: Direct Mapped Cache (E 1) Direct mapped: One line per set Example: Direct Mapped Cache (E 1) Direct mapped: One line per set valid? + match: assume yes hit Address of int: valid? + match: assume yes hit Address of int: block offset block offset int (4 Bytes) is here If tag doesn t match: old line is evicted and replaced 9 10 Direct-Mapped Cache Simulation t1 s2 b1 x xx x M16 bytes (4-bit addresses), B2 bytes/block, S4 sets, E1 Blocks/set E-way Set Associative Cache (Here: E 2) E 2: Two lines per set Address of short int: Address trace (reads, one byte per read): 0 [0000 2 ], miss 1 [0001 2 ], hit 7 [0111 2 ], miss 8 [1000 2 ], miss 0 [0000 2 ] miss find set Set 0 Set 1 Set 2 Set 3 v Tag Block 0 1 10? M[8-9] M[0-1]? 1 0 M[6-7] 11 12 2

E-way Set Associative Cache (Here: E 2) E 2: Two lines per set valid? + match: yes hit compare both Address of short int: E-way Set Associative Cache (Here: E 2) E 2: Two lines per set valid? + match: yes hit compare both Address of short int: block offset short int (2 Bytes) is here block offset 13 No match: One line in set is selected for eviction and replacement Replacement policies: random, least recently used (LRU), 14 2-Way Set Associative Cache Simulation What about writes? t2 s1 b1 xx x x M16 byte addresses, B2 bytes/block, S2 sets, E2 blocks/set Address trace (reads, one byte per read): 0 [0000 2 ], miss 1 [0001 2 ], hit 7 [0111 2 ], miss 8 [1000 2 ], miss 0 [0000 2 ] hit v Tag Block Set 0 01? 00? M[0-1] 10 10 M[8-9] 10 01 M[6-7] Set 1 0 Multiple copies of data exist:, L2, L3, Main Memory, Disk What to do on a write-hit? Write-through (write immediately to memory) Write-back (defer write to memory until replacement of line) Need a dirty bit (line different from memory or not) What to do on a write-miss? Write-allocate (load into cache, update line in cache) Good if more writes to the location follow No-write-allocate (writes straight to memory, does not load into cache) Typical Write-through + No-write-allocate Write-back + Write-allocate 15 16 Intel Core i7 Cache Hierarchy Cache Performance Metrics Processor package Core 0 Regs d-cache i-cache L2 unified cache L3 unified cache (shared by all cores) Main memory Core 3 Regs d-cache i-cache L2 unified cache i-cache and d-cache: 32 KB, 8-way, Access: 4 cycles L2 unified cache: 256 KB, 8-way, Access: 10 cycles L3 unified cache: 8 MB, 16-way, Access: 40-75 cycles Block size: 64 bytes for all caches. Miss Rate Fraction of memory references not found in cache (misses / accesses) 1 hit rate Typical numbers (in percentages): 3-10% for can be quite small (e.g., < 1%) for L2, depending on size, etc. Hit Time Time to deliver a line in the cache to the processor includes time to determine whether the line is in the cache Typical numbers: 4 clock cycle for 10 clock cycles for L2 Miss Penalty Additional time required because of a miss typically 50-200 cycles for main memory (Trend: increasing!) 17 18 3

Let s think about those numbers Writing Cache Friendly Code Huge difference between a hit and a miss Could be 100x, if just and main memory Make the common case go fast Focus on the inner loops of the core functions Would you believe 99% hits is twice as good as 97%? Consider: cache hit time of 1 cycle miss penalty of 100 cycles Minimize the misses in the inner loops Repeated references to variables are good (temporal locality) Stride-1 reference patterns are good (spatial locality) Average access time: 97% hits: 1 cycle + 0.03 100 cycles 4 cycles 99% hits: 1 cycle + 0.01 100 cycles 2 cycles This is why miss rate is used instead of hit rate Key idea: Our qualitative notion of locality is quantified through our understanding of cache memories 19 20 Rows/Columns Example int sum_array_rows(double a[16][16]) double sum 0; Ignore the variables sum, i, j assume: cold (empty) cache, a[0][0] goes here, 2-way set associative Rows/Columns Example int sum_array_rows(double a[16][16]) double sum 0; Ignore the variables sum, i, j assume: cold (empty) cache, a[0][0] goes here, 2-way set associative 1 2 3 4 1 2 3 4 for (i 0; i < 16; i++) for (j 0; j < 16; j++) sum + a[i][j]; for (i 0; i < 16; i++) for (j 0; j < 16; j++) sum + a[i][j]; 5 6 7 8 5 6 7 8 9 10 11 12 13 14 15 16 9 10 11 12 13 14 15 16 int sum_array_cols(double a[16][16]) double sum 0; 32 B 4 doubles int sum_array_cols(double a[16][16]) double sum 0; 32 B 4 doubles for (j 0; j < 16; j++) for (i 0; i < 16; i++) sum + a[i][j]; for (j 0; j < 16; j++) for (i 0; i < 16; i++) sum + a[i][j]; 21 22 Rows/Columns Example int sum_array_rows(double a[16][16]) double sum 0; for (i 0; i < 16; i++) for (j 0; j < 16; j++) sum + a[i][j]; int sum_array_cols(double a[16][16]) double sum 0; Ignore the variables sum, i, j assume: cold (empty) cache, a[0][0] goes here, 2-way set associative 15 13 31 16 24 24 32 B 4 doubles Today Cache organization and operation Performance impact of caches The memory mountain Rearranging loops to improve spatial locality Using blocking to improve temporal locality for (j 0; j < 16; j++) for (i 0; i < 16; i++) sum + a[i][j]; 23 24 4

Read throughput (MB/s) The Memory Mountain Read throughput (read bandwidth) Number of bytes read from memory per second (MB/s) Memory mountain: Measured read throughput as a function of spatial and temporal locality. Compact way to characterize memory system performance. 25 Memory Mountain Test Function long data[maxelems]; / Global array to traverse / / test - Iterate over first "elems" elements of array data with stride of "stride", using using 4x4 loop unrolling. / int test(int elems, int stride) long i, sx2stride2, sx3stride3, sx4stride4; long acc0 0, acc1 0, acc2 0, acc3 0; long length elems, limit length - sx4; / Combine 4 elements at a time / for (i 0; i < limit; i + sx4) acc0 acc0 + data[i]; acc1 acc1 + data[i+stride]; acc2 acc2 + data[i+sx2]; acc3 acc3 + data[i+sx3]; / Finish any remaining elements / for (; i < length; i++) acc0 acc0 + data[i]; return ((acc0 + acc1) + (acc2 + acc3)); mountain/mountain.c Call test() with many combinations of elems and stride. For each elems and stride: 1. Call test() once to warm up the caches. 2. Call test() again and measure the read throughput(mb/s) 26 The Memory Mountain Aggressive prefetching 16000 14000 12000 10000 8000 6000 4000 2000 Slopes 0 of spatial locality s1 s3 s5 Stride (x8 bytes) s7 s9 Mem s11 128m L3 32m 8m L2 2m 512k 128k Size (bytes) 32k Core i7 Haswell 2.1 GHz 32 KB d-cache 256 KB L2 cache 8 MB L3 cache 64 B block size Ridges of temporal locality Today Cache organization and operation Performance impact of caches The memory mountain Rearranging loops to improve spatial locality Using blocking to improve temporal locality 27 28 Matrix Multiplication Example Miss Rate Analysis for Matrix Multiply Description: Multiply N x N matrices Matrix elements are doubles (8 bytes) O(N 3 ) total operations N reads per source element N values summed per destination but may be able to hold in register Variable sum / ijk / held in register for (i0; i<n; i++) for (j0; j<n; j++) sum 0.0; for (k0; k<n; k++) sum + a[i][k] b[k][j]; c[i][j] sum; Block size 32B (big enough for four doubles) Matrix dimension (N) is very large Approximate 1/N as 0.0 Cache is not even big enough to hold multiple rows Analysis Method: Look at access pattern of inner loop i j C k i x A k j B 29 30 5

Layout of C Arrays in Memory (review) Matrix Multiplication (ijk) C arrays allocated in row-major order each row in contiguous memory locations Stepping through columns in one row: for (i 0; i < N; i++) sum + a[0][i]; accesses successive elements if block size (B) > sizeof(a ij ) bytes, exploit spatial locality miss rate sizeof(a ij ) / B Stepping through rows in one column: for (i 0; i < n; i++) sum + a[i][0]; accesses distant elements no spatial locality! miss rate 1 (i.e. 100%) / ijk / for (i0; i<n; i++) for (j0; j<n; j++) sum 0.0; for (k0; k<n; k++) sum + a[i][k] b[k][j]; c[i][j] sum; 0.25 1.0 0.0 (i,) (,j) (i,j) Row-wise Fixed 31 32 Matrix Multiplication (jik) Matrix Multiplication (kij) / jik / for (j0; j<n; j++) for (i0; i<n; i++) sum 0.0; for (k0; k<n; k++) sum + a[i][k] b[k][j]; c[i][j] sum 0.25 1.0 0.0 (i,) (,j) (i,j) Row-wise Fixed / kij / for (k0; k<n; k++) for (i0; i<n; i++) r a[i][k]; for (j0; j<n; j++) c[i][j] + r b[k][j]; 0.0 0.25 0.25 (i,k) (k,) (i,) Fixed Row-wise Row-wise 33 34 Matrix Multiplication (ikj) Matrix Multiplication (jki) / ikj / for (i0; i<n; i++) for (k0; k<n; k++) r a[i][k]; for (j0; j<n; j++) c[i][j] + r b[k][j]; (i,k) (k,) (i,) Fixed Row-wise Row-wise / jki / for (j0; j<n; j++) for (k0; k<n; k++) r b[k][j]; for (i0; i<n; i++) c[i][j] + a[i][k] r; (,k) (k,j) Fixed (,j) 0.0 0.25 0.25 1.0 0.0 1.0 35 36 6

Cycles per inner loop iteration Matrix Multiplication (kji) / kji / for (k0; k<n; k++) for (j0; j<n; j++) r b[k][j]; for (i0; i<n; i++) c[i][j] + a[i][k] r; 1.0 0.0 1.0 (,k) (k,j) (,j) Fixed 37 Summary of Matrix Multiplication for (i0; i<n; i++) for (j0; j<n; j++) sum 0.0; for (k0; k<n; k++) sum + a[i][k] b[k][j]; c[i][j] sum; for (k0; k<n; k++) for (i0; i<n; i++) r a[i][k]; for (j0; j<n; j++) c[i][j] + r b[k][j]; for (j0; j<n; j++) for (k0; k<n; k++) r b[k][j]; for (i0; i<n; i++) c[i][j] + a[i][k] r; Bryant and O Hallaron, Computer Systems: A Programmer s Perspective, Third Edition ijk (& jik): 2 loads, 0 stores misses/iter 1.25 kij (& ikj): 2 loads, 1 store misses/iter 0.5 jki (& kji): 2 loads, 1 store misses/iter 2.0 38 Core i7 Matrix Multiply Performance Today 100 jki / kji ijk / jik jki Cache organization and operation Performance impact of caches The memory mountain Rearranging loops to improve spatial locality Using blocking to improve temporal locality 10 kji ijk jik kij ikj kij / ikj 1 50 100 150 200 250 300 350 400 450 500 550 600 650 700 Array size (n) 39 40 Example: Matrix Multiplication Cache Miss Analysis c (double ) calloc(sizeof(double), nn); / Multiply n x n matrices a and b / void mmm(double a, double b, double c, int n) int i, j, k; for (i 0; i < n; i++) for (j 0; j < n; j++) for (k 0; k < n; k++) c[in + j] + a[in + k] b[kn + j]; c i a b j Matrix elements are doubles Cache block 8 doubles Cache size C << n (much smaller than n) First iteration: n/8 + n 9n/8 misses Afterwards in cache: (schematic) n 41 8 wide 42 7

Cache Miss Analysis Matrix elements are doubles Cache block 8 doubles Cache size C << n (much smaller than n) Second iteration: Again: n/8 + n 9n/8 misses Total misses: 9n/8 n 2 (9/8) n 3 8 wide n Blocked Matrix Multiplication c (double ) calloc(sizeof(double), nn); / Multiply n x n matrices a and b / void mmm(double a, double b, double c, int n) int i, j, k; for (i 0; i < n; i+b) for (j 0; j < n; j+b) for (k 0; k < n; k+b) / B x B mini matrix multiplications / for (i1 i; i1 < i+b; i++) for (j1 j; j1 < j+b; j++) for (k1 k; k1 < k+b; k++) c[i1n+j1] + a[i1n + k1]b[k1n + j1]; matmult/bmm.c c i1 a b j1 + c 43 Block size B x B 44 Cache Miss Analysis Cache Miss Analysis Cache block 8 doubles Cache size C << n (much smaller than n) Three blocks fit into cache: 3B 2 < C Cache block 8 doubles Cache size C << n (much smaller than n) Three blocks fit into cache: 3B 2 < C First (block) iteration: B 2 /8 misses for each block 2n/B B 2 /8 nb/4 (omitting matrix c) n/b blocks Second (block) iteration: Same as first iteration 2n/B B 2 /8 nb/4 n/b blocks Afterwards in cache (schematic) Block size B x B Total misses: nb/4 (n/b) 2 n 3 /(4B) Block size B x B 45 46 Blocking Summary Cache Summary No blocking: (9/8) n 3 Blocking: 1/(4B) n 3 Suggest largest possible block size B, but limit 3B 2 < C! Reason for dramatic difference: Matrix multiplication has inherent temporal locality: Input data: 3n 2, computation 2n 3 Every array elements used O(n) times! But program has to be written properly Cache memories can have significant performance impact You can write your programs to exploit this! Focus on the inner loops, where bulk of computations and memory accesses occur. Try to maximize spatial locality by reading data objects with sequentially with stride 1. Try to maximize temporal locality by using a data object as often as possible once it s read from memory. 47 48 8