CPU 캐시
CPU cacheCPU 캐시는 메인 메모리에서 데이터에 액세스하는 평균 비용(시간 [1]또는 에너지)을 줄이기 위해 컴퓨터의 중앙 처리 장치(CPU)가 사용하는 하드웨어 캐시입니다.캐시는 프로세서 코어에 더 가까이 위치한 더 작고 빠른 메모리로, 자주 사용하는 주 메모리 위치의 데이터 복사본을 저장합니다.대부분의 CPU는 여러 캐시 레벨(L1, L2, 종종 L3 및 거의 L4)의 계층을 가지며, 명령별 캐시와 데이터별 캐시는 레벨 [2]1에서 다릅니다.캐시 메모리는 일반적으로 칩 면적별로 현대 CPU에서 가장 큰 부분을 차지하는 정적 랜덤 액세스 메모리(SRAM)로 구현되지만, SRAM은 항상 모든 레벨(I- 또는 D-캐시의 모든 레벨)에 사용되는 것은 아니며, 심지어 어떤 레벨, 때로는 나중에 또는 모든 레벨이 eDRAM으로 구현되는 것도 마찬가지입니다.
대부분의 CPU가 가지고 있는 메모리 관리 유닛(MMU)의 일부인 변환 룩사이드 버퍼(TLB)와 같은 다른 유형의 캐시(위에서 언급한 가장 중요한 캐시의 "캐시 크기"로 계산되지 않음)가 있습니다.
개요
주 메모리의 한 위치에서 읽거나 쓰려고 할 때 프로세서는 해당 위치의 데이터가 이미 캐시에 있는지 확인합니다.그렇다면 프로세서는 훨씬 더 느린 메인 메모리 대신 캐시에서 읽거나 캐시에 쓸 것입니다.
대부분의 최신 데스크톱, 서버 및 산업용 CPU에는 다음과 같은 3개 이상의 독립 캐시가 있습니다.
- 명령어 캐시
- 실행 명령어 가져오기 속도를 높이는 데 사용됩니다.
- 데이터 캐시
- 데이터 가져오기 및 저장 속도를 높이는 데 사용되며, 데이터 캐시는 일반적으로 더 많은 캐시 레벨(L1, L2 등)의 계층으로 구성됩니다. 아래의 다중 레벨 캐시도 참조하십시오.
- 번역 LEB(Translation lookaside buffer)
- 실행 명령 및 데이터 모두에 대해 가상 주소에서 물리 주소로의 변환 속도를 높이는 데 사용됩니다.명령과 데이터 모두에 액세스하기 위해 단일 TLB를 제공하거나 별도의 명령 TLB(ITLB) 및 데이터 TLB(DTLB)를 제공할 수 있습니다.그러나 TLB 캐시는 MMU(Memory Management Unit)의 일부이며 CPU 캐시와 직접 관련이 없습니다.
역사
CPU 캐시의 초기 예로는 1960년대의 Atlas[3] 2와 IBM System/360 Model[4] 85가 있습니다.캐시를 사용한 최초의 CPU는 캐시 레벨이 하나뿐이었고, 이후의 레벨 1 캐시와는 달리 L1d(데이터용)와 L1i(명령용)로 분리되지 않았습니다.1976년 IBM 801 CPU로 시작된 스플릿 [5][6]L1 캐시는 1980년대 후반에 주류가 되었고 1997년 ARMv5TE로 임베디드 CPU 시장에 진입했습니다.2015년에는 달러 미만의 SoC도 L1 캐시를 분할했습니다.또한 L2 캐시를 보유하고 있으며, 더 큰 프로세서의 경우 L3 캐시도 보유하고 있습니다.L2 캐시는 일반적으로 분할되지 않으며 이미 분할된 L1 캐시의 공통 저장소 역할을 합니다.멀티 코어 프로세서의 모든 코어에는 전용 L1 캐시가 있으며, 코어 간에 공유되지 않는 것이 일반적입니다.L2 캐시, 그리고 상위 레벨 캐시들은 코어들 간에 공유될 수 있습니다.L4 캐시는 현재 흔하지 않으며, 일반적으로 정적 랜덤 액세스 메모리(SRAM)가 아닌 별도의 다이나 칩 상의 DRAM(Dynamic Random-access Memory)입니다. 예외는 eDRAM이 L1까지 모든 캐시 레벨에 사용되는 경우입니다.역사적으로 L1은 별도의 다이(die)에도 있었지만, 다이 크기가 클수록 마지막 레벨을 제외하고 다른 캐시 레벨뿐만 아니라 통합할 수 있게 되었습니다.각 추가 캐시 레벨은 크기가 더 크고 최적화되는 경향이 있습니다.
캐시의 크기는 일반적으로 2, 4, 8, 16 등과 같습니다.KiB; 최대 MiB 크기(즉, 더 큰 비 L1의 경우)일 때, 패턴의 초기에 고장이 발생하여 크기가 두 배로 커지는 패러다임에 강요되지 않고 더 큰 캐시를 허용합니다.2008년 4월 3개의 MiB L2 캐시를 탑재한 Intel Core 2 Duo.이는 L1 캐시의 경우 훨씬 나중에 발생했는데, 일반적으로 크기가 여전히 KiB의 소수이기 때문입니다.그러나 2012년의 IBM zEC12는 예외적으로 당시로서는 이례적으로 큰 96 KiB L1 데이터 캐시를 확보했습니다. 예를 들어 IBM z13은 96 KiB L1 명령 캐시(및 128 KiB L1 데이터 [7]캐시)를, 2018년의 Intel Ice Lake 기반 프로세서는 48 KiB L1 데이터 캐시와 48 KiB L1 명령 캐시를 확보했습니다.2020년 일부 Intel Atom CPU(최대 24개 코어)는 4.5 MiB 및 15 MiB 캐시 [8][9]크기를 가지고 있습니다.
캐시 항목
데이터는 캐시 라인 또는 캐시 블록이라고 하는 고정된 크기의 블록으로 메모리와 캐시 사이에 전송됩니다.캐시 라인을 메모리에서 캐시로 복사하면 캐시 항목이 생성됩니다.캐시 항목에는 복사된 데이터뿐만 아니라 요청된 메모리 위치(태그라고 함)도 포함됩니다.
프로세서는 메모리에서 위치를 읽거나 써야 할 때 먼저 캐시에서 해당 항목을 확인합니다.캐시는 해당 주소를 포함할 수 있는 캐시 라인에서 요청된 메모리 위치의 내용을 확인합니다.프로세서가 메모리 위치가 캐시에 있는 것을 발견하면 캐시 적중이 발생한 것입니다.그러나 프로세서가 캐시에서 메모리 위치를 찾지 못하면 캐시 미스가 발생한 것입니다.캐시 적중 시, 프로세서는 캐시 라인에 있는 데이터를 즉시 읽거나 씁니다.캐시 미스의 경우, 캐시는 새 항목을 할당하고 주 메모리에서 데이터를 복사한 다음 캐시의 내용에서 요청을 이행합니다.
정책들
교체 정책
캐시 미스에 새 항목을 넣을 공간을 마련하기 위해 캐시는 기존 항목 중 하나를 제거해야 할 수도 있습니다.퇴거하기 위한 진입을 선택하기 위해 사용하는 휴리스틱을 대체 정책이라고 합니다.모든 교체 정책의 근본적인 문제는 어떤 기존 캐시 엔트리가 미래에 사용될 가능성이 가장 낮은지 예측해야 한다는 것입니다.미래를 예측하는 것이 어렵기 때문에 이용 가능한 다양한 대체 정책 중에서 선택할 수 있는 완벽한 방법이 없습니다.가장 최근에 사용된 정책(LRU) 중 하나가 가장 최근에 액세스한 항목을 대체합니다.
일부 메모리 범위를 캐시 불가로 표시하면 거의 재접속되지 않는 메모리 영역의 캐싱을 방지하여 성능을 향상시킬 수 있습니다.이를 통해 재사용 없이 캐시에 무언가를 로드하는 오버헤드를 피할 수 있습니다.캐시 항목은 컨텍스트에 따라 비활성화되거나 잠길 수도 있습니다.
정책 쓰기
데이터가 캐시에 기록되는 경우, 어떤 시점에서는 메인 메모리에도 기록되어야 합니다. 이 기록의 타이밍을 쓰기 정책이라고 합니다.쓰기-스루 캐시에서, 캐시에 쓸 때마다 메인 메모리에 쓸 때가 발생합니다.또는 쓰기-백(write-back) 또는 복사-백(copy-back) 캐시에서 쓰기는 메인 메모리에 즉시 미러링되지 않으며 캐시는 대신 쓰기한 위치를 추적하여 더럽게 표시합니다.이 위치의 데이터는 해당 데이터가 캐시에서 제거될 때만 메인 메모리에 다시 기록됩니다.이러한 이유로 쓰기-백 캐시에서 읽기 미스가 발생할 경우 서비스에 대한 두 가지 메모리 액세스가 필요할 수 있습니다. 하나는 먼저 더러운 위치를 메인 메모리에 쓰기 위해, 다른 하나는 메모리에서 새로운 위치를 읽기 위해 필요합니다.또한 쓰기-백 캐시에 아직 매핑되지 않은 주 메모리 위치에 대한 쓰기는 이미 더러운 위치를 제거할 수 있으므로 새 메모리 위치에 대한 캐시 공간을 확보할 수 있습니다.
중간 정책도 있습니다.캐시는 쓰기(write-through)일 수 있지만 쓰기는 저장소 데이터 대기열에 일시적으로 저장될 수 있으므로 일반적으로 여러 저장소를 함께 처리할 수 있습니다(버스 턴어라운드를 줄이고 버스 이용률을 향상시킬 수 있습니다).
메인 메모리로부터의 캐시된 데이터는 다른 엔티티(예를 들어, DMA(direct memory access) 또는 멀티 코어 프로세서의 다른 코어를 사용하는 주변 장치)에 의해 변경될 수 있으며, 이 경우 캐시 내의 복사본이 구식이 되거나 오래될 수 있습니다.또는 멀티프로세서 시스템의 CPU가 캐시의 데이터를 업데이트하면 다른 CPU와 연관된 캐시의 데이터 복사본이 오래되지 않게 됩니다.데이터를 일관성 있게 유지하는 캐시 관리자 간의 통신 프로토콜을 캐시 코히어런스 프로토콜이라고 합니다.
캐시성능
메모리 성능과 프로세서 성능 사이의 속도 차이가 기하급수적으로 증가하는 최근에는 캐시 성능 측정이 중요해지고 있습니다.캐시는 이러한 속도 차이를 줄이기 위해 도입되었습니다.따라서 특히 고성능 시스템에서는 캐시가 프로세서와 메모리 속도의 차이를 얼마나 잘 메울 수 있는지 파악하는 것이 중요합니다.캐시 적중률과 캐시 누락률은 이러한 성능을 결정하는 데 중요한 역할을 합니다.캐시 성능을 향상시키기 위해서는 미스 비율을 줄이는 것이 다른 단계 중에서 필요한 단계 중 하나가 됩니다.캐시에 대한 액세스 시간이 줄어들면 캐시의 성능도 향상됩니다.
CPU 스톨
캐시 라인을 기다리는 동안 CPU에서 할 일이 부족해지기 때문에 메모리에서 캐시 라인 하나를 가져오는 데 걸리는 시간(캐시 미스로 인한 읽기 대기 시간)이 중요합니다.CPU가 이 상태에 도달하면 이를 스톨(stall)이라고 합니다.CPU가 메인 메모리에 비해 빨라짐에 따라 캐시 미스로 인한 정지는 더 많은 잠재적인 계산을 대체합니다. 현대의 CPU는 메인 메모리에서 단일 캐시 라인을 가져오는 데 걸리는 시간 동안 수백 개의 명령을 실행할 수 있습니다.
이 시간 동안 CPU의 비지 상태를 유지하기 위해 다양한 방법이 사용되어 왔는데, 예를 들어 캐시 미스 데이터를 대기 중인 명령어 이후에 CPU가 독립적인 명령어를 실행하려고 시도하는 순서 외 실행 방법이 있습니다.많은 프로세서가 사용하는 또 다른 기술은 동시 다중 쓰레드(SMT)로, 첫 번째 스레드가 필요한 CPU 리소스를 사용할 수 있을 때까지 기다리는 동안 대체 스레드가 CPU 코어를 사용할 수 있습니다.
연상성
배치 정책은 캐시에서 주 메모리의 특정 항목의 복사본이 어디로 이동할지를 결정합니다.배치 정책이 복사본을 보유할 캐시의 항목을 자유롭게 선택할 수 있는 경우, 캐시는 완전 연관이라고 불립니다.다른 극단적인 경우, 주 메모리의 각 항목이 캐시의 한 곳에만 들어갈 수 있다면 캐시는 직접 매핑됩니다.많은 캐시는 메인 메모리의 각 엔트리가 캐시의 N개 장소 중 어느 하나로 이동할 수 있는 절충을 구현하며, N-way set [10]associative라고 설명됩니다.예를 들어, AMD Athlon의 레벨 1 데이터 캐시는 양방향 세트 연관성이 있습니다. 즉, 기본 메모리의 특정 위치를 레벨 1 데이터 캐시의 두 위치 중 하나에 캐시할 수 있습니다.
적절한 연관성의 가치를 선택하는 것은 균형을 유지하는 것을 포함합니다.배치 정책이 메모리 위치를 매핑할 수 있는 곳이 10개 있는 경우 해당 위치가 캐시에 있는지 확인하려면 10개의 캐시 항목을 검색해야 합니다.더 많은 장소를 확인하려면 전력 및 칩 면적이 더 많이 소요되고 잠재적으로 더 많은 시간이 소요됩니다.반면, 연관성이 높은 캐시의 경우 미스 수가 줄어 CPU의 메인 메모리 읽기 시간이 줄어듭니다(충돌 미스 참조).일반적인 지침은 직접 매핑에서 양방향으로, 또는 양방향에서 4방향으로 연관성을 두 배로 늘리면 캐쉬 크기를 두 배로 늘린 것과 거의 같은 효과가 발생한다는 것입니다.그러나 연관성이 4개 이상 증가한다고 해서 적중률이 크게 [11]향상되지는 않으며, 일반적으로 다른 이유로 수행됩니다(가상 별칭 참조).일부 CPU는 저전력 상태에서 캐시의 연관성을 동적으로 감소시킬 수 있으며, 이는 전력 절약 [12]수단으로 작용합니다.
더 나쁘지만 간단하지만 더 낫지만 복잡한 순서로:
- 직접 매핑 캐시 – 최적의 경우 시간이지만 최악의 경우 예측 불가능
- 이원 집합 연관 캐시
- 이원 비대칭 연관[13] 캐시
- 4방향 집합 연관 캐시
- 나중에 구현할 때 일반적으로 선택할 수 있는 8방향 세트 연관 캐시
- 8방향과 유사한 12방향 세트 연관 캐시
- 완전 연관 캐시 – 최적의 미스 비율이지만 소수의 항목에 대해서만 실현 가능
직접 매핑 캐시
이 캐시 조직에서는 메인 메모리의 각 위치가 캐시의 한 항목에만 들어갈 수 있습니다.따라서 직접 매핑된 캐시를 "단방향 집합 연관" 캐시라고도 할 수 있습니다.어떤 캐시 항목의 내용을 퇴거시킬지 선택할 수 없기 때문에 배치 정책을 가지고 있지 않습니다.이는 두 위치가 동일한 항목에 매핑될 경우 서로 계속해서 충돌할 수 있음을 의미합니다.단순하기는 하지만, 직접 매핑된 캐시는 관련 캐시보다 훨씬 커야 동등한 성능을 얻을 수 있으며, 이는 더욱 예측 불가능합니다.x를 캐시의 블록 수, y를 메모리의 블록 수, n을 캐시의 블록 수라 하고, x = y mod n의 도움으로 매핑을 수행합니다.
이원 집합 연관 캐시
메인 메모리의 각 위치가 캐시의 두 위치 중 하나에 캐싱될 수 있다면, 한 가지 논리적 질문은 다음과 같습니다.가장 간단하고 일반적으로 사용되는 방식은, 상기 우측 도면에 도시된 바와 같이, 메모리 위치의 인덱스 중 최하위 비트를 캐시 메모리의 인덱스로 사용하고, 각 인덱스에 대해 두 개의 엔트리를 갖는 것입니다.이 방식의 한 가지 이점은 캐시에 저장된 태그가 캐시 메모리의 인덱스에 의해 암시되는 주 메모리 주소의 해당 부분을 포함할 필요가 없다는 것입니다.캐시 태그는 비트 수가 적기 때문에 트랜지스터 수가 적고, 프로세서 회로 기판이나 마이크로프로세서 칩의 공간을 적게 차지하며, 더 빨리 읽고 비교할 수 있습니다.또한 LRU는 각 쌍에 하나의 비트만 저장하면 되기 때문에 특히 간단합니다.
사행집행
직접 매핑 캐시의 장점 중 하나는 단순하고 빠른 추측을 가능하게 한다는 것입니다.주소가 계산되면 해당 위치의 복사본이 메모리에 있을 수 있는 하나의 캐시 인덱스를 알 수 있습니다.해당 캐시 항목을 읽을 수 있으며, 태그가 실제로 요청된 주소와 일치하는지 확인을 마치기 전에 프로세서는 해당 데이터를 계속 사용할 수 있습니다.
태그 일치가 완료되기 전에 프로세서가 캐시된 데이터를 사용하도록 하는 아이디어는 연관 캐시에도 적용할 수 있습니다.힌트라고 하는 태그의 하위 집합은 요청된 주소에 매핑되는 가능한 캐시 항목 중 하나만 선택하는 데 사용될 수 있습니다.힌트에 의해 선택된 항목은 전체 태그 확인과 병행하여 사용할 수 있습니다.힌트 기법은 아래에 설명된 것처럼 주소 변환 과정에서 사용될 때 가장 효과적입니다.
이원 비대칭 연관 캐시
웨이 0에 대한 인덱스는 위와 같이 직접이지만 웨이 1에 대한 인덱스는 해시 함수로 구성되는 비대칭 [13]캐시와 같은 다른 방식이 제안되었습니다.좋은 해시 함수는 직접 매핑과 충돌하는 주소가 해시 함수와 매핑될 때 충돌하지 않는 특성을 가지므로, 병리학적 액세스 패턴으로 인해 프로그램이 예기치 않게 많은 충돌 실수를 겪을 가능성이 적습니다.단점은 해시 [14]함수 계산으로 인한 추가 지연입니다.또한, 새로운 라인을 로드하고 이전 라인을 제거할 때가 되면, 새로운 라인이 각 방식으로 서로 다른 인덱스의 데이터와 충돌하기 때문에 가장 최근에 사용된 라인을 결정하기가 어려울 수 있습니다. 비-스큐 캐시에 대한 LRU 추적은 일반적으로 설정 단위로 수행됩니다.그럼에도 불구하고, 비대칭 연관 캐시는 기존의 집합 연관 [15]캐시에 비해 큰 장점을 가지고 있습니다.
의사 연관 캐시
진정한 세트 연관 캐시는 콘텐츠 주소 지정 메모리와 같은 것을 사용하여 가능한 모든 방법을 동시에 테스트합니다.의사 연관 캐시는 가능한 각 방법을 한 번에 하나씩 테스트합니다.의사 연관 캐시의 예로는 해시-재해시 캐시와 열 연관 캐시가 있습니다.
첫 번째 방식으로 테스트한 히트를 찾는 일반적인 경우, 의사 연관 캐시는 직접 매핑된 캐시만큼 빠르지만, 직접 매핑된 캐시보다 충돌 미스율이 훨씬 낮으며, 완전 연관 캐시의 미스율에 더 가깝습니다.
멀티컬럼 캐시
직접 매핑된 캐시와 비교할 때, 집합 연관 캐시는 캐시 집합에 매핑되는 캐시 집합 인덱스의 비트 수가 줄어듭니다. 여기에는 2-way set 연관 캐시의 블록 2개와 4-way set 연관 캐시의 블록 4개가 있습니다.직접 매핑된 캐시와 비교하여 사용되지 않은 캐시 인덱스 비트는 태그 비트의 일부가 됩니다.예를 들어, 2-way set 연관 캐시는 태그에 1비트를 제공하고 4-way set 연관 캐시는 태그에 2비트를 제공합니다.다중열[16] 캐시의 기본 개념은 기존의 집합 연관 캐시처럼 집합 인덱스를 사용하여 캐시 집합에 매핑하고, 추가된 태그 비트를 사용하여 집합 내의 방식을 인덱스하는 것입니다.예를 들어, 4-way set 연관 캐시에서 두 비트는 각각 way 00, way 01, way 10 및 way 11을 인덱싱하는 데 사용됩니다.이 이중 캐시 인덱싱은 "주요 위치 매핑"이라고 불리며, 지연 시간은 직접 매핑된 액세스와 같습니다.다중 컬럼 캐시[16] 설계에 대한 광범위한 실험 결과, 주요 위치에 대한 적중률이 90%에 달하는 것으로 나타났습니다.캐시 매핑이 주 위치의 캐시 블록과 충돌할 경우, 기존 캐시 블록은 동일한 집합의 다른 캐시 방식으로 이동되며, 이를 "선택된 위치"라고 합니다.새로 색인화된 캐시 블록은 가장 최근에 사용된 MRU(most use) 블록이기 때문에, 시간적 지역성을 고려하여 멀티컬럼 캐시에서 주요 위치에 배치됩니다.다중열 캐시는 연관성이 높은 캐시를 위해 설계된 것이므로, 각 세트의 경로 수가 많으므로, 세트에서 선택한 위치를 쉽게 찾을 수 있습니다.캐시 블록의 주 위치에 대해 추가 하드웨어에 [citation needed]의해 선택된 위치 인덱스가 유지됩니다.
멀티컬럼 캐시는 높은 연관성으로 인해 높은 적중률을 유지하며, 주요 위치에서의 적중률이 높기 때문에 직접 매핑 캐시와 비교할 수 있는 낮은 대기 시간을 가집니다.멀티컬럼 캐시의 주요 위치와 선택된 위치에 대한 개념은 인텔의 방향 예측 [18]캐시 메모리인 ARM Cortex R [17]칩, IBM의 재구성 가능한 멀티웨이 연관 캐시[19] 메모리, 주소 탭 [20]비트를 기반으로 한 Oracle의 동적 캐시 대체 방식 선택 등의 여러 캐시 설계에 사용되었습니다.
캐시 엔트리 구조
캐시 행 항목은 일반적으로 다음과 같은 구조를 갖습니다.
꼬리표를 붙이다 | 데이터 블록 | 플래그 비트 |
데이터 블록(캐시 라인)에는 메인 메모리에서 가져온 실제 데이터가 들어 있습니다.태그에는 메인 메모리에서 가져온 실제 데이터의 주소(일부)가 들어 있습니다.플래그 비트는 아래에서 설명합니다.
캐시의 "크기"는 캐시가 보유할 수 있는 주 메모리 데이터의 양입니다.이 크기는 각 데이터 블록에 저장된 바이트 수에 캐시에 저장된 블록 수를 곱한 값으로 계산할 수 있습니다. (태그, 플래그 및 오류 수정 코드 비트는 캐시의 물리적 영역에 영향을 미치지만 [21]크기에 포함되지 않습니다.)
캐시 라인(메모리 블록)과 함께 사용되는 유효 메모리 주소는 태그, 인덱스 및 블록 [22][23]오프셋으로 분할(MSB ~ LSB)됩니다.
꼬리표를 붙이다 | 색인을 보다 | 블록 간격띄우기 |
인덱스는 데이터가 입력된 캐시 집합을 나타냅니다.인덱스 길이는 s 캐시 세트의 경우 ⌈ 2 ( ) ⌉ {\ _비트입니다.
블록 오프셋은 캐시 행 내에 저장된 데이터 블록 내에서 원하는 데이터를 지정합니다.일반적으로 유효 주소는 바이트 단위이므로 블록 오프셋 길이는 ⌈ 2 ( ⌉ {\ _비트이며 여기서 b는 데이터 블록당 바이트 수입니다.태그에는 주소의 가장 중요한 비트가 포함되어 있으며, 이 비트는 현재 집합의 모든 행(인덱스로 집합을 검색함)에 대해 검사되어 이 집합에 요청된 주소가 포함되어 있는지 확인합니다.그러면 캐시 적중이 발생합니다.태그 길이(비트)는 다음과 같습니다.
tag_length = address_length - index_length - block_offset_length
일부 작성자는 블록 오프셋을 단순히 "[24]오프셋" 또는 "위치"[25][26]라고 말합니다.
예
원래의 Pentium 4 프로세서는 8KiB 크기의 4방향 세트 연관 L1 데이터 캐시와 64바이트 캐시 블록을 가지고 있었습니다.따라서 8개의 KiB / 64 = 128개의 캐시 블록이 있습니다.집합의 수는 캐시 블록의 수를 연관성 방식의 수로 나눈 것과 같으며, 이로 인해 128개 / 4개 = 32개의 집합이 생성되며, 따라서 2개 = 32개의 서로 다른 인덱스가 생성됩니다.가능한 오프셋은 2 = 64개입니다.CPU 주소의 폭이 32비트이므로 태그 필드의 경우 32 - 5 - 6 = 21비트를 의미합니다.
원래의 Pentium 4 프로세서는 128바이트 캐시 블록과 함께 8방향 세트 연관 L2 통합 캐시 256KiB 크기를 가지고 있었습니다.태그 필드의 경우 32 - 8 - 7 = 17비트를 의미합니다.
플래그 비트
명령 캐시에는 캐시 행 항목당 하나의 플래그 비트(유효한 비트)만 필요합니다.유효한 비트는 캐시 블록에 유효한 데이터가 로드되었는지 여부를 나타냅니다.
전원이 켜지면 하드웨어는 모든 캐시의 모든 유효한 비트를 "무효"로 설정합니다.일부 시스템은 한 프로세서의 캐시에 있는 멀티 마스터 버스 스누핑 하드웨어가 다른 프로세서의 주소 브로드캐스트를 듣고 로컬 캐시의 특정 데이터 블록이 이제 오래된 것이므로 유효하지 않은 것으로 표시해야 함을 인식하는 경우와 같이 다른 경우에 유효한 비트를 "유효하지 않음"으로 설정합니다.
데이터 캐시에는 일반적으로 캐시 라인당 두 개의 플래그 비트(유효 비트와 더티 비트)가 필요합니다.더티 비트 세트가 있다는 것은 메인 메모리("dirty")에서 읽은 이후 관련 캐시 라인이 변경되었음을 나타냅니다. 즉, 프로세서가 해당 라인에 데이터를 기록하고 새 값이 메인 메모리까지 전파되지 않았음을 의미합니다.
캐시 미스
캐시 미스는 캐시에서 데이터를 읽거나 쓰려는 시도가 실패한 것으로 지연 시간이 훨씬 더 긴 메인 메모리 액세스가 발생합니다.캐시 미스에는 명령 읽기 미스, 데이터 읽기 미스 및 데이터 쓰기 미스의 세 가지 유형이 있습니다.
명령 캐시의 캐시 읽기 미스는 일반적으로 가장 큰 지연을 야기하는데, 프로세서 또는 적어도 실행 스레드가 명령을 메인 메모리에서 가져올 때까지 기다려야 하기 때문입니다.캐시 읽기에 의존하지 않는 명령어가 실행되어 메인 메모리에서 데이터가 반환될 때까지 실행을 계속하고 종속 명령어가 실행을 재개할 수 있기 때문에 일반적으로 데이터 캐시의 캐시 읽기 누락은 더 작은 지연을 초래합니다.일반적으로 데이터 캐시에 대한 캐시 쓰기 누락은 대기열에 기록될 수 있고 후속 명령 실행에 제한이 거의 없기 때문에 가장 짧은 지연을 초래합니다. 프로세서는 대기열이 가득 찰 때까지 계속할 수 있습니다.미스 유형에 대한 자세한 소개는 캐시 성능 측정 및 메트릭을 참조하십시오.
주소번역
대부분의 범용 CPU는 어떤 형태로든 가상 메모리를 구현합니다.요약하면, 시스템에서 실행 중인 각 프로그램은 해당 프로그램에 대한 코드와 데이터만 포함된 자체 단순화된 주소 공간을 보거나 모든 프로그램이 공통 가상 주소 공간에서 실행됩니다.프로그램은 물리적 주소 공간의 주소가 아닌 가상 주소 공간의 주소를 계산, 비교, 읽고 쓰는 방식으로 실행되므로 프로그램이 더 간단해지고 쓰기가 쉬워집니다.
가상 메모리를 사용하려면 프로세서가 프로그램에서 생성한 가상 주소를 기본 메모리의 물리적 주소로 변환해야 합니다.이러한 변환을 수행하는 프로세서의 부분을 MMU(Memory Management Unit)라고 합니다.MMU를 통과하는 빠른 경로는 운영 체제의 페이지 테이블, 세그먼트 테이블 또는 둘 다의 매핑 캐시인 TLB(Translation Lookaside Buffer)에 저장된 변환을 수행할 수 있습니다.
이 토론의 목적을 위해, 주소 변환의 세 가지 중요한 특징이 있습니다.
- 대기 시간:물리적 주소는 주소 생성기에서 가상 주소를 사용할 수 있는 후에 MMU에서 사용할 수 있습니다.
- 별칭:여러 개의 가상 주소를 단일 물리적 주소에 매핑할 수 있습니다.대부분의 프로세서는 해당 단일 물리적 주소에 대한 모든 업데이트가 프로그램 순서대로 수행됨을 보장합니다.이를 보장하기 위해 프로세서는 물리적 주소의 복사본 하나만 캐시에 상주하도록 보장해야 합니다.
- 세분화:가상 주소 공간은 페이지로 나뉩니다.예를 들어, 4 GiB 가상 주소 공간은 각각 독립적으로 매핑될 수 있는 4 KiB 크기의 1,048,576 페이지로 분할될 수 있습니다.지원되는 페이지 크기는 여러 개일 수 있습니다. 자세한 내용은 가상 메모리를 참조하십시오.
초기 가상 메모리 시스템 중 하나인 IBM M44/44X는 프로그램된 모든 메인 [27][NB 1]메모리에 액세스하기 전에 코어 메모리에 저장된 매핑 테이블에 액세스해야 했습니다.캐시가 없고 매핑 테이블 메모리가 메인 메모리와 동일한 속도로 실행되므로 메모리 액세스 속도가 절반으로 줄어듭니다.매핑을 위해 메인 메모리의 페이지 테이블을 사용했던 IBM System/360 Model 67과 GE 645라는 두 개의 초기 기계는 모두 메모리 내 페이지 테이블에 대한 액세스를 위한 캐시로서 작은 연관 메모리를 가지고 있었습니다.두 머신 모두 메인 메모리용 캐시인 IBM 시스템/360 모델 85보다 먼저 사용되었기 때문에 컴퓨터 시스템에서 사용된 최초의 하드웨어 캐시는 데이터나 명령어 캐시가 아니라 TLB였습니다.
캐시는 인덱스 또는 태그가 물리적 주소 또는 가상 주소에 해당하는지 여부에 따라 다음과 같은 네 가지 유형으로 나눌 수 있습니다.
- PIPT(Physical Indexed, Physical Tagged) 캐시는 인덱스와 태그 모두에 대해 물리적 주소를 사용합니다.캐시에서 해당 주소를 조회하기 전에 물리적 주소를 조회해야 하므로(TLB 누락 및 메인 메모리에 대한 액세스를 포함할 수 있음) 이 작업은 간단하며 별칭 문제를 방지할 수도 있지만 속도가 느립니다.
- VIVT(가상 인덱싱된 가상 태그) 캐시는 인덱스와 태그 모두에 대해 가상 주소를 사용합니다.MMU를 먼저 상의하여 지정된 가상 주소의 물리적 주소를 결정할 필요가 없기 때문에 이 캐싱 방식을 사용하면 훨씬 더 빠른 조회를 수행할 수 있습니다.그러나 VIVT는 여러 개의 다른 가상 주소가 동일한 물리적 주소를 참조할 수 있는 앨리어싱 문제로 어려움을 겪고 있습니다.결과적으로 이러한 주소는 동일한 메모리를 참조하더라도 별도로 캐시되어 일관성 문제가 발생합니다.이 문제에[30] 대한 해결책이 존재하지만 표준 일관성 프로토콜에서는 작동하지 않습니다.또 다른 문제는 동일한 가상 주소가 여러 개의 서로 다른 물리적 주소에 매핑되는 동음이의어입니다.가상 인덱스 자체만 보고 이러한 매핑을 구분할 수는 없지만 컨텍스트 스위치 후 캐시 플러시, 주소 공간 강제 중복, 주소 공간 ID(Address Space ID)로 가상 주소 태깅 등의 잠재적인 솔루션이 있습니다.또한 VA가 더 이상 유효하지 않기 때문에 가상-물리적 매핑이 변경될 수 있으므로 캐시 라인을 플러시해야 하는 문제가 있습니다.태그가 VIPT(physical address)를 사용하는 경우에는 이러한 모든 문제가 발생하지 않습니다.
- VIPT(가상 인덱싱된 물리적 태그) 캐시는 인덱스의 가상 주소와 태그의 물리적 주소를 사용합니다.PIPT에 비해 캐시 라인을 TLB 변환과 병렬로 조회할 수 있기 때문에 대기 시간이 짧다는 장점이 있지만 물리적 주소를 사용할 수 있을 때까지 태그를 비교할 수 없습니다.VIVT의 장점은 태그에 물리적 주소가 있기 때문에 캐시가 동음이의어를 감지할 수 있다는 것입니다.이론적으로 VIPT는 일부 인덱스 비트가 가상 주소와 물리적 주소(예: KiB 페이지 4개의 경우 비트 12 이상)에 따라 다를 수 있으며 가상 인덱스와 물리적 태그에 모두 포함되어야 하기 때문에 더 많은 태그 비트가 필요합니다.일관성 문제를 방지하기 위해 VIPT 캐시는 인덱스 비트가 없도록 설계되었으며(예: 인덱스 및 블록 오프셋의 총 비트 수를 4KiB 페이지의 경우 12개로 제한함), VIPT 캐시의 크기를 페이지 크기에 캐시의 연관성을 곱한 값으로 제한합니다.
- 물리적으로 색인화되고 가상 태그가 지정된(PIVT) 캐시는 종종 문헌에서 쓸모가 없고 [31]존재하지 않는다고 주장합니다.그러나 MIPS R6000은 이 캐시 유형을 유일하게 알려진 [32]구현으로 사용합니다.R6000은 이미터-커플드 로직으로 구현되어 TLB와 같은 대용량 메모리에는 적합하지 않은 매우 빠른 기술입니다.R6000은 TLB 메모리를 칩 위의 작은 고속 TLB "슬라이스"를 가진 두 번째 레벨 캐시의 예약된 부분에 넣음으로써 이 문제를 해결합니다.캐시는 TLB 슬라이스에서 얻은 물리적 주소에 의해 인덱싱됩니다.그러나 TLB 슬라이스는 캐시 인덱스에 필요한 가상 주소 비트만 변환하고 태그를 사용하지 않으므로 잘못된 캐시 히트가 발생할 수 있으며, 이는 가상 주소로 태그를 지정하여 해결합니다.
이러한 재발의 속도(로드 지연 시간)는 CPU 성능에 매우 중요하며, 따라서 대부분의 최신 레벨 1 캐시는 가상 인덱스화되어 있으며, 이를 통해 MMU의 TLB 조회가 캐시 RAM에서 데이터를 가져오는 것과 동시에 진행될 수 있습니다.
그러나 가상 인덱싱이 모든 캐시 레벨에 최적인 것은 아닙니다.가상 별칭을 처리하는 비용은 캐시 크기에 따라 증가하며, 그 결과 대부분의 레벨 2 이상의 캐시가 물리적으로 인덱싱됩니다.
캐시는 이전부터 캐시 태그에 가상 주소와 물리적 주소를 모두 사용해 왔지만, 현재는 가상 태깅이 흔하지 않습니다.캐시 RAM 룩업 전에 TLB 룩업이 완료될 수 있으면 태그 비교 시간에 맞춰 물리적 주소를 사용할 수 있으므로 가상 태그를 지정할 필요가 없습니다.그러면 대용량 캐시는 물리적으로 태그가 지정되는 경향이 있고, 대기 시간이 매우 짧은 소형 캐시만 가상으로 태그가 지정됩니다.최근 범용 CPU에서 가상 태깅은 아래 설명된 바와 같이 vhints로 대체되었습니다.
동음이의어 및 동의어 문제
가상 인덱싱 및 태깅에 의존하는 캐시는 동일한 가상 주소가 서로 다른 물리적 주소(동음이의어)로 매핑된 후 불일치하게 되며, 이는 물리적 주소를 태깅에 사용하거나 주소 공간 식별자를 캐시 라인에 저장하여 해결할 수 있습니다.그러나 후자의 방법은 여러 캐시 라인이 동일한 물리적 주소에 대한 데이터를 저장하게 되는 동의어 문제를 해결하는 데 도움이 되지 않습니다.이러한 위치에 쓰는 것은 캐시의 한 위치만 업데이트할 수 있고, 다른 위치는 일관되지 않은 데이터로 남을 수 있습니다.이 문제는 서로 다른 주소 공간에 대해 중복되지 않는 메모리 레이아웃을 사용하여 해결할 수 있으며, 그렇지 않으면 매핑이 [33]변경될 때 캐시(또는 일부)를 플러시해야 합니다.
가상 태그 및 vhint
가상 태그의 가장 큰 장점은 연관 캐시의 경우 가상에서 물리적으로 변환하기 전에 태그 일치를 진행할 수 있다는 것입니다.그러나 코히어런스 프로브와 퇴거는 동작을 위한 물리적 주소를 나타냅니다.하드웨어는 일반적으로 가상 태그뿐만 아니라 물리적 태그를 저장함으로써 물리적 주소를 캐시 인덱스로 변환할 수 있는 수단을 갖추어야 합니다.비교를 위해 물리적으로 태그가 지정된 캐시는 가상 태그를 유지할 필요가 없으며, 이는 더 간단합니다.TLB에서 가상-물리 매핑을 삭제하면 해당 가상 주소를 가진 캐시 항목을 어떻게든 플러시해야 합니다.또는 TLB가 매핑하지 않은 페이지에서 캐시 항목을 허용하는 경우 해당 페이지의 액세스 권한이 페이지 테이블에서 변경될 때 해당 항목을 플러시해야 합니다.
운영 체제에서 가상 별칭이 캐시에 동시에 상주하지 않도록 할 수도 있습니다.운영 체제는 아래 설명된 페이지 색칠을 적용하여 이를 보장합니다.일부 초기 RISC 프로세서(SPARC, RS/6000)는 이러한 접근 방식을 취했습니다.가상 별칭을 검색하고 제거하는 하드웨어 비용이 감소하고 완벽한 페이지 컬러링의 소프트웨어 복잡성과 성능 패널티가 증가함에 따라 최근에는 사용되지 않고 있습니다.
연관 캐시에서 태그의 두 가지 기능을 구분하는 데 유용할 수 있습니다. 즉, 항목 집합을 선택할 방향을 결정하는 데 사용되고 캐시가 적중했는지 또는 놓쳤는지 여부를 결정하는 데 사용됩니다.두 번째 함수는 항상 정확해야 하지만 첫 번째 함수가 추측할 수 있으며 가끔 오답을 얻을 수도 있습니다.
일부 프로세서(예: 초기 SPARC)에는 가상 태그와 물리적 태그가 모두 포함된 캐시가 있습니다.가상 태그는 웨이 선택에 사용되며 물리적 태그는 적중 여부를 판단하는 데 사용됩니다.이러한 종류의 캐시는 가상 태그가 지정된 캐시의 지연 시간 이점과 물리적 태그가 지정된 캐시의 간단한 소프트웨어 인터페이스를 누릴 수 있습니다.그러나 중복 태그의 추가 비용을 부담합니다.또한 미스 처리 중에 캐시 라인 인덱스의 대체 방법은 가상 별칭 및 제거된 일치 항목에 대해 탐색해야 합니다.
가상 태그 대신 각 캐시 항목에 가상 힌트를 보관함으로써 추가적인 영역(및 일부 지연 시간)을 줄일 수 있습니다.이러한 힌트는 가상 태그의 부분 집합 또는 해시이며, 데이터와 물리적 태그를 가져올 캐시의 경로를 선택하는 데 사용됩니다.가상 태그가 지정된 캐시와 마찬가지로 가상 힌트 일치가 있을 수 있지만 물리적 태그 불일치가 발생할 수 있습니다. 이 경우 일치하는 힌트를 가진 캐시 항목을 제거해야 이 주소의 캐시 채우기 후에 캐시 액세스에 힌트 일치가 하나만 발생합니다.가상 힌트는 서로 구분되는 가상 태그보다 비트 수가 적기 때문에 가상 힌트 캐시는 가상 태그 캐시보다 충돌 미스가 더 많이 발생합니다.
아마도 가상 힌트의 궁극적인 감소는 Pentium 4(Willamette 및 Northwood 코어)에서 찾을 수 있을 것입니다.이러한 프로세서에서 가상 힌트는 효과적으로 2비트이며 캐시는 4방향 세트 연관성을 갖습니다.효과적으로 하드웨어는 가상 주소에서 캐시 인덱스로의 단순한 순열을 유지하기 때문에 네 가지 방법 중 올바른 것을 선택하는 데 콘텐츠 주소 지정 메모리(CAM)가 필요하지 않습니다.
페이지색상
물리적으로 색인화된 대규모 캐시(일반적으로 2차 캐시)는 문제가 발생합니다. 애플리케이션이 아닌 운영 체제가 캐시에서 어떤 페이지가 서로 충돌하는지를 제어합니다.한 프로그램에서 다음 프로그램까지 페이지 할당의 차이가 발생하면 캐시 충돌 패턴의 차이가 발생하여 프로그램 성능에 매우 큰 차이가 발생할 수 있습니다.이러한 차이로 인해 벤치마크 실행을 위한 일관되고 반복 가능한 타이밍을 얻기가 매우 어려워질 수 있습니다.
문제를 이해하려면 물리적으로 색인된 1 MiB 직접 매핑 레벨 2 캐시와 4 KiB 가상 메모리 페이지가 있는 CPU를 고려해 보십시오.순차적 물리 페이지는 패턴이 256페이지를 둘러쌀 때까지 캐시의 순차적 위치에 매핑됩니다.각 물리적 페이지에 0-255의 색상으로 레이블을 지정하여 캐시의 위치를 표시할 수 있습니다.서로 다른 색을 가진 물리적 페이지 내의 위치는 캐시에서 충돌할 수 없습니다.
캐시를 최대한 활용하려는 프로그래머들은 주어진 시간에 1 MiB의 데이터만 캐시하면 되도록 프로그램의 액세스 패턴을 정렬할 수 있으므로 용량 누락을 방지할 수 있습니다.그러나 액세스 패턴에 충돌 실수가 발생하지 않도록 해야 합니다.이 문제를 생각해 볼 수 있는 한 가지 방법은 프로그램이 사용하는 가상 페이지를 분할하여 이전에 물리적 페이지에 물리적 색상이 할당된 것과 동일한 방식으로 가상 색상을 할당하는 것입니다.그러면 프로그래머들은 동일한 가상 색상을 가진 두 페이지가 동시에 사용되지 않도록 코드의 액세스 패턴을 정렬할 수 있습니다.이러한 최적화(예: 루프 네스트 최적화)에 대한 광범위한 문헌이 있으며, 주로 고성능 컴퓨팅(HPC) 커뮤니티에서 비롯됩니다.
문제는 특정 순간에 사용 중인 모든 페이지가 서로 다른 가상 색상을 가질 수 있지만 일부 페이지는 동일한 물리적 색상을 가질 수 있다는 것입니다.실제로 운영 체제가 물리적 페이지를 무작위로 균일하게 가상 페이지에 할당할 경우 일부 페이지의 물리적 색상이 동일하고 해당 페이지의 위치가 캐시에서 충돌할 가능성이 매우 높습니다(이것이 생일 역설입니다).
해결책은 운영 체제가 서로 다른 가상 색상에 서로 다른 물리적 색상 페이지를 할당하도록 하는 것입니다. 페이지 컬러링이라고 하는 기술입니다.실제 가상에서 물리적 색상으로의 매핑은 시스템 성능과 무관하지만 홀수 매핑은 추적하기 어렵고 이점이 거의 없기 때문에 페이지 색상에 대한 대부분의 접근 방식은 물리적 및 가상 페이지 색상을 동일하게 유지하려고 할 뿐입니다.
운영 체제가 각 물리적 페이지가 하나의 가상 색상에만 매핑되도록 보장할 수 있다면 가상 별칭이 없으며, 프로세서는 미스 핸들링 중에 추가 가상 별칭 프로브를 사용할 필요 없이 가상 색인화된 캐시를 사용할 수 있습니다.또는 한 가상 색상에서 다른 가상 색상으로 변경될 때마다 캐시에서 페이지를 플러시할 수 있습니다.위에서 언급한 바와 같이, 이 접근법은 일부 초기 SPARC 및 RS/6000 설계에 사용되었습니다.
소프트웨어 페이지 [34]컬러링 기법은 멀티코어 프로세서에서 공유 LLC(Last level Cache)를 효과적으로 분할하기 위해 사용되었습니다.멀티코어 프로세서의 운영 체제 기반 LLC 관리는 [35]Intel에 의해 채택되었습니다.
최신 프로세서의 캐시 계층
최신 프로세서에는 상호작용하는 여러 개의 온칩 캐시가 있습니다.특정 캐시의 동작은 캐시 크기, 캐시 블록 크기, 세트 내 블록 수, 캐시 세트 교체 정책 및 캐시 쓰기 정책(write-through 또는 [24]write-back)에 의해 완전히 지정될 수 있습니다.
특정 캐시의 모든 캐시 블록은 크기가 같고 연관성이 같지만 일반적으로 레벨 1 캐시라고 하는 "하위" 캐시는 블록 수가 적고 블록 크기가 작으며 한 세트의 블록 수는 적지만 액세스 시간은 매우 짧습니다."상위 레벨" 캐시(즉, 레벨 2 이상)는 블록 수가 점진적으로 더 많고, 블록 크기가 더 크며, 세트 내 블록 수가 더 많고, 액세스 시간이 상대적으로 더 길지만 메인 메모리보다 훨씬 빠릅니다.
캐시 엔트리 교체 정책은 프로세서 설계자가 구현하도록 선택한 캐시 알고리즘에 의해 결정됩니다.경우에 따라서는 여러 종류의 작업 부하에 대해 여러 알고리즘이 제공됩니다.
특화캐시
파이프라인 CPU는 파이프라인의 여러 지점(명령어 페치, 가상-물리 주소 변환 및 데이터 페치)에서 메모리에 액세스합니다(클래식 RISC 파이프라인 참조).이러한 각 지점에 대해 서로 다른 물리적 캐시를 사용하는 것이 자연스러운 설계입니다. 따라서 어떤 물리적 리소스도 파이프라인의 두 지점을 서비스하도록 예약할 필요가 없습니다.따라서 파이프라인은 각각 특정 역할에 특화된 최소 3개의 개별 캐시(명령어, TLB 및 데이터)를 자연스럽게 갖게 됩니다.
피해자 캐시
피해 캐시는 교체 시 CPU 캐시에서 제거된 블록을 유지하는 데 사용되는 캐시입니다.피해 캐시는 기본 캐시와 해당 리필 경로 사이에 있으며, 기본 캐시에서 제거된 데이터 블록만 보관합니다.피해 캐시는 일반적으로 완전히 연관되며, 충돌 실수의 수를 줄이기 위한 것입니다.일반적으로 사용되는 대부분의 프로그램은 모든 액세스에 대해 연관 매핑을 필요로 하지 않습니다.사실, 프로그램의 메모리 액세스 중 극히 일부만이 높은 연관성을 요구합니다.공격 대상 캐시는 이러한 액세스에만 높은 연관성을 제공하여 이 속성을 악용합니다.그것은 1990년 [36]DEC의 Norman Jouppi에 의해 소개되었습니다.
인텔의 Crystalwell[37] 버전의 Haswell 프로세서는 프로세서의 레벨 3 [38]캐시에 희생 캐시 역할을 하는 128 MiBeDRAM 레벨 4 캐시를 온 패키지에 도입했습니다.Skylake 마이크로아키텍처에서 레벨 4 캐시는 더 이상 피해 [39]캐시로 작동하지 않습니다.
추적 캐시
캐시 전문화의 가장 극단적인 예 중 하나는 Intel Pentium 4 마이크로프로세서에서 발견되는 추적 캐시(실행 추적 캐시라고도 함)입니다.트레이스 캐시는 명령어 페치 대역폭을 늘리고(펜티엄 4의 경우) 이미 페치되어 [40]디코딩된 명령어의 트레이스를 저장하여 전력 소모를 줄이기 위한 메커니즘입니다.
추적 캐시는 명령이 해독된 후 또는 폐기된 후에 명령을 저장합니다.일반적으로 명령어는 개별 기본 블록 또는 동적 명령어 트레이스를 나타내는 그룹의 추적 캐시에 추가됩니다.펜티엄 4의 트레이스 캐시는 x86 명령어를 디코딩한 결과 발생하는 마이크로 연산을 저장하며 마이크로 연산 캐시의 기능도 제공합니다.이것이 있으면, 다음 번에 명령이 필요할 때, 그것은 [41]: 63–68 다시 마이크로옵스로 디코딩될 필요가 없습니다.
WCC(Write Coalesing Cache)
Write Coalescing[42] Cache는 AMD의 Buldozer 마이크로아키텍처에 있는 L2 캐시의 일부인 특수 캐시입니다.모듈에 있는 두 L1D 캐시의 저장소는 WCC를 통과하며 버퍼링 및 병합됩니다.WCC의 과제는 L2 캐시에 대한 쓰기 수를 줄이는 것입니다.
마이크로오퍼레이션(μop 또는 uop) 캐시
마이크로 연산 캐시(μop cache, uop cache 또는 UC)[43]는 디코딩된 명령의 마이크로 연산을 명령 디코더 또는 명령 캐시에서 직접 수신한 것처럼 저장하는 특수 캐시입니다.명령을 디코딩해야 할 경우, μop 캐시는 캐시된 경우 재사용되는 디코딩된 형태에 대해 검사되며, 사용할 수 없는 경우에는 명령을 디코딩한 후 캐시합니다.
μop 캐시를 인텔 P6 프로세서 제품군의 대체 프론트엔드로 설명한 초기 작업 중 하나는 2001년 논문 "Micro-Operation Cache: A Power Aware Frontend for Variable Instruction Length ISA"[44]입니다.나중에 Intel은 Sandy Bridge 프로세서와 Ivy Bridge 및 Haswell과 [41]: 121–123 [45]같은 연속적인 마이크로아키텍처에 μop 캐시를 포함시켰습니다.AMD는 Zen 마이크로아키텍처에 [46]μop 캐시를 구현했습니다.
완전한 사전 디코딩된 명령어를 가져오면 가변 길이의 복잡한 명령어를 더 단순한 고정 길이의 마이크로 연산으로 반복적으로 디코딩할 필요가 없으며, 가져온 명령어를 예측, 불러오기, 회전 및 정렬하는 프로세스가 간단해집니다.μop 캐시는 페치 및 디코딩 하드웨어를 효과적으로 오프로드하므로 전력 소모를 줄이고 디코딩된 마이크로 연산의 프론트엔드 공급을 개선할 수 있습니다.μop 캐시는 또한 디코딩된 마이크로 연산을 백엔드로 보다 일관성 있게 전달하고 CPU의 페치 및 디코딩 [44][45]로직에서 다양한 병목 현상을 제거함으로써 성능을 향상시킵니다.
μop 캐시는 추적 캐시와 유사한 점이 많지만, μop 캐시는 훨씬 간단하기 때문에 전력 효율성이 향상됩니다. 따라서 배터리 구동 장치의 구현에 더 적합합니다.추적 캐시의 전력 비효율성을 초래하는 주된 단점은 캐시를 결정하고 동적으로 생성된 명령어 [47]추적을 재사용하기 위해 휴리스틱에 필요한 하드웨어 복잡성입니다.
분기 대상 명령어 캐시
분기 대상 캐시 [48]또는 분기 대상 명령 캐시는 ARM 마이크로프로세서에서 사용되는 이름으로, 취한 분기의 대상에서 처음 몇 개의 명령을 유지하는 전문 캐시입니다.메모리 시스템은 CPU가 없어도 충분히 빠르게 명령을 전달할 수 있기 때문에 일반 명령어 캐시가 필요 없는 저전력 프로세서에서 사용됩니다.그러나 이는 연속 명령어에 대해서만 순차적으로 적용되며 새 주소에서 명령어 페치를 다시 시작하는 데는 여전히 몇 주기의 지연 시간이 소요되며 제어 전송 후 파이프라인 버블이 몇 주기 발생합니다.분기 대상 캐시는 대부분의 분기 후 지연을 방지하는 몇 가지 주기에 대한 지침을 제공합니다.
이를 통해 기존의 풀타임 명령어 캐시보다 훨씬 작은 캐시로 풀스피드 연산이 가능합니다.
스마트 캐시
스마트 캐시(Smart cache)는 인텔이 개발한 다중 실행 코어의 레벨 2 또는 레벨 3 캐싱 방법입니다.
스마트 캐시는 멀티 코어 프로세서의 코어 간에 실제 캐시 메모리를 공유합니다.코어당 전용 캐시와 비교할 때, 코어가 캐시 공간의 동일한 부분을 필요로 하지 않을 때 전체 캐시 미스율이 감소합니다.따라서 단일 코어는 전체 레벨 2 또는 레벨 3 캐시를 사용할 수 있지만 다른 코어는 [49]비활성 상태입니다.또한 공유 캐시를 통해 서로 다른 실행 [50]코어 간에 메모리를 더 빠르게 공유할 수 있습니다.
다단계 캐시
또 다른 문제는 캐시 지연 시간과 적중률 사이의 근본적인 균형입니다.캐시가 클수록 적중률은 더 높지만 대기 시간은 더 깁니다.이러한 단점을 해결하기 위해 많은 컴퓨터가 여러 수준의 캐시를 사용하며, 더 크고 느린 캐시로 작은 빠른 캐시를 백업합니다.멀티 레벨 캐시는 일반적으로 가장 빠른 캐시인 레벨 1(L1)을 먼저 확인함으로써 작동합니다. 이 캐시가 도달하면 프로세서가 고속으로 진행됩니다.그보다 작은 캐시가 누락되면 외부 메모리에 액세스하기 전에 그 다음으로 빠른 캐시인 레벨 2(L2)를 확인합니다.
메인 메모리와 가장 빠른 캐시 간의 지연 시간 차이가 커짐에 따라 일부 프로세서는 최대 3단계의 온칩 캐시를 활용하기 시작했습니다.가격에 민감한 설계에서는 이 방법을 사용하여 전체 캐시 계층을 온칩으로 끌어 올렸지만, 2010년대에 이르러 최고 성능의 설계 중 일부는 종종 eDRAM에 구현되고 멀티칩 모듈에 탑재되는 대용량 오프칩 캐시를 제4의 캐시 레벨로 갖게 되었습니다.메인프레임 CPU IBM z15(2019)와 같이 드물게 L1까지 모든 레벨이 eDRAM으로 구현되어 SRAM을 완전히 대체합니다(캐시의 경우 SRAM이 레지스터에 여전히 사용됨).ARM 기반 Apple M1은 4개의 고성능 코어 각각에 대해 192KiBL1 캐시를 가지고 있는데, 이는 이례적으로 많은 양입니다. 그러나 4개의 고효율 코어에는 128KiB만 있습니다.
L3 및 L4 캐시의 이점은 애플리케이션의 액세스 패턴에 따라 달라집니다.L3 및 L4 캐시를 포함하는 제품의 예는 다음과 같습니다.
- Alpha 21164 (1995)는 1 ~ 64 MiB 오프칩 L3 캐시를 가지고 있습니다.
- AMD K6-III(1999)에는 마더보드 기반 L3 캐시가 있습니다.
- IBM POWER4(2001)는 프로세서당 32MiB의 오프칩 L3 캐시가 있으며 여러 프로세서 간에 공유됩니다.
- Itanium 2(2003)는 6 MiB 유니파이드 레벨 3(L3) 캐시 온다이를 지원합니다. Itanium 2(2003) MX 2 모듈은 Madison 프로세서와 핀 호환되는 멀티칩 모듈에 공유 64 MiB L4 캐시와 함께 2개의 Itanium 2 프로세서를 통합합니다.
- 인텔의 Xeon MP 제품 코드명 "Tulsa" (2006)는 두 개의 프로세서 코어 사이에 공유되는 16 MiB의 온다이 L3 캐시를 특징으로 합니다.
- 2 MiB의 L3 캐시를 가진 AMD Phenom (2007).
- AMD Phenom II(2008)는 최대 6개의 MiBon-die 유니파이드 L3 캐시를 제공합니다.
- Intel Core i7(2008)에는 모든 코어가 공유하는 8개의 MiBon-die 유니파이드 L3 캐시가 있습니다.
- Intel Iris Pro Graphics가 통합된 Intel Haswell CPU는 128 MiB의 eDRAM이 L4 [51]캐시 역할을 합니다.
마지막으로, 메모리 계층의 다른 끝에서 CPU 레지스터 파일 자체는 시스템에서 가장 작고 빠른 캐시로 간주될 수 있으며, 소프트웨어에서 예약된다는 특수한 특성을 가지고 있습니다. 예를 들어 루프 네스트 최적화를 위해 메인 메모리에서 검색된 값을 유지하기 위해 레지스터를 할당하기 때문입니다.그러나 레지스터 이름을 변경하면 대부분의 컴파일러 레지스터 할당이 실행 시 하드웨어에 의해 동적으로 레지스터 뱅크로 재할당되므로 CPU가 잘못된 데이터 종속성을 차단할 수 있으므로 파이프라인 위험이 완화됩니다.
등록 파일은 때때로 다음과 같은 계층 구조를 갖습니다.크레-1(1976년경)은 일반적으로 사용할 수 있는 8개의 주소 "A"와 8개의 스칼라 데이터 "S" 레지스터를 가지고 있었습니다.또한 64개의 주소 "B"와 64개의 스칼라 데이터 "T" 레지스터 세트가 있었는데, 이 레지스터들은 액세스하는 데 더 오래 걸렸지만 메인 메모리보다 더 빨랐습니다.Cray-1에는 데이터 캐시가 없었기 때문에 "B" 레지스터와 "T" 레지스터가 제공되었습니다. (그러나 Cray-1에는 명령 캐시가 있었습니다.)
멀티코어 칩
여러 개의 코어를 가진 칩을 고려할 때, 캐시를 공유해야 하는지 아니면 각 코어에 로컬해야 하는지에 대한 문제가 있습니다.공유 캐시를 구현하면 배선과 복잡성이 증가할 수밖에 없습니다.그러나 코어가 아닌 칩당 하나의 캐시가 있으면 필요한 공간이 크게 줄어들기 때문에 더 큰 캐시를 포함할 수 있습니다.
일반적으로 L1 캐시를 공유하면 지연 시간이 증가하여 각 코어가 단일 코어 칩보다 상당히 느리게 실행되기 때문에 바람직하지 않습니다.그러나, 메모리에 액세스하기 전에 마지막으로 호출된 최상위 캐시의 경우, 글로벌 캐시를 갖는 것이 바람직한데, 예를 들어 단일 코어가 전체 캐시를 사용할 수 있도록 허용하고, 서로 다른 프로세스 또는 스레드가 캐시된 데이터를 공유할 수 있도록 함으로써 데이터 중복성을 감소시키고,그리고 활용된 캐시 코히런시 [52]프로토콜의 복잡성을 줄여줍니다.예를 들어, 3개의 레벨을 갖는 8개의 코어 칩은 각 코어에 대한 L1 캐시, 각 코어 쌍에 대한 하나의 중간 L2 캐시, 및 모든 코어 간에 공유되는 하나의 L3 캐시를 포함할 수 있습니다.
메모리에 액세스하기 전에 호출되는 공유 최상위 캐시를 일반적으로 LLC(Last Level Cache)라고 합니다.LLC가 여러 코어 간에 공유될 때 특정 범위의 메모리 주소를 처리하는 여러 조각으로 분할하는 것을 포함하여 병렬성 수준을 높이기 위한 추가 기술이 사용되며 독립적으로 [53]액세스할 수 있습니다.
별도/통합
별도의 캐시 구조에서는 명령어와 데이터가 별도로 캐싱되므로 명령어와 데이터 중 하나를 캐싱하는 데 캐시 라인이 사용되지만 둘 다는 캐시 라인이 사용되지 않습니다. 별도의 데이터와 명령어 변환 기능이 [54]버퍼와 별개로 적용되어 다양한 이점이 입증되었습니다.통합 구조에서는 이러한 제약 조건이 존재하지 않으며 캐시 라인을 사용하여 명령과 데이터를 모두 캐시할 수 있습니다.
배타적 대 포괄적
다단계 캐시는 새로운 설계 결정을 도입합니다.예를 들어, 일부 프로세서에서는 L1 캐시의 모든 데이터가 L2 캐시의 어딘가에 있어야 합니다.이러한 캐시를 완전 포괄적이라고 합니다.AMD Athlon과 같은 다른 프로세서는 배타적인 캐시를 가지고 있습니다. 데이터는 L1 및 L2 캐시 중 최대 하나에 포함되며, 둘 다 포함되지는 않습니다.그러나 Intel Pentium II, III 및 4와 같은 다른 프로세서에서는 L1 캐시의 데이터도 L2 캐시에 상주할 필요가 없습니다.이 중간 [55][56]정책에 대해 일반적으로 인정되는 이름은 없습니다. 두 가지 일반적인 이름은 "비배타적"과 "부분적으로 포함"입니다.
전용 캐시의 장점은 더 많은 데이터를 저장한다는 것입니다.이 이점은 전용 L1 캐시가 L2 캐시와 비교할 때 더 크며, L2 캐시가 L1 캐시보다 몇 배 더 크다면 감소합니다.L1이 빗나가고 L2가 액세스에 부딪힐 때, L2의 히트 캐시 라인은 L1의 라인과 교환됩니다.이 교환은 단순히 L2에서 L1로 라인을 복사하는 것보다 훨씬 더 많은 작업이며, 이는 포괄적인 캐시가 [56]수행하는 일입니다.
캐시를 엄격히 포함하는 한 가지 장점은 외부 장치나 멀티프로세서 시스템의 다른 프로세서가 프로세서에서 캐시 라인을 제거하고자 할 때 프로세서가 L2 캐시를 확인하도록 하면 된다는 것입니다.포함을 강제하지 않는 캐시 계층에서는 L1 캐시도 확인해야 합니다.단점으로, L1 캐시와 L2 캐시의 연관성 사이에는 상관관계가 있습니다: L2 캐시가 모든 L1 캐시가 함께 있는 만큼의 방법을 가지고 있지 않다면, L1 캐시의 효과적인 연관성은 제한됩니다.포함 캐시의 또 다른 단점은 L2 캐시에서 퇴거가 있을 때마다, L1의 (아마도) 대응하는 라인들 또한 포함성을 유지하기 위해 퇴거되어야 한다는 것입니다.이 작업은 상당히 많은 작업이며, L1 미스 비율이 [56]더 높아집니다.
포괄 캐시의 또 다른 장점은 캐시 크기가 클수록 캐시 라인을 크게 사용할 수 있기 때문에 보조 캐시 태그의 크기가 줄어듭니다.(배타 캐시에서는 두 캐시 라인의 크기가 동일해야 하므로 L1 미스, L2 히트 시 캐시 라인을 스왑할 수 있습니다.)보조 캐시가 1차 캐시보다 크기가 큰 순서이고 캐시 데이터가 캐시 태그보다 크기가 큰 순서인 경우, 저장된 이 태그 영역은 L1 [57]캐시 데이터를 L2에 저장하는 데 필요한 증분 영역과 유사할 수 있습니다.
스크래치패드 메모리
Scratchpad 메모리(SPM)는 컴퓨터 용어로 Scratchpad, Scratchpad RAM 또는 로컬 스토어라고도 하며, 계산, 데이터 및 기타 작업을 일시적으로 저장하는 데 사용되는 고속 내장 메모리입니다.
예: K8
전문화와 멀티레벨 캐싱을 모두 설명하기 위해 AMD Athlon 64 [58]CPU의 K8 코어의 캐시 계층을 소개합니다.
K8에는 명령어 캐시, 명령어 TLB, 데이터 TLB, 데이터 캐시 등 4개의 특수 캐시가 있습니다.이러한 각 캐시는 전문화되어 있습니다.
- 명령 캐시는 64바이트 라인의 메모리 복사본을 보관하며 매 주기마다 16바이트를 가져옵니다.이 캐시의 각 바이트는 8비트가 아닌 10비트로 저장되며, 여분의 비트는 명령어의 경계를 표시합니다(이것은 사전 디코딩의 예입니다).캐시에는 ECC가 아닌 패리티 보호 기능만 있습니다. 패리티가 더 작고 손상된 데이터는 메모리에서 가져온 새 데이터(항상 최신 명령어 복사본이 있음)로 대체할 수 있기 때문입니다.
- 명령어 TLB는 페이지 테이블 엔트리(PTE)의 복사본을 보관합니다.각 사이클의 명령 페치는 가상 주소가 이 TLB를 통해 물리 주소로 변환됩니다.각 항목의 메모리는 4바이트 또는 8바이트입니다.K8은 페이지 크기가 다양하기 때문에 각각의 TLB는 두 개의 섹션으로 나뉘는데, 하나는 4개의 KiB 페이지를 매핑하는 PTE를 유지하는 것이고, 하나는 4개의 MiB 또는 2개의 MiB 페이지를 매핑하는 PTE를 유지하는 것입니다.분할을 통해 각 섹션의 완전 연관 일치 회로를 보다 단순화할 수 있습니다.운영 체제는 가상 주소 공간의 여러 섹션을 서로 다른 크기의 PTE로 매핑합니다.
- 데이터 TLB에는 동일한 항목을 유지하는 두 개의 복사본이 있습니다.두 개의 복사본을 사용하면 주기당 두 개의 데이터에 액세스하여 가상 주소를 물리적 주소로 변환할 수 있습니다.명령어 TLB와 마찬가지로 이 TLB는 두 종류의 엔트리로 나뉩니다.
- 데이터 캐시는 64바이트 라인의 메모리 복사본을 보관합니다.8개의 뱅크(각각 8KiB의 데이터를 저장)로 분할되며, 데이터가 서로 다른 뱅크에 있는 한 주기마다 2개의 8바이트 데이터를 가져올 수 있습니다.각각의 64바이트 라인이 8개의 모든 뱅크에 분산되어 있기 때문에 태그에는 2개의 복사본이 있습니다.각 태그 복사본은 주기당 두 개의 액세스 중 하나를 처리합니다.
K8에는 여러 레벨의 캐시도 있습니다.4KiB를 매핑하는 PTE만 저장하는 2단계 명령어와 데이터 TLB가 있습니다.명령 및 데이터 캐시, 다양한 TLB 모두 대규모 유니파이드 L2 캐시에서 채워질 수 있습니다.이 캐시는 L1 명령어와 데이터 캐시 모두에 배타적입니다. 즉, 8바이트 라인은 L1 명령어 캐시, L1 데이터 캐시 또는 L2 캐시 중 하나에만 있을 수 있습니다.그러나 데이터 캐시의 라인에 TLB 중 하나에 있는 PTE가 있을 수 있습니다. 운영 체제는 메모리의 페이지 테이블이 업데이트될 때 TLB의 일부를 플러시함으로써 TLB를 일관성 있게 유지하는 역할을 합니다.
또한 K8은 메모리에 저장되지 않은 정보, 즉 예측 정보를 캐싱합니다.위 도표에는 이러한 캐시가 표시되어 있지 않습니다.이 종류의 CPU에서 흔히 볼 수 있듯이, K8은 가지가 잡히는지 여부를 예측하는 데 도움이 되는 표와 가지와 점프의 대상을 예측하는 다른 표로 상당히 복잡한 가지 예측 기능을 가지고 있습니다.이 정보 중 일부는 레벨 1 명령어 캐시와 통합 보조 캐시 모두에 있는 명령어와 관련되어 있습니다.
K8은 2차 캐시에 명령어와 함께 예측 정보를 저장하는 흥미로운 트릭을 사용합니다.2차 캐시의 라인은 데이터 또는 명령어 1차 캐시에서 해당 라인이 제거되었는지에 따라 ECC 또는 패리티에 의해 우발적인 데이터 손상(예: 알파 입자 타격)으로부터 보호됩니다.패리티 코드는 ECC 코드보다 비트 수가 적기 때문에 명령 캐시의 라인에는 몇 개의 예비 비트가 있습니다.이러한 비트는 해당 명령어와 관련된 분기 예측 정보를 캐시하는 데 사용됩니다.결과적으로 분기 예측 변수의 유효 이력 표가 더 크므로 정확도가 더 높습니다.
더 많은 계층
다른 프로세서에는 다른 종류의 예측기(예: DEC Alpha 21264의 스토어-투-로드 바이패스 예측기)가 있으며, 미래의 프로세서에서는 다양한 전문 예측기가 번성할 가능성이 높습니다.
이러한 예측 변수는 계산 비용이 많이 드는 정보를 저장한다는 점에서 캐시에 해당합니다.예측 변수를 설명할 때 사용되는 용어 중 일부는 캐시(가지 예측 변수에서 히트를 언급함)와 동일하지만, 예측 변수는 일반적으로 캐시 계층의 일부로 간주되지 않습니다.
K8은 하드웨어에서 명령어와 데이터 캐시를 일관성 있게 유지하며, 이는 스토어 명령에 근접한 명령어로 스토어가 후속 명령어를 변경한다는 것을 의미합니다.Alpha 및 MIPS 제품군과 같은 다른 프로세서들은 명령어 캐시를 일관성 있게 유지하기 위해 소프트웨어에 의존해 왔습니다.프로그램이 일관성을 보장하기 위해 운영 체제 시설을 호출할 때까지 상점은 명령 스트림에 표시되지 않습니다.
태그램
컴퓨터 공학에서 태그 램(tag RAM)은 CPU [59][60]캐시에 현재 저장되어 있는 메모리 위치를 지정하는 데 사용됩니다.간단한 직접 매핑 설계를 위해 빠른 SRAM을 사용할 수 있습니다.연관성이 높은 캐시는 보통 콘텐츠 주소 지정 메모리를 사용합니다.
실행
캐시 읽기는 한 주기 이상 걸리는 가장 일반적인 CPU 작업입니다.프로그램 실행 시간은 레벨 1 데이터 캐시 히트의 대기 시간에 매우 민감한 경향이 있습니다.많은 설계 노력과 종종 전력과 실리콘 면적이 소비되어 캐시를 최대한 빠르게 만듭니다.
가장 간단한 캐시는 가상 인덱스 직접 매핑된 캐시입니다.가상 주소는 주소의 해당 부분을 추출하고 SRAM을 인덱싱하는 데 사용되는 가산기로 계산되며, 이 가산기는 로드된 데이터를 반환합니다.데이터는 바이트 쉬프터에 정렬되고, 그로부터 다음 작업으로 바이패스됩니다.내부 루프에서 태그를 검사할 필요가 없습니다. 실제로 태그를 읽을 필요도 없습니다.나중에 파이프라인에서 로드 명령을 취소하기 전에 로드된 데이터에 대한 태그를 읽고 가상 주소와 대조하여 캐시 적중 여부를 확인해야 합니다.누락된 경우 캐시가 요청된 캐시 라인으로 업데이트되고 파이프라인이 다시 시작됩니다.
캐시의 항목을 선택하려면 태그의 일부 형태를 읽어야 하기 때문에 연관 캐시는 더 복잡합니다.N-way set-associative level-1 캐시는 일반적으로 모든 N개의 가능한 태그와 N개의 데이터를 병렬로 읽은 다음 일치하는 태그와 관련된 데이터를 선택합니다.레벨 2 캐시는 태그를 먼저 읽음으로써 전력을 절약하는 경우가 있으므로 데이터 SRAM에서 데이터 요소 하나만 읽습니다.
인접 다이어그램은 주소의 다양한 필드가 사용되는 방식을 명확히 하기 위한 것입니다.주소 비트 31이 가장 중요하고 비트 0이 가장 중요하지 않습니다.이 다이어그램은 64바이트(B) 라인, 32비트 읽기 폭 및 32비트 가상 주소가 있는 4KiB, 2방향 세트 연관 가상 인덱스 및 가상 태그가 지정된 캐시에 대한 SRAM, 인덱싱 및 멀티플렉싱을 보여줍니다.
캐시는 4KiB이고 64B 라인을 가지고 있기 때문에 캐시에는 64개의 라인만 있으며, 각각 21비트 태그 쌍을 가진 32개의 행을 가진 태그 SRAM에서 한 번에 2개씩 읽습니다.태그 및 데이터 SRAM을 인덱싱하는 데 가상 주소 비트 31부터 6까지의 모든 기능을 사용할 수 있지만, 가장 중요하지 않은 비트를 사용하는 것이 가장 간단합니다.
마찬가지로, 캐시는 4KiB이고 4B 읽기 경로를 가지며 각 액세스에 대해 두 가지 방식을 읽기 때문에 Data SRAM은 512 행 x 8바이트 폭입니다.
보다 최신의 캐시는 16KiB, 4방향 세트 연관성, 가상 인덱스, 가상 암시 및 물리적 태그가 지정된 32B 라인, 32비트 읽기 폭 및 36비트 물리적 주소입니다.이러한 캐시에 대한 읽기 경로가 위의 경로와 매우 유사해 보입니다.태그 대신 vhint를 읽고 가상 주소의 하위 집합과 일치시킵니다.나중에 파이프라인에서 가상 주소는 TLB에 의해 물리적 주소로 변환되고 물리적 태그는 읽기(vhint가 읽을 캐시를 제공하는 것처럼 한 개만 읽기)됩니다.마지막으로 물리적 주소를 물리적 태그와 비교하여 히트가 발생했는지 여부를 확인합니다.
일부 SPARC 설계는 가상 주소 추가기를 SRAM 디코더에 축소하여 L1 캐시의 속도를 몇 번의 게이트 지연으로 개선했습니다.주소가 합산된 디코더를 참조하십시오.
역사
캐시 기술의 초기 역사는 가상 [citation needed]메모리의 발명과 사용과 밀접한 관련이 있습니다.1960년대 초기 메인프레임 컴퓨터는 반도체 메모리의 희소성과 비용 때문에 프로그램이 사용하는 평평한 가상 메모리 공간에 매핑된 복잡한 물리적 메모리 계층을 사용했습니다.메모리 기술은 반도체, 마그네틱 코어, 드럼 및 디스크에 걸쳐 있습니다.프로그램에서 보고 사용하는 가상 메모리는 평평하고 캐싱은 프로세서 액세스에 앞서 가장 빠른 메모리로 데이터와 명령을 가져오는 데 사용됩니다.캐시 크기를 최적화하기 위해 광범위한 연구가 수행되었습니다.최적의 값은 Algol이 가장 작은 것을 필요로 하고 Fortran과 Cobol이 가장 큰 [disputed ]캐시 크기를 필요로 하는 프로그래밍 언어에 크게 의존하는 것으로 나타났습니다.
마이크로컴퓨터 기술의 초기에는 메모리 접근이 레지스터 접근보다 약간 느렸을 뿐입니다.그러나 1980년대[61] 이후 프로세서와 메모리 사이의 성능 차이가 점점 커지고 있습니다.마이크로프로세서는 메모리보다 훨씬 더 빠르게 발전했고, 특히 동작 빈도 면에서 메모리는 성능 병목 현상이 되었습니다.기술적으로 CPU만큼 빠른 속도로 모든 메인 메모리를 갖추는 것이 가능했지만, 더 경제적으로 실행 가능한 방법을 택했습니다. 저속 메모리를 많이 사용하고 성능 격차를 줄이기 위해 작은 고속 캐시 메모리를 도입하는 것입니다.이를 통해 동일한 가격에 훨씬 더 많은 용량을 제공할 수 있었고, 결합 성능은 약간 감소했습니다.
최초 TLB 구현
처음으로 문서화된 TLB의 용도는 GE[62] 645와 IBM 360/[63]67로, 둘 다 연관 메모리를 TLB로 사용했습니다.
첫번째 명령어 캐시
CDC [64]6600에서 명령어 캐시를 처음으로 문서화했습니다.
최초 데이터 캐시
최초로 문서화된 데이터 캐시 사용은 IBM 시스템/360 모델 [65]85에서 이루어졌습니다.
68k 마이크로프로세서에서
1982년에 출시된 68010은 두 개의 명령어만으로 구성된 루프를 가속화하는 작고 특수한 명령어 캐시라고 할 수 있는 "루프 모드"를 가지고 있습니다.1984년에 출시된 68020은 256바이트의 일반적인 명령어 캐시로 대체하여 진정한 온칩 캐시 메모리를 갖춘 최초의 68k 시리즈 프로세서가 되었습니다.
1987년에 출시된 68030은 기본적으로 68020 코어에 256바이트 데이터 캐시, MMU(On-Chip Memory Management Unit), 프로세스 축소 및 캐시에 대한 버스트 모드를 추가했습니다.1990년에 출시된 68040은 각각 4킬로바이트의 분할 명령어와 데이터 캐시를 가지고 있습니다.1994년에 출시된 68060은 8 KiB 데이터 캐시(4-way Associative), 8 KiB 명령 캐시(4-way Associative), 96바이트 FIFO 명령 버퍼, 256-엔트리 브랜치 캐시, 64-엔트리 주소 변환 캐시 MMU 버퍼(4-way Associative)를 가지고 있습니다.
x86 마이크로프로세서에서
x86 마이크로프로세서가 386에서 20 MHz 이상의 클럭 속도에 도달함에 따라 성능 향상을 위해 소량의 고속 캐시 메모리가 시스템에 탑재되기 시작했습니다.이는 메인 메모리에 사용되는 DRAM이 리프레시 주기뿐만 아니라 최대 120ns의 상당한 지연 시간을 가졌기 때문입니다.캐시는 더 비싸지만 훨씬 더 빠른 SRAM 메모리 셀로 구성되었으며, 당시에는 약 10-25ns의 지연 시간을 가지고 있었습니다.초기 캐시는 프로세서 외부에 있었고, 일반적으로 8개 또는 9개의 DIP 장치를 소켓에 배치하여 캐시를 추가 또는 업그레이드 기능으로 사용할 수 있도록 마더보드에 배치했습니다.
Intel 386 프로세서 일부 버전에서는 16~256 KiB의 외부 캐시를 지원할 수 있습니다.
486 프로세서를 사용하면 8 KiB 캐시를 CPU 다이에 직접 통합할 수 있습니다.이 캐시는 메인보드의 속도가 느린 캐시 또는 레벨 2(L2) 캐시와 구별하기 위해 레벨 1 또는 L1 캐시로 명명되었습니다.이 마더보드 캐시는 훨씬 더 컸는데, 가장 일반적인 크기는 256KiB였습니다.온 마더보드 캐시의 인기는 Pentium MMX 시대에도 계속되었지만 SDRAM의 도입과 버스 클럭 속도와 CPU 클럭 속도 간의 차이가 커지면서 더 이상 사용할 수 없게 되었습니다. 이로 인해 온 마더보드 캐시의 속도는 메인 메모리보다 약간 빠릅니다.
x86 마이크로프로세서에서 캐시 구현의 다음 발전은 2차 캐시를 마이크로프로세서와 동일한 패키지로 가져온 Pentium Pro에서 시작되었으며, 마이크로프로세서와 동일한 주파수에서 클록킹되었습니다.
AMD K6-2 및 AMD K6-III 프로세서는 이전에 인텔이 마더보드 캐시와 함께 사용했던 소켓 7을 여전히 사용했기 때문에 마더보드 캐시의 인기가 지속되었습니다.K6-III에는 256KiB 온다이 L2 캐시가 포함되어 있으며, L3이라는 이름의 세 번째 레벨 캐시로 온보드 캐시를 활용했습니다(최대 2MiB의 온보드 캐시가 생성됨).소켓 7이 사용되지 않게 된 후, 온 마더보드 캐시는 x86 시스템에서 사라졌습니다.
3단계 캐시는 먼저 프로세서 코어가 여러 개 도입되면서 다시 사용되었으며, 여기서 L3 캐시가 CPU 다이에 추가되었습니다.새로운 프로세서 세대에서는 전체 캐시 크기가 점점 더 커지는 것이 일반적인 현상이 되었고, 최근(2011년 기준)에는 수십 [66]메가바이트 수준의 레벨 3 캐시 크기가 드물지 않게 발견되고 있습니다.
인텔은 하스웰 마이크로아키텍처와 함께 레벨 4 온 패키지 캐시를 선보였습니다.크리스털웰[37] 하스웰 CPU는 GT3e 버전의 인텔 통합 아이리스 프로 그래픽스를 탑재하여 128 MiB의 내장 DRAM(eDRAM)을 동일한 패키지에 탑재할 수 있습니다.이 L4 캐시는 온다이 GPU와 CPU 간에 동적으로 공유되며 CPU의 L3 [38]캐시에 대한 희생 캐시 역할을 합니다.
ARM 마이크로프로세서에서
Apple M1 CPU에는 코어 유형에 따라 각 코어에 128개 또는 192개의 KiB 명령어 L1 캐시가 있습니다(지연/싱글 스레드 성능에 중요).이는 CPU 유형(노트북 뿐만 아니라)에 비해 이례적으로 큰 L1 캐시입니다. 총 캐시 메모리 크기는 노트북의 경우 이례적으로 크지 않으며(총 처리량이 처리량에 더 중요함) IBM 메인프레임에서 훨씬 더 큰 총(예: L3 또는 L4) 크기를 사용할 수 있습니다.
현재연구
초기의 캐시 설계는 전적으로 캐시와 RAM의 직접적인 비용과 평균 실행 속도에 중점을 두었습니다.또한 최근의 캐시 설계에서는 에너지 효율성, 내결함성 및 기타 [67][68]목표를 고려합니다.
컴퓨터 설계자는 캐시 사이클 시간, 에너지 및 면적 사이의 균형을 탐색하는 데 도움이 되는 여러 가지 도구를 사용할 수 있습니다. CACTSI[69] 캐시 시뮬레이터와 SimpleScalar 명령어 세트 시뮬레이터는 두 가지 오픈 소스 옵션입니다.
멀티포트 캐시
다중 포트 캐시는 한 번에 두 개 이상의 요청을 처리할 수 있는 캐시입니다.기존 캐시에 액세스할 때 일반적으로 단일 메모리 주소를 사용하는 반면 다중 포트 캐시에서는 한 번에 N개의 주소를 요청할 수 있습니다. 여기서 N은 프로세서와 캐시를 통해 연결된 포트의 개수입니다.이것의 장점은 파이프라인 프로세서가 파이프라인의 다른 단계에서 메모리에 액세스할 수 있다는 것입니다.또 다른 이점은 다양한 캐시 레벨을 통해 슈퍼 스케일러 프로세서의 개념을 허용한다는 것입니다.
참고 항목
메모들
참고문헌
- ^ Gabriel Torres (September 12, 2007). "How The Cache Memory Works".
- ^ Su, Chao; Zeng, Qingkai (2021-06-10). Nicopolitidis, Petros (ed.). "Survey of CPU Cache-Based Side-Channel Attacks: Systematic Analysis, Security Models, and Countermeasures". Security and Communication Networks. 2021: 1–15. doi:10.1155/2021/5559552. ISSN 1939-0122.
- ^ "Atlas 2 at Cambridge Mathematical Laboratory (and Aldermaston and CAD Centre)". November 2012.
Two tunnel diode stores were developed at Cambridge; one, which worked very well, speeded up the fetching of operands, the other was intended to speed up the fetching of instructions. The idea was that most instructions are obeyed in sequence, so when an instruction was fetched that word was placed in the slave store in the location given by the fetch address modulo 32; the remaining bits of the fetch address were also stored. If the wanted word was in the slave it was read from there instead of main memory. This would give a major speedup to instruction loops up to 32 instructions long, and reduced effect for loops up to 64 words.
- ^ "IBM System/360 Model 85 Functional Characteristics" (PDF). IBM. June 1968. A22-6916-1.
- ^ Smith, Alan Jay (September 1982). "Cache Memories" (PDF). Computing Surveys. 14 (3): 473–530. doi:10.1145/356887.356892. S2CID 6023466.
- ^ "Altering Computer Architecture is Way to Raise Throughput, Suggests IBM Researchers". Electronics. 49 (25): 30–31. December 23, 1976.
- ^ "IBM z13 and IBM z13s Technical Introduction" (PDF). IBM. March 2016. p. 20.
- ^ "Product Fact Sheet: Accelerating 5G Network Infrastructure, from the Core to the Edge". Intel Newsroom (Press release). Retrieved 2020-04-12.
L1 cache of 32KB/core, L2 cache of 4.5MB per 4-core cluster and shared LLC cache up to 15MB.
- ^ Smith, Ryan. "Intel Launches Atom P5900: A 10nm Atom for Radio Access Networks". www.anandtech.com. Retrieved 2020-04-12.
- ^ "Cache design" (PDF). ucsd.edu. 2010-12-02. p. 10–15. Retrieved 2023-01-29.
- ^ IEEE Xplore - 전력 소모를 줄이기 위한 단계별 세트 연관 캐시 설계.Ieeexplore.ieee.org (2009-08-11).2013-07-30에 검색되었습니다.
- ^ Sanjeev Jahagirdar; Varghese George; Inder Sodhi; Ryan Wells (2012). "Power Management of the Third Generation Intel Core Micro Architecture formerly codenamed Ivy Bridge" (PDF). hotchips.org. p. 18. Archived from the original (PDF) on 2020-07-29. Retrieved 2015-12-16.
- ^ a b André Seznec (1993). "A Case for Two-Way Skewed-Associative Caches". ACM SIGARCH Computer Architecture News. 21 (2): 169–178. doi:10.1145/173682.165152.
- ^ a b C. Kozyrakis. "Lecture 3: Advanced Caching Techniques" (PDF). Archived from the original (PDF) on September 7, 2012.
- ^ "Micro-Architecture]".
Skewed-associative caches have been shown to have two major advantages over conventional set-associative caches.
- ^ a b Chenxi Zhang; Xiaodong Zhang; Yong Yan (September–October 1997). "Two fast and high-associativity cache schemes". IEEE Micro. 17 (5): 40–49. doi:10.1109/40.621212.
- ^ "ARM® Cortex®-R Series Programmer's Guide". developer.arm.com. 2014. Retrieved 2023-05-04.
- ^ "Way-predicting cache memory".
- ^ "United States Patent" (PDF). rpx-patents.s3.amazonaws.com. November 22, 1994. Retrieved 2023-05-04.
- ^ "US Patent Application for DYNAMIC CACHE REPLACEMENT WAY SELECTION BASED ON ADDRESS TAG BITS Patent Application (Application #20160350229 issued December 1, 2016) - Justia Patents Search". patents.justia.com.
- ^ Nathan N. Sadler; Daniel J. Sorin (2006). "Choosing an Error Protection Scheme for a Microprocessor's L1 Data Cache" (PDF). p. 4.
- ^ John L. Hennessy; David A. Patterson (2011). Computer Architecture: A Quantitative Approach. Elsevier. p. B-9. ISBN 978-0-12-383872-8.
- ^ David A. Patterson; John L. Hennessy (2009). Computer Organization and Design: The Hardware/Software Interface. Morgan Kaufmann. p. 484. ISBN 978-0-12-374493-7.
- ^ a b c Gene Cooperman (2003). "Cache Basics".
- ^ Ben Dugan (2002). "Concerning Cache".
- ^ 하비 G. 크래곤."메모리 시스템과 파이프라인 프로세서", 1996.ISBN 0-86720-474-5, ISBN 978-0-86720-474-2."4.1장: 캐시 어드레싱, 가상 또는 실제" 페이지 209[1]
- ^ R. W. O'Neill. Experience using a time sharing multiprogramming system with dynamic address relocation hardware. Proc. AFIPS Computer Conference 30 (Spring Joint Computer Conference, 1967). pp. 611–621. doi:10.1145/1465482.1465581.
- ^ Sumner, F. H.; Haley, G.; Chenh, E. C. Y. (1962). "The Central Control Unit of the 'Atlas' Computer". Information Processing 1962. IFIP Congress Proceedings. Vol. Proceedings of IFIP Congress 62. Spartan.
- ^ Kilburn, T.; Payne, R. B.; Howarth, D. J. (December 1961). "The Atlas Supervisor". Computers - Key to Total Systems Control. Conferences Proceedings. Vol. 20 Proceedings of the Eastern Joint Computer Conference Washington, D.C. Macmillan. pp. 279–294.
- ^ Kaxiras, Stefanos; Ros, Alberto (2013). A New Perspective for Efficient Virtual-Cache Coherence. 40th International Symposium on Computer Architecture (ISCA). pp. 535–547. CiteSeerX 10.1.1.307.9125. doi:10.1145/2485922.2485968. ISBN 9781450320795. S2CID 15434231.
- ^ "Understanding Caching". Linux Journal. Retrieved 2010-05-02.
- ^ Taylor, George; Davies, Peter; Farmwald, Michael (1990). "The TLB Slice - A Low-Cost High-Speed Address Translation Mechanism". CH2887-8/90/0000/0355$01.OO.
{{cite journal}}
:저널 요구사항 인용journal=
(도움말) - ^ Timothy Roscoe; Andrew Baumann (2009-03-03). "Advanced Operating Systems Caches and TLBs (263-3800-00L)" (PDF). systems.ethz.ch. Archived from the original (PDF) on 2011-10-07. Retrieved 2016-02-14.
- ^ Jiang Lin; Qingda Lu; Xiaoning Ding; Zhao Zhang; Xiaodong Zhang; P. Sadayappan (2008). Gaining insights into multicore cache partitioning: Bridging the gap between simulation and real systems. IEEE 14th International Symposium on High Performance Computer Architecture. Salt Lake City, UT. pp. 367–378. doi:10.1109/HPCA.2008.4658653.
- ^ "Letter to Jiang Lin" (PDF).
- ^ N.P. 주피."소규모 완전 연관 캐시와 프리페치 버퍼를 추가하여 직접 매핑된 캐시 성능 향상" - 1990년 제17회 컴퓨터 아키텍처 연례 국제 심포지엄절차 : 10.1109/ISCA.1990.134547
- ^ a b "Products (Formerly Crystal Well)". Intel. Retrieved 2013-09-15.
- ^ a b "Intel Iris Pro 5200 Graphics Review: Core i7-4950HQ Tested". AnandTech. Retrieved 2013-09-16.
- ^ Ian Cutress (September 2, 2015). "The Intel Skylake Mobile and Desktop Launch, with Architecture Analysis". AnandTech.
- ^ Anand Lal Shimpi (2000-11-20). "The Pentium 4's Cache – Intel Pentium 4 1.4 GHz & 1.5 GHz". AnandTech. Retrieved 2015-11-30.
- ^ a b Agner Fog (2014-02-19). "The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for assembly programmers and compiler makers" (PDF). agner.org. Retrieved 2014-03-21.
- ^ David Kanter (August 26, 2010). "AMD's Bulldozer Microarchitecture - Memory Subsystem Continued". Real World Technologies.
- ^ David Kanter (September 25, 2010). "Intel's Sandy Bridge Microarchitecture - Instruction Decode and uop Cache". Real World Technologies.
- ^ a b Baruch Solomon; Avi Mendelson; Doron Orenstein; Yoav Almog; Ronny Ronen (August 2001). "Micro-Operation Cache: A Power Aware Frontend for Variable Instruction Length ISA" (PDF). ISLPED'01: Proceedings of the 2001 International Symposium on Low Power Electronics and Design (IEEE Cat. No.01TH8581). Intel. pp. 4–9. doi:10.1109/LPE.2001.945363. ISBN 978-1-58113-371-4. S2CID 195859085. Retrieved 2013-10-06.
- ^ a b Anand Lal Shimpi (2012-10-05). "Intel's Haswell Architecture Analyzed". AnandTech. Retrieved 2013-10-20.
- ^ Ian Cutress (2016-08-18). "AMD Zen Microarchitecture: Dual Schedulers, Micro-Op Cache and Memory Hierarchy Revealed". AnandTech. Retrieved 2017-04-03.
- ^ Leon Gu; Dipti Motiani (October 2003). "Trace Cache" (PDF). Retrieved 2013-10-06.
- ^ Kun Niu (28 May 2015). "How does the BTIC (branch target instruction cache) work?". Retrieved 7 April 2018.
- ^ "Intel Smart Cache: Demo". Intel. Retrieved 2012-01-26.
- ^ "Inside Intel Core Microarchitecture and Smart Memory Access". Intel. 2006. p. 5. Archived from the original (PDF) on 2011-12-29. Retrieved 2012-01-26.
- ^ "Intel Iris Pro 5200 Graphics Review: Core i7-4950HQ Tested". AnandTech. Retrieved 2014-02-25.
- ^ Tian Tian; Chiu-Pi Shih (2012-03-08). "Software Techniques for Shared-Cache Multi-Core Systems". Intel. Retrieved 2015-11-24.
- ^ Oded Lempel (2013-07-28). "2nd Generation Intel Core Processor Family: Intel Core i7, i5 and i3" (PDF). hotchips.org. p. 7–10,31–45. Archived from the original (PDF) on 2020-07-29. Retrieved 2014-01-21.
- ^ Chen, J. Bradley; Borg, Anita; Jouppi, Norman P. (1992). "A Simulation Based Study of TLB Performance". SIGARCH Computer Architecture News. 20 (2): 114–123. doi:10.1145/146628.139708.
- ^ "Explanation of the L1 and L2 Cache". amecomputers.com. Archived from the original on 2014-07-14. Retrieved 2014-06-09.
- ^ a b c Ying Zheng; Brian T. Davis; Matthew Jordan (10–12 March 2004). Performance Evaluation of Exclusive Cache Hierarchies (PDF). IEEE International Symposium on Performance Analysis of Systems and Software. Austin, TX, USA. pp. 89–96. doi:10.1109/ISPASS.2004.1291359. ISBN 0-7803-8385-0. Archived from the original (PDF) on 2012-08-13. Retrieved 2014-06-09.
- ^ Aamer Jaleel; Eric Borch; Malini Bhandaru; Simon C. Steely Jr.; Joel Emer (2010-09-27). "Achieving Non-Inclusive Cache Performance with Inclusive Caches" (PDF). jaleels.org. Retrieved 2014-06-09.
- ^ "AMD K8". Sandpile.org. Archived from the original on 2007-05-15. Retrieved 2007-06-02.
- ^ "Cortex-R4 and Cortex-R4F Technical Reference Manual". arm.com. Retrieved 2013-09-28.
- ^ "L210 Cache Controller Technical Reference Manual". arm.com. Retrieved 2013-09-28.
- ^ Mahapatra, Nihar R.; Venkatrao, Balakrishna (1999). "The processor-memory bottleneck: problems and solutions" (PDF). Crossroads. 5 (3es): 2–es. doi:10.1145/357783.331677. S2CID 11557476. Archived from the original (PDF) on 2014-03-05. Retrieved 2013-03-05.
- ^ GE-645 System Manual (PDF). General Electric. January 1968. Retrieved 2020-07-10.
- ^ IBM System/360 Model 67 Functional Characteristics (PDF). Third Edition. IBM. February 1972. GA27-2719-2.
- ^ James E. Thornton (October 1964), "Parallel operation in the control data 6600" (PDF), Proc. of the October 27-29, 1964, fall joint computer conference, part II: very high speed computer systems
- ^ IBM (June 1968). IBM System/360 Model 85 Functional Characteristics (PDF). SECOND EDITION. A22-6916-1.
- ^ "Intel® Xeon® Processor E7 Family". Intel. Retrieved 2013-10-10.
- ^ Sally Adee (2009). "Chip Design Thwarts Sneak Attack on Data".
{{cite journal}}
:저널 요구사항 인용journal=
(도움말) - ^ Zhenghong Wang; Ruby B. Lee (November 8–12, 2008). A novel cache architecture with enhanced performance and security (PDF). 41st annual IEEE/ACM International Symposium on Microarchitecture. pp. 83–93. Archived (PDF) from the original on March 6, 2012.
- ^ "CACTI". HP Labs. Retrieved 2023-01-29.
외부 링크
- 메모리 파트 2: CPU 캐시 – CPU 캐시에 대해 자세히 설명하는 Ulrich Drepper의 lwn.net 기사
- CPU 캐시의 Associativity 평가 – Hill and Smith(1989) – 용량, 충돌 및 강제 분류 도입
- SPEC CPU2000 벤치마크의 Cache Performance – Hill and Cantin(2003) – 이 참고 자료는 여러 번 업데이트되었습니다.비교적 광범위한 벤치마크 및 캐시 조직에 대한 시뮬레이션 결과를 철저하고 명확하게 제시했습니다.
- 캐시 기반 시스템의 메모리 계층 2009-09-15 Wayback Machine에서 아카이브 – Ruud van der Pas, 2002, Sun Microsystems – CPU 메모리 캐싱에 대한 멋진 소개 기사
- 캐시 프라이머 – Paul Genua, P.E., 2004, Freescale Semiconductor, 또 다른 소개 기사
- VHDL로 작성된 8방향 세트 연관 캐시
- CPU 캐싱 및 성능의 이해 – Ars Technica에 대한 Jon Stokes의 기사
- IBM POWER4 프로세서 리뷰 – Pavel Danilov의 ixbtlabs에 대한 기사
- 캐시 메모리 및 그 유형이란!
- 메모리 캐싱 – Princeton 대학 강의