CPU 캐시란 무엇입니까?

최신 CPU는 엄청나게 빠르게 실행됩니다. 그들은 시스템 RAM을 훨씬 능가할 수 있습니다. CPU와 메모리 사이의 이러한 속도 불균형으로 인해 프로세서는 종종 유휴 상태로 유지되어 프로세스를 계속 실행할 수 있도록 데이터가 전송되기를 기다립니다. 이러한 일이 발생하지 않도록 CPU가 계속해서 더 빠르게 실행되도록 하기 위해 CPU 캐시가 사용됩니다.

CPU 캐시는 CPU 속도를 어떻게 높입니까?

CPU 캐시는 가능한 한 빠르게 CPU가 요청하는 데이터를 캐시하도록 설계되었습니다. CPU 캐시는 대기 시간, 대역폭 및 근접성의 세 가지 방식으로 속도가 최적화됩니다. CPU 캐시는 매우 짧은 대기 시간으로 작동하여 결과가 반환되는 데 걸리는 시간을 최소화합니다. 예를 들어 Intel i9-9900k는 L1, L2 및 L3 캐시에 대해 각각 0.8, 2.4 및 11.1 나노초의 캐시 대기 시간을 갖습니다. 이에 비해 최신 고속 RAM의 대기 시간은 14나노초 정도입니다.

팁: 캐시 레벨은 나중에 더 자세히 설명하겠지만 간단히 말하면 캐시의 하위 계층이 더 빠르지만 더 비싸므로 용량이 더 작습니다. 나노초는 10억분의 1초이므로 0.8초의 대기 시간은 결과를 반환하는 데 10억분의 1초 미만이 걸린다는 것을 의미합니다.

대역폭 측면에서 CPU 캐시는 기존 스토리지 및 RAM에 비해 상당한 성능 향상을 제공합니다. L1 및 L3 캐시의 읽기 속도는 각각 2.3TB/s 및 370GB/s에서 최고조에 달할 수 있는 반면 RAM의 대역폭은 일반적으로 약 40GB/s입니다. 이렇게 증가한 대역폭은 CPU 캐시가 RAM보다 훨씬 빠르게 데이터를 CPU로 전송할 수 있음을 의미합니다.

가능한 최대 속도를 달성하기 위해 CPU 캐시는 실제로 CPU 다이 자체의 실리콘에 내장되어 있습니다. 이것은 모든 전기 신호가 이동해야 하는 거리를 최소화하므로 대기 시간을 가능한 한 낮게 유지합니다. 예를 들어, L3 캐시가 마더보드에서 CPU 다이로 처음 이동되었을 때 당시의 프로세서(펜티엄 4 EE)는 10-20%의 성능 향상을 얻을 수 있었습니다.

CPU 캐시 아키텍처

최신 CPU는 일반적으로 L1-3이라는 레이블이 붙은 3개의 CPU 캐시 레이어를 사용합니다. 멀티 코어 CPU의 각 개별 CPU 코어에는 자체 L1 캐시가 있습니다. 일반적으로 L1I와 L1D의 두 부분으로 나뉩니다. L1I는 CPU에 대한 명령을 캐시하는 데 사용되며 L1D는 해당 명령이 수행될 데이터를 캐시하는 데 사용됩니다.

각 CPU 코어에는 일반적으로 최신 CPU에 자체 L2 캐시가 있습니다. L2 캐시는 L1 캐시보다 크고 느리며 주로 L2 캐시에 맞지 않는 데이터를 저장하는 데 사용됩니다. 코어당 전용 L2 캐시를 사용하여 캐시 경합을 방지합니다. 캐시 경합은 서로 다른 코어가 자체 워크로드에 대한 캐시 공간을 확보하기 위해 싸우는 곳이며, 이로 인해 캐시에서 중요한 데이터가 지워질 수 있습니다.

L3 캐시는 일반적으로 프로세서의 모든 CPU 코어 간에 공유됩니다. 다시 말하지만, L3 캐시는 L2 캐시보다 느리지만 저렴하고 더 큽니다. 공유 캐시를 제공하면 더 낮은 수준의 코어당 캐시에서 복제되는 데이터의 양을 줄일 수 있습니다.

팁: 예를 들어 캐시 크기에서 Intel의 i9-9900K에는 코어당 64KB L1 및 256KB L2 캐시가 있으며(총 512KB L1 및 2MB L2) 16MB 공유 L3 캐시도 있습니다.

CPU 캐시는 어떻게 사용됩니까?

CPU 캐시의 모든 수준은 RAM에서 데이터를 캐싱하여 프로세서 성능 속도를 높이는 데 사용됩니다. CPU가 데이터를 요청할 때 일반적으로 가능한 한 빨리 데이터를 가져오기 위해 먼저 캐시 계층을 검색합니다. 데이터가 캐시 적중에서 발견되면 CPU는 처리를 계속할 수 있습니다. 데이터가 캐시에 없으면 캐시 미스라고 하는 경우 CPU가 RAM을 확인한 다음 데이터가 없는 경우 하드 드라이브를 확인해야 합니다. 최대 성능을 위해 항상 더 빠른 레이어가 먼저 확인됩니다.

CPU가 필요할 때 캐시에 필요한 데이터를 가질 수 있도록 캐시는 CPU가 다음에 필요할 수 있는 데이터를 선점하려고 시도합니다. 예를 들어, CPU가 이미지에 대한 일부 데이터를 요청한 경우 캐시를 렌더링하는 것은 가능한 한 빨리 CPU에 공급할 수 있도록 더 많은 이미지 데이터를 선제적으로 캐시하려고 시도할 수 있습니다.