본문 바로가기

Computer Science/Computer Architecture

[Computer Architecture] Cache Memory: 성능 향상

+ 한국항공대학교 길현영 교수님의 컴퓨터구조론 과목 내용을 정리한 글입니다.

캐시 메모리 실패(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 -> 적중률↓ (용량 실패와 충돌 실패 증가)

- 다양한 블록 크기 및 사상 방식 등의 활용 불가

 

+ 일반적으로 캐시 용량이 큰 것이 성능 향상에 좋다.

n- 방향 집합마다 캐시 용량에 따른 실패율 변화

캐시 연관도 (집합 연관 사상에서 집합의 크기)

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차 캐시에 비해 접근 시간에 대한 부담이 적다.

(캐시 용량과 블록 크기를 크게)