티스토리 뷰
source: https://en.wikipedia.org/wiki/Cache_pollution
실행하고 있는 프로그램이 CPU 캐시로 불필요하게 데이터를 적재load시키는 상황을 cache pollution이라고 한다.
불필요한 데이터를 캐시에 적재하면, 의미있는 데이터가 메모리 구조상 낮은 레벨에 적재되어 성능이 낮아진다.
예를 들어 멀티코어 프로세서에서 코어들이 캐시를 공유해서 쓴다면 어떤 코어의 캐시 블락이 다른 코어에서 가져온 블락으로 대체될 수도 있고, prefetched block이 demand-fetched block으로 바뀔 수도 있다.
T[0] = T[0] +1;
for (i=0; i<sizeof(CACHE); ++i)
C[i] = C[i] + 1;
T[0] = T[0] + C[sizeof(CACHE)-1];
캐시에는 레벨이 없고, 모든 데이터가 캐시에 적재 가능하고, 캐시는 잠겨져있지 않고, 교체 정책이 pseudo-LRU이며 캐시의 set associativity는 N이라고 가정한다.
T[0]을 메모리에서 캐시로 가져온다. 루프 문 안에서 캐시 전체의 값을 채우게 된다. 그러면 T[0]을 가지고 있던 캐시 역시 다른 값으로 바뀌게 된다. 프로그램이 T[0]을 요구하면 캐시에는 그 값이 없으므로 miss다. 따라서 캐시 controller는 다시 메인 메모리에 접근하여 T[0]을 가져와야 한다.
순서를 바꾸어 cache pollution을 해결할 수 있다.
for (i=0; i<sizeof(CACHE); ++i)
C[i] = C[i] + 1;
T[0] = T[0] +1;
T[0] = T[0] + C[sizeof(CACHE)-1];
'컴퓨터' 카테고리의 다른 글
Cache Interference (0) | 2022.01.04 |
---|---|
Time Sharing (0) | 2022.01.03 |
멀티 코어 프로세서의 두 가지 종류 (0) | 2022.01.03 |
Data Striping (0) | 2021.12.30 |