+ 한국항공대학교 길현영 교수님의 컴퓨터구조론 과목 내용을 정리한 글입니다.
캐시 메모리 실패(Miss) 사례 유형: 3C
캐시 성능 향상을 위한 방법으로 캐시 실패율을 낮추기 위해 파악해야한다.
1. 강제 실패 (Compulsory Miss, Cold Miss, First Reference Miss)
= 해당 메모리 블록의 최초 접근에 의한 캐시 Miss이다.
+ 블록 크기를 크게 하거나, 가장 접근 가능성이 큰 블록의 Prefetch(미리 가져오기)로 감소시킬 수 있다.
+ 캐시 사이즈를 키워도 의미가 없다.
2. 용량 실패 (Capacity Miss)
= 캐시 메모리의 유한한 용량 때문에 발생한다.
- 블록 교체 후 다시 그 블록을 가져올 때 발생한다. (캐시 용량 < 프로그램 크기)
3. 충돌 실패 (Collission Miss)
= 다수의 블록이 동일한 집합/블록에 사상될 때 발생한다. (집합 연관 사상 or 직접 사상에서 발생)
캐시 메모리의 성능 향상
캐시 성능의 평가 기준: 캐시 적중률과 캐시 유효 접근 시간
적중률 = 캐시 메모리의 적중 횟수 ÷ 전체 메모리의 참조 횟수
유효 접근 시간
h = 캐시 메모리 적중률
(1 - h) = 캐시 메모리 실패율
t(cache) = 캐시 메모리 적중 시 걸린 시간 (캐시 메모리에서 해당 블록을 가져오는데 걸리는 시간)
t(penalty) = 캐시 메모리 실패 시 걸린 시간 (하위(메인) 메모리에서 해당 블록을 가져오는데 걸리는 시간)
+ t(penalty) = t(memory) + t(transfer) = 메모리 접근 시간 + 블록 전송 시간
< 예제 >
아래 조건에 따라, 캐시 메모리가 있을 때의 성능 향상도를 구하시오. (시간)
조건 1. 캐시와 메인 메모리에 접근하는데 각각 1사이클과 10 사이클이 필요하다.
- 명령어 캐시와 데이터 캐시는 모두 접근 시 1 사이클이 걸린다.
조건 2. 캐시 적중률은 명령어의 경우 95%, 데이터의 경우 90%이다.
조건 3. 벤치마크 프로그램은 100개의 명령어를 실행하고, 그 중 30%가 Memory Access 연산이다.
(Load, Store)
캐시 메모리가 없는 경우
= 명령어 100개 인출 시간 + 그 중 30개의 명령어 실행 시 데이터(피연산자) 접근 시간
= 메인 메모리에서 명령어 인출 + 명령어 실행 시 메인 메모리에 접근
=> 10 × 100 + 10 × 30 = 1300 사이클
캐시 메모리가 있는 경우
= 명령어 100개 인출 시간 + 그 중 30개의 명령어 실행 시 데이터(피연산자) 접근 시간
= 캐시 메모리에서 명령어 인출 + 명령어 실행 시 캐시 메모리에 접근 (실패 시 추가로 메인 메모리에 접근) => (1 + 0.05 × 10) × 100 + (1 + 0.1× 10) × 30 = 210 사이클
성능 향상
1300 ÷ 210 = 6.19배 향상
캐시 메모리의 성능 개선
데이터 접근 시간을 줄이려면?
1. 실패율을 낮춘다.
- 강제 실패를 감소 방법: 블록을 크게하거나 (공간적 Locality) 효과적인 Prefetch(미리)을 사용한다.
- 용량 실패를 감소 방법: 캐시 용량을 증가시킨다.
- 충돌 실패를 감소 방법: 연관도를 높인다. (집합 크기 증가)
+ 컴파일러를 통한 프로그램의 메모리 사용 최적화
2. 실패 패널티를 감소시킨다. (메모리 접근 시간을 줄인다.)
- 메모리 대역폭 향상, 블록 크기 줄이기, 요청한 워드 우선 전송방식 등
3. 적중 시간을 줄인다. (캐시 접근 시간을 줄인다.)
- 캐시 소용량화, 직접 사상 등
캐시 메모리의 성능 관련 요인
블록 크기
1. 증가
장점
- 공간적 Locality↑-> 적중률↑
- (캐시 안) 블록 개수↓ -> tag 메모리 양↓
단점
- 메모리 접근 시간↑ -> 캐시 Miss에 따른 패널티↑
(메모리에서 캐시로 큰 블록을 보내는 것이 더 오래 걸린다.)
- (캐시 안) 블록 개수↓ -> 시간적 Locality↓ (아까 교체된 블록을 다시 필요로 할 경우)
2. 감소
장점
- 메모리 접근 시간↓ -> 캐시 Miss에 따른 패널티↓
(메모리에서 캐시로 작은 블록을 보내는 것이 더 빠르다.)
- (캐시 안) 블록 개수↑ -> 시간적 Locality↑
단점
- 공간적 Locality↓ -> 적중률↓
- (캐시 안) 블록 개수↑ -> tag 메모리 양↑
캐시 용량
1. 증가
장점
- 공간적/시간적 Locality↑-> 적중률↑
- 다양한 블록 크기 및 사상 방식 등의 활용 가능
단점
- 하드웨어의 부담↑
2. 감소
장점
- 하드웨어의 부담↓
단점
- 공간적/시간적 Locality↓ -> 적중률↓ (용량 실패와 충돌 실패 증가)
- 다양한 블록 크기 및 사상 방식 등의 활용 불가
+ 일반적으로 캐시 용량이 큰 것이 성능 향상에 좋다.
캐시 연관도 (집합 연관 사상에서 집합의 크기)
1. 증가
장점
- 적중률↑
단점
- 캐시 메모리 구성의 복잡도↑(태그 길이↑) -> 적중 시간↑, 비용↑
- 용량이 작은 캐시에는 부적합
2. 감소
장점
- 작은 캐시의 경우 적합
다단계 캐시
단계 별 캐시를 사용하여 실패 패널티를 줄인다.
1차 캐시: 작지만 빠르다.
2차 캐시: 1차 캐시에 비해 크지만 느리다. (메인 메모리보다는 빠르다.)
+ 고성능 프로세서들은 3차 캐시도 보유하고 있다.
< 성능 개선 예제 >
1차 캐시만 있는 시스템에서 2차 캐시를 덧붙였을 때의 성능 개선은?
클럭 속도 = 4GHZ
메인 메모리 접근 시간 = 100ns
1차 캐시 적중 시 CPI = 1.0
1차 캐시 실패율 2% (명령어 당)
2차 캐시 실패율 = 0.5%
2차 캐시 접근 시간 5ns
기존 시스템의 전체 CPI = 기본 CPI + 명령어 당 1차 캐시 Miss 패널티 사이클
= 1.0 + 0.02 × (100ns ÷ 0.25ns) = 9 clock cycles
1 클락 사이클에 걸리는 시간 = 1 / 4GHZ = 1 / (4 × 10^9) 초 = 1 / 4 ns = 0.25ns
=> 메인 메모리에 접근하는데 걸리는 시간 100ns동안 400사이클이 소요된다.
2차 캐시를 덧붙인 시스템의 전체 CPI
= 기본 CPI + 명령어 당 1차 캐시 Miss 패널티 사이클 + 2차 캐시 Miss 패널티 사이클
= 1.0 + 0.02 × (5ns ÷ 0.25ns) + 0.005 × (100ns ÷ 0.25ns) = 3.4 clock cycles
9.0 ÷ 3.4 = 2.6
다단계 캐시 설계 시 고려 사항
1차 캐시
- Clock Cycle이 짧아지도록 적중 시 접근 시간 최소화에 중점을 둔다.
- 블록 크기를 작게 하여 실패 손실을 최소화한다.
(1차 캐시는 작기 때문에 블록 크기를 작게 해야 실패율이 낮다.)
2차 캐시
- 메모리 접근을 줄이기 위해 실패율 최소화에 중점을 둔다.
- 캐시가 하나 있는 것보다 전체 성능이 좋아지므로, 1차 캐시에 비해 접근 시간에 대한 부담이 적다.
(캐시 용량과 블록 크기를 크게)
'Computer Science > Computer Architecture' 카테고리의 다른 글
[Computer Architecture] Cache Memory: 블록 교체 & 블록 갱신 (2) | 2023.11.25 |
---|---|
[Computer Architecture] Cache Memory: Block Mapping (0) | 2023.11.25 |
[Computer Architecture] Cache Memory 개요 (2) | 2023.11.25 |
[Computer Architecture] 메모리 (0) | 2023.11.24 |
[Computer Architecture] 공격적 파이프라이닝 (1) | 2023.11.18 |