벤치리뷰·뉴스·정보/아키텍처·정보분석

[분석정보] 캐쉬 구현 방식으로 보는 AMD와 인텔이 처한 상황

tware 2010. 11. 15. 20:00

 

3 계층 캐시의 어디에 데이터 놓을까?

 예를 들면 그림 1과 같이 1차 ~ 3 차까지 캐시를 가진 CPU를 생각해 본다. 여기서 CPU가 데이터 (명령어도 좋다) 페치를 걸 경우, 우선 1 차 캐쉬의 태그를 검색한다 (그림 1 - ①). 여기에서 찾으면 문제없이 단순히 1 차 캐시에서 데이터를 끌어 온다 (그림 1 - ②) 그것으로 좋다. 문제는 1 차 캐쉬에 데이터가 없는 경우 (캐시 누락)이다.

 

 

[그림1] 1 차 캐쉬에서 히트 한 경우 데이터 (빨간색 사각형)의 움직임


 그림 2는 2 차 캐시에서 히트 한 경우 다. 먼저 기본 태그를 참조 (그림 2 - ③) 여기에 없는 것으로 확인되면 다음은 2 차 태그를 참조한다 (그림 2 - ④). 2 차 태그에서 발견되면 2 차 캐시에서 데이터를 가져 오고 (그림 2 - ⑤)와 함께 1 차 캐시도 캐시 필 (데이터 복사)을 수행 (그림 2 - ⑥).

 

 

[그림 2] 2 차 캐시 히트했을 경우 데이터의 움직임


 이것은 1 차 미스 / 2 차 미스 / 3 차 히트의 경우에도 마찬가지이다 (그림 3). 이번에는 먼저 기본 태그 (그림 3 - ⑦) / 2 차 태그 (그림 3 - ⑧) / 3 차 태그 (그림 3 - ⑨) 순으로 참조 3 차 태그에서 발견되면 거기에서 인출한다 (그림 3 - ⑩)와 함께 1 차 캐쉬의 필도 행한다 (그림 3 - ⑪).

 

 

[그림 3] 3 차 캐시 히트했을 경우 데이터의 움직임


 문제는 이 1 차 / 2 차 / 3 차 캐시가 어떤 타이밍에 들어가는지 이다. 일반적으로 CPU는 "Implicit Prefetch" (묵시적 프리페치)라는 기구가 이용된다. 예를 들어 그림 4와 같은 구조다.

 

 

 

[그림 4] Implicit Prefetch의 개념도. 진한 빨강이 원하는 메모리로, 실제로는 빨강을 포함하여 7 라인 분이 캐시에 저장


 CPU가 메모리 주소의 인출을 요구하고 1 차 / 2 차 / 3 차와 모든 캐시가 적중하지 않는 경우를 생각해 본다. 이 경우 CPU는 메모리 주소를 사용하여 메모리 액세스 하지만, 일반적으로 이때에는 1 라인 분의 메모리 가져 오기 (취득했다고 생각한다). 그러나 실제로는 지정된 주소에서 7 라인 분의 메모리를 취득해 1 차 캐시는 목적 라인을, 2 차 캐시는 원하는 라인에 이어 2 라인, 3 차 캐시는 계속되는 4 라인을 동시에 저장 메모리 가져 오기 방법을 한다.

 그러면 예를 들어 1 차 캐쉬에 저장한 라인을 다 사용해도 그 다음 영역은 L2 캐시, 이는 연속적인 영역은 3 차 캐시에 이미 받아 들여지고 있다. 그래서 최소한의 지연 시간으로 7 라인 분까지 액세스 할수 있게 된다.

 덧붙여서, 이것은 어디 까지나 개념이며, 실제 구현 방법은 다른 것이다. 예를 들어 인텔의 경우 "Pentium M" "Pentium 4"까지 이용되는 방법과 Core 마이크로 아키텍처에 채택 된 방법은 특히 2 차 / 3 차 캐시에 대한 캐시 필 방법이 약간 다르다. 같은 메이커의 CPU에서도 아키텍처에 이 부분의 방법론은 변화 할 수 있다.

 

 

또 하나의 프리페치 기술 Explicit Prefetch

 Implicit Prefetch과는 다른 방법으로 "Explicit Prefetch"(명시적 프리페치)라는 방법도있다. Implicit Prefetch는 어디 까지나 메모리 액세스 되는 방법 등에서 캐시 컨트롤러가 "다음은 이 부분을 프리페치 하자" 라고 추정하고 행하는 것이다. 그래서 액세스 패턴에 따라 반드시 잘 프리페치가 되는 것은 아니다.

 그러나 프로그램 안에서 명시적으로 프리 페치를 거는 "프리 페치 명령어"라는 캐시 제어 명령으로 사용하는 방법도 있다. 이것이 Explicit Prefetch의 개념이다. 필자의 기억이 맞다면, 이것은 x86 CPU에 탑재 된 것은 AMD의 "Enhanced 3DNow!"처음에 이어 인텔도 'SSE2'에서 이를 지원했다.

 프리페치 명령어를 사용하면 프로그램이 캐시에 수중에 넣어두고 싶은 메모리 영역을 명시적으로 지정하고 강제로 2 차 / 3 차 캐시에 수중에 넣는. 무엇보다 "얼마나 저장할 것인지" 라고 하는 것은 당연히 그 CPU가 수집한 데이터를 처리하는 데 필요한 시간과 2 차 / 3 차 캐시 용량에도 관계되어 있다.

 용량이 적은 캐시에서 화려하게 프리페치 해도 소용 없다. 반대로 대용량 L3 캐시를 탑재하는 요즈음의 CPU로, 16KB 정도의 크기를 아기자기 프리 페치해도 성능 개선에는 그다지 도움이 되지 않는다. 따라서 Explicit Prefetch는 특정 CPU 아키텍처 용으로는 좋은 방법이지만, 일반 (즉 어떤 CPU에서 작동하는지 모르는) 프로그램 상대로 효과를 발휘하기 어려운 것 같은 것이다.

 여담이지만, x86 CPU는 Implicit Prefetch를 "Hardware Prefetch" Explicit Prefetch는 "Software Prefetch" 라고 부르는 것이 일반적이다. Implicit Prefetch는 캐시 컨트롤러 (및 연산 파이프 라인의 Prefetcher)가 하드웨어 적으로 실행하기 때문에 Hardware Prefetch. 이에 비해 Implicit Prefetch는 프리페치 명령, 즉 소프트웨어에서 실행하기 때문 Software Prefetch 인 셈이다.

 


캐시 데이터 보유 방법은 두 가지 방법으로 나누어져 있다

 그런데 이전 페이지의(원글은 3페이지로 되어 있는 기사 입니다. 위의 그림 1.2.3) 그림 1~3은 "Inclusive Cache"(종합 캐시, 포괄적 캐쉬)라는 방법이다. 이에 비교되는 것이 "Exclusive Cache" (배타적 캐시) 또는 "Victim Cache"라는 기법이다. x86에서 볼 때 AMD의 "K7"(Athlon) 이후의 아키텍처는 모든 Victim Cache를 채용하고 그외 (인텔 / VIA, AMD의 "K6" 시리즈까지 제품 등)은 Inclusive Cache를 채용했다.

 양자의 차이는 무엇인가? 쉽게 형식화 한 것이 그림 5-6이다. 그림 5가 Inclusive Cache로 그림 6이 Exclusive Cache이다. 이해하기 어려울지도 모르지만, 이를테면 "동일한 데이터를 여러 캐시에서 유지"것이 Inclusive Cache, 보유하지 않는 것이 Exclusive Cache 이다. 이것은 캐시의 이용 효율을 중시하거나 액세스시 대기 시간을 중시하는 것의 차이이다.

 

 

 

[그림 5] 그림 5 Inclusive Cache에서 데이터 잡는 방법.

1 차 캐쉬와 동일한 데이터가 2 차 / 3 차 캐시에 들어있다

 

 

[그림 6] 그림 6 Exclusive Cache에서 데이터 잡는 방법.

1 차 캐시의 데이터는 2 차 / 3 차 캐시에는 없다.


 Inclusive Cache의 경우, 예를 들면 1차 미스 / 2차 미스 / 3 차 히트(적중)하는 상황이라면 3차 캐시 데이터가 그대로 1차 캐시 캐시 필된다 (아키텍처에 따라 2차 캐시도). 이 때, 3차 캐시에 들어 있던 데이터는 기본적으로 그대로다. 그림 5로 말해서, 하단의 단색 부분이 이에 해당한다. 이 방식의 유리한 점은 로드시의 지연 시간을 단축 할 것이다.

 1 차 미스 / 2 차 미스 / 3 차 히트의 경우 동작의 흐름을 보면 이렇게 된다.

① 1 차 태그를 검색 → 1 차 캐시 미스
② 2 차 태그를 검색 → 2 차 캐시 미스
③ 3 차 태그를 검색 → 3 차 캐시 히트
④ 3 차 캐시에서 데이터를 가져 오는 CPU 파이프 라인에 통합
⑤ 페치 된 데이터를 1 차 캐쉬도 필
⑥ 페치 된 데이터를 L2 캐시도 필
 ④ ~ ⑥은 실질적으로 병행하여 실시 할수 있다. 한편, 기록은 그만큼 조금 까다롭다. 예를 들어 1차 / 2차 / 3차에서 보유하고 있는 데이터를 덮어 쓸 경우 그 절차는 이렇게된다.

① 1 차 태그를 검색 → 1 차 캐쉬 히트라면 그 라인을 업데이트
  1 차 캐시 미스라면 1 개 라인을 비우고, 거기에 다시 데이터를 필
② 2 차 태그를 검색 → 1 차 캐쉬 히트라면 그 라인을 업데이트
  L2 캐시 미스라면 1 개 라인을 비우고, 거기에 다시 데이터를 필
③ 3 차 태그를 검색 → 3 차 캐시 히트라면 그 라인을 업데이트
  L3 캐시 미스라면 1 개 라인을 비우고, 거기에 다시 데이터를 필
④ 3 차 캐시에서 다시 데이터를 메모리 컨트롤러를 통해 메모리에 반영
 캐시 컨트롤러를 만드는 방법에 따라서는 ② ~ ④를 동시에 진행할 수 있는 가능성도 있지만,로드 보다는 조금 까다롭다. 그럼에도 불구하고 이것은 아직 간단한 편이다

 

 

그러면 이것이 Exclusive Cache 라면 어떻게 될까? 이전과 마찬가지로 1 차 미스 / 2 차 미스 / 3 차 공격의 경우 로딩에서 보자 (그림 7).

① 1 차 태그를 검색 → 1 차 캐시 미스
② 2 차 태그를 검색 → 2 차 캐시 미스
③ 3 차 태그를 검색 → 3 차 캐시 적중
④ 3 차 캐시에서 데이터를 가져 오는 CPU 파이프 라인에 통합
⑤ 1 차 캐쉬에서 리필 대상 1 라인 분을 일단 다른 위치에 유지
⑥ 인출 된 데이터를 ⑤에서 비운 라인에 필
⑦ 2 차 캐시에서 리필 대상 1 라인 분을 일단 다른 위치에 유지
⑧ ⑤ 유지 한 데이터를 ⑦에서 비운 위치에 필
⑨ ⑦에서 대피 한 데이터를 ④에 의해 빈 라인에 저장

 

 

 

[그림 7] Exclusive Cache에서 캐시 데이터 교환의 이미지

 

 

[그림 8] 교체 후 각 캐시 상태


 마지막으로 그림 8과 같이 캐시의 데이터 잡는 방법이 바뀌는 것이 Exclusive Cache 동작이 된다.

 물론 이것은 상당히 시간이 많이 걸리는 작업이다. ① ~ ④까지 Inclusive Cache와 같은 동작이지만, ⑤ ~ ⑨가 완전히 다른 셈이다. 물론 이론적으로 ⑤ ~ ⑨까지의 처리는 ④ 후에 행할 수 있지만 (외관상 CPU 파이프 라인의 지연 시간 증가되지 않는다),이 처리는 매 사이클마다 발생한다. 예를 들어, 이전 사이클에서 일단 L2 캐시 대피시킨 것 데이터를 다음 사이클에서 인출하려고 하는 경우를 생각하면, 전주기 ⑧이 완료 될 때까지 다음주기의 2 차 태그를 검색 할수 없다.

 요약하면, 형태는 다르지만 CPU 파이프 라인 스톨 (관련 기사)이 발생하는 것이다, 너무 시간이 걸리는 것은 적절하지 않다. 그 결과, 어느 정도 시간이 걸려도 ⑤ ~ ⑨는 한꺼번에 실행하는 것이 안전하므로 결과적으로 캐시 액세스시 대기 시간 증가로 연결된다. Inclusive Cache는 이러한 가능성이 없기 때문에 대기 시간은 계속 짧아진다.


AMD가 Exclusive Cache를 선택하는 이유는?

 그럼 왜 AMD는 이러한 대기 시간 증가 (= 성능 저하)의 약점을 가지며 Exclusive Cache를 구현했는지? 그것은 캐시의 이용 효율 향상을 도모 할 수 있기 때문이다. 같은 4코어 세대의 AMD Phenom II와 인텔 Core i7 (네할렘)의 데이터 / 통합 캐시의 크기를 비교하여 본다.

                     Phenom II    Core i7
1 차 캐쉬    64KB / 코어    32KB / 코어
2 차 캐시    512KB / 코어   256KB / 코어
3 차 캐시    6MB               8MB
총 용량       8.25MB          9.125MB


 약간 Phenom II 쪽이 총 캐시 용량은 적은데, Phenom II는 이론상이 8.25MB을 최대한 이용할 수 있다. 캐시간에 중복 데이터를 가질 수 없기 때문에 전체 용량이 사용 가능한 용량이기 때문이다. 대조적으로, 인텔은 1 차 / 2 차 캐시 L3 캐시와 중복 데이터를 가지고 있을 가능성이 강하고, 결과적으로 사용 가능한 용량은 8MB ~ 9.125MB 사이의 어딘가가 된다. AMD 쪽이 효율이 좋은 가능성이 있는 셈이다.(용량상의 효율성을 말하는 것이죠. 위에도 써있지만, 간단히 용량상의 효율로는 AMD 방식이, 성능상의 효율은 인텔 방식이 좋다 라는 거죠. 또 이것은 각 레벨 캐쉬의 용량비율에서도 발생하는 문제 입니다. 인텔 쪽이 L2의 크기가 상대적으로 적죠. 인텔쪽도 L2의 크기가 더 커지면, L3 부분만큼은 바꿔야 하겠죠. L2가 커지면 중복된 데이터가 L3에 너무 많이 차지하게 되니까요.


캐쉬 얘기는 아니지만, 페넘2와 네할렘 역시 같은 45나노 입니다.(양 회사의 공정이 45나노라고 같은건 아니지만, 같은 45나노, 32나노면 같은 걸로 아는 분들이 많은데.. 각사의 공정은 다 다릅니다.) 같은 45나노이니 공정이 떨어져서 라는 말은 통하지 않겠죠. 그리고 애초에 공정과 성능 (특히 IPC)는 관계가 없습니다. 관계가 없는데 자꾸 공정 때문이다 라고 하는 분들이 계시죠. 관계가 약간 있다면 클럭 정도가 되겠죠. 또는 성능은 아니지만, 구입의 지표가 되는 전력 같은게 관계가 있겠죠. IPC는 코어의 설계와 관계된 겁니다. 같은건 아니지만 (GPU쪽은 코어가 늘어나는 쪽이라), GPU로 말하면 같은 회사의 전세대 공정의 최상급 VGA가 신세대 공정의 중급형 VGA보다 성능이 높듯이 성능이 공정과 관계가 없는 것과 같은 겁니다. 얼마나 더 많은 명령을 동시에 실행 할 수 있게 설계를 하느냐가 성능 입니다 (여기에 더해서 복잡한 연산 명령을 얼마나 더 빨리 끝내게 설계가 되었느냐 까지, 인텔의 경우 틱의 경우가(공정이전 및 개선판) 더 빠르게 처리 할 수 있게 개선하는 쪽 입니다. 어쩌면 틱에서(공정이전) 성능이 오르니까 그걸 보고 공정이 바뀌면 성능이 오르나 보다 라고 잘 못 알고 있는지도 모르겠구요.). 대신 그만큼 코어의 크기가 커지겠죠. 멀티 코어 시대라면, 그만큼 코어의 수가 줄어들게 될테구요. 작은 코어 (저성능 코어) 8개 만들 수 있는게 고성능 코어 4코어가 된다던지...)

 

[분석정보] Intel, 45nm공정의 차기 CPU Penryn 자세히 공개

 

 

[분석정보] 전면 개량이 아닌 부분 개량에 머문 Penryn

 

 

[분석정보] 모바일 절전 기능을 강화한 펜린 (Penryn)

 

 

 

[분석정보] 고속화를 가져오는 Radix-16 Divider와 shuffle Engine


 그래도 최근에는 용량 차이가 줄어든 편이다. 예를 들어 2002 년, AMD는 0.13μm 공정의 "Thoroughbred"코어 Athlon 인텔은 또한 0.13μm 공정 "Northwood" 코어 "Pentium 4"를 출시했다. 2차 캐시 크기는 Thoroughbred가 256KB, Northwood는 512KB로 거의 두배나 됐다. 두 제품을 비교해 보면 대체로 다음과 같은 경향이있다.

1.동일한 공정끼리의 비교라면 AMD의 것이 2 차 캐시 용량이 적은
2.인텔 쪽이 1년 정도 더 미세화 공정의 제품을 빨리 출시
3.CPU 코어 자체는 AMD 쪽이 다소 복잡 = 트랜지스터 수가 많고 동일한 공정이라면 다이 사이즈가 약간 큰


 성능 향상만을 생각하면 Inclusive Cache 구성 쪽이 메리트가 있다. 하지만 이를 채택 하면서 인텔과 같은 정도의 2차 캐쉬 용량이 되면 AMD의 제품은 인텔 제품보다 다이 크기가 훨씬 커진다. 즉 원가가 높아지는 상황이 될 것이다.

 이것은 가격 경쟁면에서 불리하기 때문에 동일한 정도의 다이 크기까지 억제하기 위해서는 캐시 용량을 낮게 억제 밖에 없다. 그렇게 되면 이번에는 캐시 용량 부족 때문에 이를 충당하기 위해 Exclusive Cache로 효율적인 이용을 목표로 하는 것이 AMD가 취한 전략이다. 이것은 인텔보다 먼저 미세화 공정을 사용할 수 있는 상황이 오지 않는 한, 기본적으로 변하지 않을 방침인 것이다. 기업의 경쟁력과 놓여져 있는 상황이 캐시의 구성에도 영향을 미치는 매우 의미있는 예라 할 수 있다.

 

 

2010년 11월 15일 기사 입니다.

 

 

[분석정보] CPU 고속화의 기본 수단 파이프라인 처리의 기본 1/2

 

 

[분석정보] CPU 고속화의 기본 수단 파이프라인 처리의 기본 2/2

 

 

[분석정보] 슈퍼 스칼라에 의한 고속화와 x86의 문제점은

 

 

[분석정보] 명령의 실행 순서를 바꿔 고속화 하는 아웃 오브 오

 

 

[분석정보] x86을 고속화하는 조커기술 명령변환 구조

 

 

[분석정보] CPU와 메모리의 속도 차이를 해소하는 캐시의 기초지식

 

 

 

 

[분석정보] 5W 이하의 저전력 프로세서의 개발로 향하는 Intel

 

 

 

[분석정보] intel의 듀얼 코어 CPU 1번타자 Montecito

 

[분석정보] 멀티 코어 + 멀티 스레드 + 동적 스케줄링으로 향하는 IA-64

 

 

[정보분석] Penryn의 1.5 배 CPU 코어를 가지는 차세대 CPU "Nehalem"

 

 

[고전 2002.09.12] Hyper-Threading Technology를 지원하는 HTT Pentium 4 3.06GHz