|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Memory: locality |
|
|
|
|
|
|
|
Memory hierarchy |
|
|
|
|
|
Registers: small and fast |
|
|
|
|
RAM: large and slow |
|
|
|
|
Ideal: large and fast |
|
|
|
|
Solution: range of
memories from fast to slow |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Fig 7.1 |
|
|
|
If memory accesses are
random, can't do much, but programs typically have: |
|
|
|
spatial locality: successive memory accesses tend to be close together in
location |
|
|
- sequential execution |
|
|
|
|
|
- branches tend to be relatively small |
|
|
|
|
|
- arrays |
|
|
|
|
|
temporal locality: location, once accessed, will tend to be accessed again |
|
|
|
|
within a small amount of
time (loop: instructions and data) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|