Search

Memory Hierarchy

q4 write back write through write buffer 등
L1 = level 1
커짐에 따라 miss rate가 줄어든다 하지만 penalty는 늘어난다
Q1 where can a block be placed?
associativity에 의해서 결정된다.
set associativity에서 N값에 따라서 1이면 direct max면 full
direct mapped는 single choice밖에 없다
associativity커지면 비교기가 많아지면 비싸진다
Q2 블록을 어떻게 찾는가?
direct mapped는 인덱싱해서 비교를 한번만 하면 된다
N의 개수가 비교기의 개수와 똑같다.
full은 모든 캐시 엔트리를 다 찾아야한다
lookup table은 0. 비교기가 필요없다 캐시가 아니니까 바로 찾아가면 된다 index를
Q3 which block should be replaced on a cache miss?
reference bit 참조되면 1이되고 시간이 지나면 0으로 리프레시되는것
최근에 사용됐던건 놔두고 오래된거부터 바꾸자
random은 아무거나 바꾸자. 간단하고 커지면 커질수록 lru랑 성능이 비슷해서 큰 캐시에서는 random을 쓰기도 한다.
N+1은 1부터 다시 채운다 round robin방식 책에는2개만 나온다 참고로 알기
Q4 write할때 어떻게 하냐
write buffer는 둘다에 붙을수 있어서 두개만 나오는거
write trhough는 둘다 동시에 업데이트. write buffer가 필요할수있따
write back은 upper level만 업데이트하고 캐시만 가지고 있다가 해당 블록이 다른 데이터로 교체하면 데이터가 사라질 수 있으니 write buffer에게 쓰라고 준다
virtual memory는 write back만 feasible
compulsory misses
cold start miss. 처음시작하면 데이터가 없다 그래서 무조건 miss가 난다
이걸 회피하기 위해서 미리 올려놓는 방법도 있다. 맞추면 좋고 틀리면 다시 가지고 오고
capacity misses 캐시의 사이즈가 유한하기 때문
replace된 블록이 다시 엑세스 되는 경우
conflict misses = collision misses
set때문에 발생하는 것. fully는 발생하지 않음
capacity가 가장 넓은 영역을 차지함.
one-waysms conflict가 크다 two만되어도 많이 줄어들고 4-way에서 더 많이 줄어듦
캐시사이즈가 커지면 커질수록 capacity miss는확줄어든다
cache design trade-off
miss rate을 해결하기 위한 변환들은 tradeoff가 있다
direct mapped캐시, write back using write allocate
write allocate
no write allocate은 로드하지 않고 메인메모리로 바로 write = 비효율적임
interface signals
cpu는 메모리에 엑세스할방법이 없고 무조건 캐시에 가야한다. read write할건지 바이트 하나. lw sw인지에 따라서 결정
valid, ready 얇은것들은 비트가 하나

FSM

브랜치 명령어 prediction 2 bit predictor처럼
상태가 있고 화살표가 state를 변환할때의 옵션
input은 두가지를 받는다 current state내가 현재 있는 위치와 current input
내가 있는 위치에서 어디로 갈지는 들어오는 입력에 따라 달라진다
output은 현재 state
처음에는 idle 유휴상태이고 cpu request오면 태그를 비교함 = 캐시를 엑세스함
캐시에서 가장 먼저 하는건 태그 비교. valid비트가 1이고 hit가 났으면 valid세팅하고 tag세팅하고 write면 dirty bit도 세팅한다
캐시가 hit발생하면 ready라고하고 유휴상태로 간다 캐시가 더이상 할일이 없으니까
cpu요청했는데 hit가 나지 않고 miss가 나면 아래쪽으로 간다
캐시가 미스가 났으니 main memory로 가야한다 새로운 블록은 main meory에서 가져오는 allocate 단계 준비됐다는건 메인메모리에서 캐시를 가져왔다 이번에는 무조건 hit가 난다 다시 idle상태로 간다
캐시가 miss인데 old block이 dirty면 write back으로 메모리로 보내준다
메모리 버퍼에게 데이터 던져주고 allocate으로 간다
write buffer가 더해지면 기다리지 않아도 되는데 꽉 찼을때만 기다려주면 됨

Cache coherence

캐시 일관성 문제 두개의 코어가 동일한 physical address를 공유할때
write through인 경우 cpu a와 메모리만 변경되고 cpu b는 변경되지 않았으면 일관성이 깨진다
write back인 경우에도 당장 안썼을뿐이지 언젠가는 쓸거기 때문에 일관성깨짐
snooping protocol 중요
버스 = 데이터 통로
버스에서 read write를 보고있다가 업데이트가 되면 동시에 값을 업데이트하는 방식
directory based는 directory를 보고 썼나 안썼나 확인
invalidationg snooping protocls
bus의 행동을 트래킹해서 값이 일관적으로 유지되도록 한다 캐시들 사이에서
Fallacies and pitfalls
컴파일러에서 코드를 짤때 메모리 시스템을 무시하면 안된다
cpu의 bottleneck은 메모리의 영향을 크게 받는다. 고려해서 알고리즘을 짜면 로직의 성능을 향상시킬수있다
byte addressing과 mutliword blocksize를 고려해야한다 offset을