답변:
실제로 몇 가지 이유가 있습니다.
가장 먼저, 아마도 명령 캐시에 저장된 데이터는 일반적으로 데이터 캐시에 저장된 것과 약간 다릅니다. 명령 자체와 함께 다음 명령이 시작되는 위치에 대한 주석이있어 디코더를 도와줍니다. 일부 프로세서 (예 : Netburst, 일부 SPARC)는 "추적 캐시"를 사용합니다.이 명령은 원래 명령을 인코딩 된 형식으로 저장하지 않고 명령 디코딩 결과를 저장합니다.
둘째, 데이터 캐시는 읽기 및 쓰기를 처리해야하지만 명령 캐시는 읽기만 처리합니다. (이것은 자체 수정 코드가 너무 비싼 이유의 일부입니다. 명령 캐시의 데이터를 직접 덮어 쓰는 대신 쓰기는 데이터 캐시를 통해 L2 캐시로 이동 한 다음 명령 캐시의 행이 무효화되고 다시 -L2에서로드).
셋째, 대역폭을 증가시킵니다. 대부분의 최신 프로세서는 명령 캐시와 데이터 캐시에서 동시에 데이터를 읽을 수 있습니다. 대부분의 경우 캐시에 대한 "입구"에 큐가 있으므로 주어진주기에서 실제로 두 번의 읽기와 한 번의 쓰기를 수행 할 수 있습니다.
넷째, 전력을 절약 할 수 있습니다. 내용을 유지하기 위해 메모리 셀 자체에 전원을 유지해야하는 반면, 일부 프로세서는 사용되지 않는 일부 관련 회로 (디코더 등)의 전원을 끌 수도 있습니다. 별도의 캐시를 사용하면 명령 및 데이터를 위해 이러한 회로를 개별적으로 전원 공급할 수 있으므로 특정주기 동안 회로의 전원이 꺼진 상태로 유지 될 가능성이 높아집니다 (x86 프로세서가 확실하지 않은 경우-AFAIK, ARM에 가깝습니다) 의회).
부동산과 마찬가지로 캐시 사용은 위치, 위치, 위치의 세 가지 요소에 의해 좌우됩니다. 캐시를 갖는 요점은 대부분의 프로그램이 위치 패턴을 나타낸다는 것입니다. 바이트 1111111에 액세스하면 다음에 액세스 할 바이트는 아마도 1111110 또는 1111112이며 바이트 9999999는 아닙니다. 그러나 대부분의 프로그램은 매우 다르게 나타납니다. 지침 및 데이터의 위치 패턴. 이는 명령 및 데이터가 캐시를 효율적으로 공유 할 수 없을 가능성이 있음을 의미합니다. 명령과 데이터가 반드시 메모리에서 서로 가까이있을 필요는 없습니다. 데이터 액세스는 캐시에서 명령을 범프하고로드 명령은 캐시에서 데이터를 범프합니다.