데이터와 명령어에 대해 별도의 L1 캐시가있는 이유는 무엇입니까?


답변:


28

실제로 몇 가지 이유가 있습니다.

가장 먼저, 아마도 명령 캐시에 저장된 데이터는 일반적으로 데이터 캐시에 저장된 것과 약간 다릅니다. 명령 자체와 함께 다음 명령이 시작되는 위치에 대한 주석이있어 디코더를 도와줍니다. 일부 프로세서 (예 : Netburst, 일부 SPARC)는 "추적 캐시"를 사용합니다.이 명령은 원래 명령을 인코딩 된 형식으로 저장하지 않고 명령 디코딩 결과를 저장합니다.

둘째, 데이터 캐시는 읽기 및 쓰기를 처리해야하지만 명령 캐시는 읽기만 처리합니다. (이것은 자체 수정 코드가 너무 비싼 이유의 일부입니다. 명령 캐시의 데이터를 직접 덮어 쓰는 대신 쓰기는 데이터 캐시를 통해 L2 캐시로 이동 한 다음 명령 캐시의 행이 무효화되고 다시 -L2에서로드).

셋째, 대역폭을 증가시킵니다. 대부분의 최신 프로세서는 명령 캐시와 데이터 캐시에서 동시에 데이터를 읽을 수 있습니다. 대부분의 경우 캐시에 대한 "입구"에 큐가 있으므로 주어진주기에서 실제로 두 번의 읽기와 한 번의 쓰기를 수행 할 수 있습니다.

넷째, 전력을 절약 할 수 있습니다. 내용을 유지하기 위해 메모리 셀 자체에 전원을 유지해야하는 반면, 일부 프로세서는 사용되지 않는 일부 관련 회로 (디코더 등)의 전원을 끌 수도 있습니다. 별도의 캐시를 사용하면 명령 및 데이터를 위해 이러한 회로를 개별적으로 전원 공급할 수 있으므로 특정주기 동안 회로의 전원이 꺼진 상태로 유지 될 가능성이 높아집니다 (x86 프로세서가 확실하지 않은 경우-AFAIK, ARM에 가깝습니다) 의회).


3
코드와 데이터가 서로 다른 액세스 패턴을 나타낼 수 있다는 점도 언급해야합니다. 예를 들어, 배열의 모든 요소를 ​​합산하는 명령은 시간적 지역성을 나타내며 (동일한 명령이 자주 사용되는 경우 (루프에서 사용하는 경우)) 배열의 데이터는 공간적 지역성을 나타냅니다 (다음 데이터는 다음에 사용됨).
gablin

1
@gablin : 사실이지만 이러한 패턴의 차이는 종종 통합 캐시를 선호합니다. 언급 한 것처럼 루프에서 대부분 의 명령 캐시는 유휴 상태입니다. 통합 캐시는 기본적으로 루프 지속 시간 동안 데이터 캐시 크기의 두 배입니다.
Jerry Coffin

거기에 더 많은 코드가 작은 루프 후이고 그 때문에 정말되지 가능성이 배열 작업을합니다. 이는 많은 코드 (예 : 문자열 처리)를 특징으로합니다. 실제로 CPU의 첫 번째 캐시는 통합 캐시 (CPU의 주요 메모리 인터페이스와 외부 버스 사이에 위치하기에 단순한 장소) 사이에 있었지만 실제로는 더 빠르기 때문에 분할 된 캐시를 사용합니다 .
Donal Fellows

@Donal Fellows : 그렇습니다. 초기 캐싱이 수행 된 방식과 분할 캐시로 변경된 이유를 잘 알고 있습니다.
Jerry Coffin

5

부동산과 마찬가지로 캐시 사용은 위치, 위치, 위치의 세 가지 요소에 의해 좌우됩니다. 캐시를 갖는 요점은 대부분의 프로그램이 위치 패턴을 나타낸다는 것입니다. 바이트 1111111에 액세스하면 다음에 액세스 할 바이트는 아마도 1111110 또는 1111112이며 바이트 9999999는 아닙니다. 그러나 대부분의 프로그램은 매우 다르게 나타납니다. 지침 및 데이터의 위치 패턴. 이는 명령 및 데이터가 캐시를 효율적으로 공유 할 수 없을 가능성이 있음을 의미합니다. 명령과 데이터가 반드시 메모리에서 서로 가까이있을 필요는 없습니다. 데이터 액세스는 캐시에서 명령을 범프하고로드 명령은 캐시에서 데이터를 범프합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.