1 / 26

Recitation 6 (Oct. 18)

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:

Download Presentation

Recitation 6 (Oct. 18)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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)

  2. 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

  3. 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; } }

  4. 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

  5. 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

  6. 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

  7. 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)

  8. 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

  9. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 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

  10. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 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

  11. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 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

  12. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 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

  13. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 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

  14. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 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

  15. Answers to 6.15 • A: 512 • 2 for each of 256 array elements • B: 256 • Every other array element experiences a miss • C: 50%

  16. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 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

  17. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 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

  18. Answers to 6.16 • A: 512 • B: 256 • C: 50%

  19. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 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

  20. Answers to 6.16 • A: 512 • B: 256 • C: 50% • D: 25%

  21. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 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

  22. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 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

  23. 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

  24. 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

  25. 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

  26. 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() { }

More Related