cache lab에서 trans.c를 통해 행렬을 전치시키는 작업에 있어서
cache miss가 얼마나 달라지는지 시뮬레이션해보자!
이전 포스팅
연관 포스팅
cache의 지역성을 사용하지 않은 가장 기본적인 전치 방법
A[i][j] 를 B[j][i]로 이동시키는 가장 간단한 코드이다.
위 코드는 cache의 지역성을 고려하지 않은 직관적인 코드이다.
test-trans를 실행시켜보면 전치에 사용되는 cache 모두가 s= 5, E=1, b=5 임을 알 수 있다.
E=1이므로 cache는 Direct Mapped Cache(E=1) 임을 알 수 있다.
각 set당 line이 하나만 있는 cache이다.
./driver.py를 실행시켜보면 총 3개의 행렬을 전치시키는걸 알 수 있다.
#1. 32x32 지역성을 고려한 코드
지역성을 활용하기 위해서 한 번에 8개씩 숫자를 받아와서 전치시키고 있다.
위 결과는 기본 코드를 사용해서 전치를 한 결과이다.
misses:1183, evictions:1151
위 결과는 지역성을 고려한 코드를 사용해 전치를 했을 때 miss와 eviction이 발생한 횟수이다.
기본 코드에 비해서 확실히 miss와 eviction이 줄어든것을 볼 수 있다.
#2. 64x64 지역성을 고려한 코드
지역성을 활용하기 위해서 한 번에 4개씩 받아서 전치를 하였다.
8개씩 받아서 전치를 한 경우보다 4개씩 받아서 전치를 한 경우가 miss횟수가 더 적게 나왔다.
#3. 61x67 지역성을 고려한 코드
정방 행렬이 아니므로 하나의 for문으로 지역성을 활용해서 전치시키기는 힘들어 보였다.
64x60 + 67x1 + 3x60
총 3개의 행렬로 나누어서 전치를 시켜주었다.
64x60 행렬은 한 번에 4개씩 전치시켰고, 3x60 행렬은 한 번에 3개씩 전치시켰다.
miss수가 약 1/2배가 되었다.
최종 점수는 위와 같습니다.
64x64코드와 61x67코드의 경우 점수가 좋지 않으므로 누군가는 이런식으로도 했구나 하는 참고용으로 가볍게 봐주시면 감사하겠습니다
'CS > SystemSoftware' 카테고리의 다른 글
SystemSoftware - Cache Memory #3 (0) | 2021.06.16 |
---|---|
SystemSoftware - Exceptional Control Flow #3 (0) | 2021.06.09 |
Cache Lab csim.c #1 (1) | 2021.06.07 |
SystemSoftware - Cache Memory #2 (0) | 2021.06.06 |
SystemSoftware - Cache Memory #1 (1) | 2021.06.06 |