260 likes | 283 Views
Outline Locality Cache memories Organizations Some practice problems Linking Reminders Lab4: Due next Thursday. Minglong Shao shaoml+213@cs.cmu.edu Office hours: Thursdays 5-6PM Wean Hall 1315. Recitation 6 (Oct. 18). Locality. Temporal locality:
E N D
Outline Locality Cache memories Organizations Some practice problems Linking Reminders Lab4: Due next Thursday Minglong Shao shaoml+213@cs.cmu.edu Office hours: Thursdays 5-6PM Wean Hall 1315 Recitation 6 (Oct. 18)
Locality • Temporal locality: • A memory location referenced once is likely to be referenced again multiple times in the near future • E.g. loop instructions, variables in loops • Use an object as often as possible once it has been read • Spatial locality: • Program is likely to reference a nearby memory location in the near future • E.g. array elements visited sequentially • Reading data sequentially, in the order they are stored Have enormous impact on design & performance of HW and SW Good locality high performance
Practice problem 6.5 (P482) Rank-order the functions w.r.t. spatial locality enjoyed by each. void clear1(point *p, int n) { int i, j; for (i=0; i<n; i++){ for (j=0; j<3; j++) p[i].vel[j] = 0; for (j=0; j<3; j++) p[i].acc[j] = 0; } } #define N 1000 typedef struct { int vel[3]; int acc[3]; }point; point p[N]; void clear2(point *p, int n) { int i, j; for (i=0; i<n; i++){ for (j=0; j<3; j++){ p[i].vel[j] = 0; p[i].acc[j] = 0; } } } void clear3(point *p, int n) { int i, j; for (j=0; j<n; j++){ for (i=0; i<3; i++) p[i].vel[j] = 0; for (i=0; i<3; i++) p[i].acc[j] = 0; } }
Practice problem 6.5 answer • Consider how array is laid out in memory p[0].vel[0] p[0].vel[1] p[0].vel[2] p[0].acc[0] p[0].acc[1] p[0].acc[2] ... p[N-1].vel[0] p[N-1].vel[1] p[N-1].vel[2] p[N-1].acc[0] p[N-1].acc[1] p[N-1].acc[2] • Analyze reference patterns • Access pattern matches memory layout • Best spatial locality • clear1 > clear2 > clear3
Cache organization (review) Cache is an array of sets. Each set contains one or more lines (associativity). Each line holds a block of data. t tag bits per line 1 valid bit per line B = 2b bytes per cache block valid tag 0 1 • • • B–1 E • • • set 0: valid tag 0 1 • • • B–1 valid tag 0 1 • • • B–1 • • • set 1: S = 2s sets valid tag 0 1 • • • B–1 • • • valid tag 0 1 • • • B–1 • • • set S-1: valid tag 0 1 • • • B–1
Cache mapping Address A: Check whether address A is in the cache: • Use <set index> to locate the corresponding set • <tag> matches one of the valid lines in the set b bits t bits s bits m-1 0 <tag> <set index> <byte offset> set s: valid tag 0 1 • • • B–1 • • • valid tag 0 1 • • • B–1
Practice problem 256 22 8 2 1 27 0 5 128 20 7 5 1: Direct-mapped cache 2: Fully associative cache 3: 4-way associative cache Reinforce your understanding: practice problem 6.9 (P501)
Cache access patterns • Spend the next fifteen minutes working on Practice Problems 6.15–17 (P510) • Handout is a photocopy from the text Note that: • sizeof(algae_position) = 8 • Each block (16 bytes) holds two algae_position structures • The 16×16 array requires 2048 bytes of memory • Twice the size of the 1024-byte cache
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y Practice Problem 6.15–17 • Rows: 16 items (8 blocks, 128 bytes) • Columns: 16 items • Yellow area: 1024B; blue area 1024B
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y 6.15: Row major access pattern Grid[0][0].x Grid[0][15].y Grid[8][0].x Grid[8][15].y
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y hit miss 6.15: Stride of 2 words • First loop, accessing just x’s • One cache miss will load a block from memory
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y hit miss 6.15: Stride of 2 words • First loop, accessing just x’s • One cache miss will load a block from memory
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y hit miss 6.15: Stride of 2 words • Second loop, accessing just the y’s • Same miss pattern
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y hit miss 6.15: Stride of 2 words • Second loop, accessing just the y’s • Same miss pattern
Answers to 6.15 • A: 512 • 2 for each of 256 array elements • B: 256 • Every other array element experiences a miss • C: 50%
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y Column major access pattern • New access removes first cache line contents before they are used
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y Column major access pattern • New access removes first cache line contents before they are used
Answers to 6.16 • A: 512 • B: 256 • C: 50%
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y Column major access pattern • What if the cache is 2048 bytes? • No misses on second access to each block, since the entire array fits in the cache
Answers to 6.16 • A: 512 • B: 256 • C: 50% • D: 25%
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y Stride of 1 word • Access both x and y in row major order
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y Stride of 1 word • Access both x and y in row major order
Answers to 6.17 • A: 512 • B: 128 • All are compulsory misses • C: 25% • D: 25% • Cache size does not matter since all misses are compulsory • Though the block size does matter
Performance optimization • Good locality good performance • Lab4: • Data structure exploits spatial & temporal locality • Optimize inner loop • Might want to try blocking (not significant) • Start early! • Optimization is time-consuming • Could involve structure re-design • Take ~2 minutes to run • Don’t submit at the last minute
Linking • Process of patching binaries with correct addresses of symbols unknown at compile time • Enables use of multiple source files and shared libraries • Static linking & dynamic linking • Symbol resolution • Relocation
Symbol resolution • One definition of each local symbol per module • Compiler ensures • Global symbols left for linker to handle • Strong symbol & weak symbol • /* Module 1 */ • int main() • { • } B. /* Module 2 */ int main; int p2() { } C. /* Module 3 */ int main = 1; int p2() { }