기술(IT)

CPU 캐시(CPU Cache) 캐시 계층

2019. 10. 7.
728x90

프로세서의 캐시 계층
현대의 프로세서는 여러 개의 상호 작용하는 온칩 캐시를 가지고 있다. 특정 캐시의 작동은 캐시 크기, 캐시 블록 크기, 집합의 블록 수, 캐시 세트 교체 정책 및 캐시 쓰기 정책)으로 완전히 지정할 수 있다. 특정 캐시의 모든 캐시 블록은 크기가 같고 연관성이 같지만, 일반적으로 하위 레벨 캐시(레벨 1 캐시라고 함)는 블록 수가 적고 블록 크기가 작으며 집합의 블록 수는 적지만 접근 시간이 매우 짧다. 하이거 레벨 캐쉬(즉, 레벨 2 이상)는 점진적으로 블록 수가 많고, 블록 크기가 크며, 집합의 블록 수가 더 많고, 접근 시간이 비교적 길지만, 여전히 메인 메모리보다 훨씬 빠르다. 캐시 항목 교체 정책은 프로세서 설계자가 구현하도록 선택한 캐시 알고리즘에 의해 결정된다. 어떤 경우에는 다른 종류의 작업 부하에 대해 복수의 알고리즘이 제공되기도 한다.

전문 캐시
파이프라인 CPU는 명령 가져오기, 가상-물리적 주소 변환 및 데이터 가져오기 등 파이프라인의 여러 지점에서 메모리에 액세스한다(고정 RISC 파이프라인 참조). 자연 설계는 이러한 지점 각각에 대해 서로 다른 물리적 캐시를 사용하는 것이므로, 파이프라인의 두 지점을 서비스하기 위해 어떤 물리적 리소스도 예약할 필요가 없다. 따라서 파이프라인은 자연스럽게 각각 특정 역할에 특화된 최소 세 개의 개별 캐시로 끝나게 된다.

피해자 캐시
피해자 캐시는 교체 시 CPU 캐시에서 퇴출된 블록을 고정하는 데 사용되는 캐시다. 피해자 캐시는 메인 캐시와 리필 경로 사이에 있으며, 메인 캐시에서 퇴출된 데이터 블록만 보관한다. 피해자 캐시는 보통 완전히 연관되어 있으며, 충돌 누락의 수를 줄이려고 한다. 일반적으로 사용되는 많은 프로그램들은 모든 접속자에 대한 연관 매핑을 요구하지 않는다. 실제로 프로그램의 메모리 액세스 중 적은 부분만이 높은 연관성을 필요로 한다. 피해자 캐시는 이러한 접근에만 높은 연관성을 제공함으로써 이 속성을 이용한다. 

추적 캐시
캐시 전문화의 더 극단적인 예 중 하나는 Intel Pentium 4 마이크로프로세서에 있는 추적 캐시(실행 추적 캐시라고도 함)이다. 추적 캐시는 이미 가져오고 해독된 명령의 흔적을 저장하여 명령 가져오기 대역폭을 높이고 전력 소비량을 줄이는 메커니즘이다. 추적 캐쉬는 명령어가 디코딩된 후 또는 삭제된 후 저장한다. 일반적으로 개별 기본 블록 또는 동적 명령 추적을 나타내는 그룹의 추적 캐시에 지침이 추가된다. 펜티엄 4의 추적 캐시는 x86 명령 해독에 따른 마이크로 작동을 저장하여 마이크로 작동 캐시의 기능도 제공한다. 이것을 가지고, 다음 번에 지시가 필요할 때, 그것은 다시 마이크로 ops로 해독될 필요가 없다.

병합 캐시 쓰기(WCC)
Write Coalescing Cache는 AMD의 Bulldozer 마이크로아키텍처에 있는 L2 캐시의 일부인 특수 캐시다. 모듈에 있는 두 L1D 캐시의 스토어는 WCC를 통해 버퍼링되고 병합된다. WCC의 과제는 L2 캐시에 대한 쓰기 횟수를 줄이는 것이다.

마이크로 작동 캐시
마이크로 작동 캐시는 명령 디코더 또는 명령 캐시에서 직접 수신한 디코딩된 명령의 마이크로 작동을 저장하는 전문 캐시다. 명령을 해독해야 할 때,  캐시는 캐시된 경우 다시 사용되는 디코딩된 형태를 점검한다. 사용할 수 없는 경우, 명령은 디코딩된 후 캐시된다. 이후 인텔은 샌디 브리지 프로세서와 아이비 브리지와 하스웰과 같은 연속적인 마이크로 아키텍처에  캐시를 포함시켰다. AMD는 그 Zen에 캐시를 구현했다. 완전한 사전 디코딩된 지침을 가져오면 가변 길이 복합 명령을 보다 간단한 고정 길이 마이크로 작동으로 반복 디코딩할 필요가 없어지며, 가져온 명령을 예측, 가져오기, 회전 및 정렬하는 과정을 단순화한다.  캐시는 가져오기 및 디코딩 하드웨어를 효과적으로 오프로드하여 전력 소비를 줄이고 디코딩된 마이크로 작동의 프런트엔드 공급을 개선한다. 또한  캐시는 디코딩된 마이크로 오퍼레이션을 백엔드에 보다 일관되게 전달하고 CPU의 가져오기 및 디코딩 로직의 다양한 병목 현상을 제거하여 성능을 향상시킨다. 캐시는 추적 캐시와 많은 유사점을 가지고 있지만,  캐시가 훨씬 단순해서 더 나은 전력 효율성을 제공하므로 배터리 구동 장치에 구현하는 데 더 적합하다. 전력 비효율성으로 이어지는 추적 캐시의 주요 단점은 캐슁을 결정하고 동적으로 생성된 명령 추적을 재사용하는 데 필요한 하드웨어 복잡성이다.

분기 대상 캐시
분기 대상 캐시 또는 분기 대상 명령 캐시는 처음 몇 개의 명령을 가져온 분기의 목적지에 보관하는 전문화된 캐시다. 메모리 시스템은 CPU 없이도 CPU를 만족시킬 수 있을 만큼 빠르게 명령을 전달할 수 있기 때문에 일반적인 명령 캐시가 필요하지 않은 저전력 프로세서에 의해 사용된다. 그러나 이는 순차적으로 연속적인 지시에만 적용된다. 새 주소에서 명령 가져오기 재시작에는 여전히 몇 사이클의 지연이 필요하므로 제어 전송 후 몇 사이클의 파이프라인 버블이 발생한다. 분기 대상 캐시는 대부분의 분기 이후 지연을 방지하는 몇 가지 사이클에 대한 지침을 제공한다. 이를 통해 기존의 풀타임 명령 캐시에 비해 훨씬 작은 캐시로 풀 스피드 작업을 할 수 있다.

스마트 캐시
스마트 캐시는 복수의 실행 코어에 대한 레벨 2 또는 레벨 3 캐싱 방법으로, 인텔이 개발했다. 스마트 캐시는 멀티 코어 프로세서의 코어 간에 실제 캐시 메모리를 공유한다. 전용 코어당 캐시와 비교하여, 모든 코어가 캐시 공간의 동일한 부분을 필요로 하는 것은 아닐 때 전체 캐시 누락률은 감소한다. 따라서 하나의 코어는 다른 코어가 비활성 상태인 경우 전체 레벨 2 또는 레벨 3 캐시를 사용할 수 있다. 또한, 공유 캐시를 사용하면 서로 다른 실행 코어 간에 메모리를 더 빠르게 공유할 수 있다.

다단계 캐시
또 다른 문제는 캐시 대기 시간과 적중률 사이의 근본적인 절충이다. 캐시가 크면 적중률이 더 높지만 대기 시간이 더 길다. 이러한 절충을 해결하기 위해, 많은 컴퓨터들은 더 크고 느린 캐시로 백업된 작은 고속 캐시와 함께 다양한 수준의 캐시를 사용한다. 일반적으로 멀티 레벨 캐시는 가장 빠른 레벨 1(L1) 캐시를 먼저 확인하여 작동하며, 그것이 부딪히면 프로세서가 고속으로 진행한다. 이 작은 캐시가 누락되면 외부 메모리에 액세스하기 전에 다음으로 빠른 캐시(레벨 2, L2)를 체크한다. 메인 메모리와 가장 빠른 캐시의 대기 시간 차이가 커짐에 따라, 일부 프로세서는 최대 세 가지 수준의 온칩 캐시를 활용하기 시작했다. 가격에 민감한 설계는 이것을 이용하여 전체 캐시 계층을 칩으로 끌어 당겼지만, 2010년대까지 성능이 가장 뛰어난 설계 중 일부는 4번째 캐시 레벨로서 eDRAM에 구현되어 멀티 칩 모듈에 탑재되는 큰 오프 칩 캐시를 갖는 것으로 돌아왔다. 마지막으로, 메모리 계층의 다른 쪽 끝에서는 CPU 레지스터 파일 자체가 시스템에서 가장 작고 빠른 캐시로 간주될 수 있는데, 예를 들어, 예를 들어, 루프 보그 최적화를 위해 메인 메모리에서 검색된 값을 고정하기 위해 레지스터를 할당하기 때문에 대개 컴파일러에 의해 소프트웨어에서 예약된다는 특수한 특성을 가지고 있다. 그러나 레지스터의 이름을 바꾸면서 대부분의 컴파일러 레지스터 할당은 런타임에 하드웨어에 의해 레지스터 뱅크로 동적으로 재할당되어 CPU가 잘못된 데이터 종속성을 깨뜨릴 수 있도록 하여 파이프라인 위험을 완화한다.

멀티 코어 칩
코어가 여러 개 있는 칩을 고려할 때, 캐시를 각 코어에 대해 공유해야 하는지 아니면 로컬로 해야 하는지에 대한 의문이 있다. 공유 캐시를 구현하면 필연적으로 더 많은 배선 및 복잡성이 발생한다. 그러나 코어보다는 칩당 캐시를 하나씩 갖는 것이 필요한 공간을 크게 줄여 더 큰 캐시를 포함할 수 있다. 일반적으로 L1 캐시를 공유하는 것은 바람직하지 않다. 왜냐하면 결과적으로 대기 시간이 증가하면 각 코어 실행 속도가 단일 코어 칩보다 상당히 느려지기 때문이다. 그러나, 가장 높은 수준의 캐시에 대해서는, 메모리에 액세스하기 전에 마지막으로 호출한 캐시의 경우, 하나의 코어가 전체 캐시를 사용할 수 있도록 허용하고, 다른 프로세스나 스레드가 캐시된 데이터를 공유할 수 있도록 하여 데이터 중복성을 감소시키며, 활용된 캐시 코어의 복잡성을 줄이는 등의 여러 가지 이유로 글로벌 캐시를 갖는 것이 바람직하다.집행 절차 예를 들어 3단계의 8코어 칩은 각 코어에 대한 L1 캐시, 각 코어 쌍에 대한 중간 L2 캐시 및 모든 코어 간에 공유되는 L3 캐시를 포함할 수 있다. 메모리 액세스 전에 호출되는 공유 최상위 캐시를 보통 마지막 수준 캐시(LLC)라고 한다. 메모리 주소의 특정 범위를 다루는 여러 개의 조각으로 자르고 독립적으로 접근할 수 있는 LLC를 포함하여 LLC가 여러 개의 코어 사이에 공유될 때 병렬의 수준을 높이기 위해 추가 기법이 사용된다.

배타적 대 포괄적
다단계 캐시는 새로운 설계 결정을 도입한다. 예를 들어, 일부 프로세서에서 L1 캐시의 모든 데이터는 L2 캐시의 어딘가에 있어야 한다. 이 캐시는 엄격히 포괄적이라고 불린다. 다른 프로세서(AMD Athlon과 같은)는 독점 캐시를 가지고 있다. 즉, 데이터는 L1과 L2 캐시의 대부분에 있어야 하며, 두 캐시 모두에 있어서는 안 된다. 다른 프로세서(Intel Pentium II, III 및 4)는 L1 캐시의 데이터도 L2 캐시에 상주할 것을 요구하지 않는다. 이 중간 정책에 대해 보편적으로 받아들여지는 이름은 없다. 두 개의 흔한 이름은 "비독점"과 "부분 포함"이다. 독점 캐시의 장점은 더 많은 데이터를 저장한다는 것이다. 이러한 이점은 독점 L1 캐시가 L2 캐시에 필적할 경우 더 크고, L2 캐시가 L1 캐시에 비해 몇 배 더 클 경우 감소한다. L1이 놓치고 L2가 접근에 부딪히면, L2의 타격 캐시 라인은 L1의 라인과 교환된다. 이 교환은 단순히 L2에서 L1로 라인을 복사하는 것보다 훨씬 더 많은 작업이며, 이것이 포괄적인 캐쉬가 하는 일이다. 엄격히 포함된 캐시의 한 가지 장점은 외부 장치 또는 다중 프로세서 시스템의 다른 프로세서가 프로세서에서 캐시 라인을 제거하고자 할 때 프로세서가 L2 캐시를 확인하도록 하면 된다는 것이다. 포함을 강제하지 않는 캐시 계층에서는 L1 캐쉬도 점검해야 한다. 단점으로서 L1 캐시와 L2 캐시의 연관성 사이에는 상관관계가 있다: L2 캐시가 최소한 모든 L1 캐시를 함께 캐싱하는 만큼 많은 방법을 가지고 있지 않다면, L1 캐시의 효과적인 연관성은 제한된다. 포괄적 캐시의 또 다른 단점은 L2 캐시에 퇴거가 있을 때마다 L1의 해당 라인도 포괄성을 유지하기 위해 퇴거해야 한다는 것이다. 이것은 꽤 많은 작업이며, 더 높은 L1 결손률을 초래할 것이다.
포함 캐시의 또 다른 장점은 큰 캐시가 더 큰 캐시 라인을 사용할 수 있어 보조 캐시 태그의 크기를 줄일 수 있다는 것이다. 보조 캐시가 1차 캐시보다 큰 크기 순서이고 캐시 데이터가 캐시 태그보다 큰 크기 순서인 경우, 저장된 이 태그 영역은 L2에 L1 캐시 데이터를 저장하는 데 필요한 증분 영역과 비교할 수 있다.

더 많은 계층
다른 프로세서는 다른 종류의 예측 변수를 가지고 있으며, 향후 프로세서에서 다양한 전문 예측 변수가 번성할 가능성이 있다. 이러한 예측 변수는 계산에 비용이 많이 드는 정보를 저장한다는 점에서 캐시다. 예측 변수를 논의할 때 사용되는 용어의 일부는 캐시에 대한 용어와 동일하지만(분기 예측 변수의 적중량을 말한다), 예측 변수는 일반적으로 캐시 계층의 일부로 간주되지 않는다. K8은 지침과 데이터 캐시를 하드웨어에서 일관성을 유지하며, 이는 스토어가 상점 지침에 따라 밀접하게 지시하는 것은 다음 지침을 변경한다는 것을 의미한다. 알파와 MIPS 제품군의 프로세서와 같은 다른 프로세서는 명령 캐시를 일관성 있게 유지하기 위해 소프트웨어에 의존해왔다. 프로그램이 일관성을 확보하기 위해 운영 체제 시설을 호출할 때까지 상점들은 안내 스트림에 나타나지 않는다.

LIST

'기술(IT)' 카테고리의 다른 글

DMA (Direct Memory Access)  (0) 2019.10.09
세마포어(Semaphores)  (0) 2019.10.08
CPU 캐시(CPU Cache) 주소번역  (0) 2019.10.07
CPU 캐시(CPU Cache) 정책  (0) 2019.10.06
무선 인터넷 기술 WLAN(Wireless LAN)  (0) 2019.10.05

댓글

추천 글