핵심 인사이트 (3줄 요약)

  1. 본질: 분리 캐시 (Split Cache)는 L1 (Level 1) 캐시를 명령어 전용 I-Cache (Instruction Cache)와 데이터 전용 D-Cache (Data Cache)로 나누어, 같은 사이클에 서로 다른 종류의 접근을 동시에 처리하게 만든 구조다.
  2. 가치: 이 분리는 파이프라인의 명령어 인출과 데이터 읽기·쓰기가 하나의 캐시 포트를 놓고 다투는 구조적 해저드 (Structural Hazard)를 줄여, 코어가 멈추지 않고 흐르도록 돕는다.
  3. 판단 포인트: Split Cache는 속도를 위해 용도를 고정하는 선택이므로, 가장 앞단 L1에서는 유리하지만 용량 유연성이 중요한 L2 (Level 2), L3 (Level 3)에서는 통합 캐시 (Unified Cache)와의 조합으로 이해해야 한다.

Ⅰ. 개요 및 필요성

분리 캐시 (Split Cache)는 프로세서가 가장 자주 만지는 1차 캐시를 코드용 창구데이터용 창구로 나누는 구조다. CPU (Central Processing Unit)는 한편으로 다음 명령어를 계속 읽어 와야 하고, 다른 한편으로는 계산 과정에서 필요한 피연산자와 결과값도 메모리 계층에서 주고받아야 한다. 이 두 작업이 하나의 작은 캐시 자원을 동시에 요구하면, 캐시 용량보다 먼저 접근 충돌이 병목이 된다.

특히 파이프라인 프로세서에서는 이 문제가 더 선명하다. IF (Instruction Fetch) 단계는 다음 명령어를 가져오고, MEM (Memory Access) 단계는 로드·스토어를 수행한다. 단일 L1 캐시만 있을 경우 같은 클럭에서 IF와 MEM이 같은 포트를 요구할 수 있고, 그 순간 코어는 계산 능력이 남아 있어도 한쪽을 기다리게 된다. Split Cache는 이 경쟁 자체를 구조적으로 분리해, "빨리 저장하느냐"보다 먼저 "서로 부딪히지 않느냐"를 해결한다.

아래 그림은 왜 Split Cache가 단순한 저장 공간 분할이 아니라 접근 경로 분리인지 보여준다.

┌──────────────────────────────────────────────────────────────┐
│        단일 L1 캐시와 분리 L1 캐시의 접근 충돌 차이         │
├──────────────────────────────────────────────────────────────┤
│ [단일 L1 캐시]                                               │
│ IF: 명령어 읽기 ─┐                                           │
│                  ├──▶ [하나의 캐시 포트] ───▶ 충돌 가능      │
│ MEM: 데이터 접근 ─┘                                           │
│                                                              │
│ [Split Cache]                                                │
│ IF: 명령어 읽기 ───────▶ [I-Cache]                           │
│ MEM: 데이터 접근 ─────▶ [D-Cache]                            │
│                                                              │
│ 핵심: 저장공간을 나눈 것이 아니라 동시 접근 경로를 나눔      │
└──────────────────────────────────────────────────────────────┘

즉 Split Cache는 폰 노이만 병목 (Von Neumann Bottleneck)을 완전히 없애는 기술이라기보다, 최소한 코어 바로 앞단에서는 명령어 흐름과 데이터 흐름이 서로의 발목을 잡지 않게 하는 현실적 해법이다. 없으면 작은 캐시라도 입구 하나에 모든 트래픽이 몰리고, 있으면 각 흐름이 자기 전용 통로를 통해 더 예측 가능하게 움직인다.

  • 📢 섹션 요약 비유: 분리 캐시는 학교 급식실에서 "배식 줄"과 "식판 반납 줄"을 따로 둔 것과 같다. 둘 다 같은 문을 쓰면 계속 엉키지만, 통로를 나누면 사람 수가 그대로여도 훨씬 부드럽게 흐른다.

Ⅱ. 아키텍처 및 핵심 원리

Split Cache의 핵심은 단순히 캐시를 반으로 자르는 것이 아니라, 명령어와 데이터의 성격이 다르다는 사실을 설계에 반영하는 데 있다. I-Cache는 거의 읽기 전용이며 순차 접근이 많아 프리페치 (Prefetch)와 분기 예측 (Branch Prediction)의 영향을 크게 받는다. 반면 D-Cache는 읽기와 쓰기가 모두 발생하고, 지역성 패턴도 배열 순회·스택 접근·포인터 추적처럼 훨씬 다양하다.

그래서 두 캐시는 내부 정책도 달라진다. I-Cache는 보통 코드 밀도, 순차 인출, 분기 이후 재시작 비용이 중요하고, D-Cache는 쓰기 정책, 더티 비트 (Dirty Bit), 저장 순서, load/store 대기 시간이 중요하다. 같은 SRAM (Static Random Access Memory) 기반 캐시라 해도, "무엇을 얼마나 자주 어떻게 읽고 쓰는가"가 달라서 최적점도 달라진다.

구분I-Cache (Instruction Cache)D-Cache (Data Cache)
주 대상실행할 명령어피연산자와 결과값
주 접근 특성순차 인출, 분기 영향 큼읽기/쓰기 혼합, 패턴 다양
쓰기 빈도매우 낮음높음
중요 메타데이터태그, 유효 비트, 프리페치 효율태그, 유효 비트, 더티 비트, 쓰기 정책
병목 포인트분기 미스 후 재인출Load/Store 지연, 쓰기 반영

이 구조는 하버드 아키텍처 (Harvard Architecture)의 아이디어를 L1에 부분적으로 적용한 것으로 볼 수 있다. 즉 메모리 전체를 완전히 분리하지는 않더라도, 코어가 가장 빠른 응답을 요구하는 첫 계층에서는 명령어 경로와 데이터 경로를 따로 둔다. 하지만 두 경로가 영원히 분리되는 것은 아니며, 아래 계층으로 내려갈수록 하나의 백엔드 메모리 시스템으로 합류하는 경우가 일반적이다.

┌──────────────────────────────────────────────────────────────┐
│             현대 프로세서에서의 Split Cache 위치            │
├──────────────────────────────────────────────────────────────┤
│                    CPU Core                                  │
│              ┌───────────────┐                               │
│ 명령어 경로 ─▶   L1 I-Cache   ├────┐                          │
│              └───────────────┘    │                          │
│                                   ├──▶ L2 Unified Cache      │
│              ┌───────────────┐    │          │               │
│ 데이터 경로 ─▶   L1 D-Cache   ├────┘          ▼               │
│              └───────────────┘         L3 / Main Memory      │
│                                                              │
│ 앞단은 분리, 뒷단은 통합: 속도와 유연성의 절충               │
└──────────────────────────────────────────────────────────────┘

중요한 점은 Split Cache가 "항상 더 큰 대역폭"을 뜻하는 것이 아니라, L1 수준에서 독립 접근 가능성을 확보한다는 뜻이라는 점이다. 만약 코어가 매 사이클 명령어 인출과 데이터 접근을 동시에 수행할 수 있다면, 단일 포트 캐시보다 훨씬 자연스럽게 파이프라인을 유지할 수 있다. 반대로 이 분리 덕분에 캐시 용량이 고정 분할되므로, 접근 충돌 완화와 용량 유연성 사이에는 분명한 교환관계가 생긴다.

  • 📢 섹션 요약 비유: 분리 캐시는 공항에서 국내선 수속 창구와 수하물 창구를 따로 두는 것과 같다. 둘 다 여행에 필요하지만 처리 방식이 달라서, 같은 창구에 몰아넣기보다 역할별로 나눌수록 전체 흐름이 빨라진다.

Ⅲ. 비교 및 연결

Split Cache를 이해하려면 통합 캐시 (Unified Cache)와의 경계를 분명히 봐야 한다. Unified Cache는 명령어와 데이터를 한 저장공간에서 함께 관리하므로, 특정 순간 코드가 적고 데이터가 많다면 더 많은 공간을 데이터에 사실상 배분할 수 있다. 즉 저장 공간 활용의 탄력성은 좋다. 하지만 바로 그 이유 때문에 명령어 접근과 데이터 접근이 같은 자원을 공유하고, 설계에 따라서는 포트 경쟁이나 스케줄링 복잡도가 증가한다.

반면 Split Cache는 처음부터 공간을 둘로 쪼개기 때문에, 동시 접근 경로는 유리하지만 한쪽이 놀고 다른 한쪽이 부족해도 즉시 빌려 쓰기 어렵다. 예를 들어 루프 본문은 짧고 데이터셋만 큰 과학 계산에서는 D-Cache 압박이 강하고, 반대로 분기와 함수 호출이 많은 복잡한 제어 프로그램에서는 I-Cache 압박이 강해질 수 있다. 즉 Split Cache는 접근 충돌을 줄이는 대신 용량 적응성을 포기하는 구조다.

비교 항목Split CacheUnified Cache
명령어/데이터 경로물리적 분리자원 공유
동시 접근 처리유리구현 방식에 따라 제약
용량 활용 유연성낮음높음
설계 초점파이프라인 처리량, 저지연총 적중률, 자원 통합
주 사용 위치주로 L1주로 L2/L3

이 비교는 계층 구조 전체를 이해할 때 더 중요하다. 현대 프로세서는 보통 L1에서는 Split Cache를 택하고, 더 아래에서는 Unified Cache를 둔다. 이유는 간단하다. 가장 앞단에서는 1~4사이클 수준의 즉시 반응성과 동시성이 절대적으로 중요하고, 아래 계층에서는 수십~수백 사이클을 감수하는 대신 전체 적중률과 공유 효율이 더 중요하기 때문이다. 결국 Split Cache는 "좋은 캐시의 정답"이 아니라, 어느 계층에서 무엇을 우선할 것인가에 대한 선택이다.

이 개념은 다른 주제와도 연결된다. I-Cache는 분기 예측, 프리페칭, 코드 배치 최적화와 이어지고, D-Cache는 쓰기 정책, 캐시 일관성 (Cache Coherence), load/store 큐와 더 가깝다. 따라서 Split Cache는 단일 용어가 아니라, 명령어 흐름 최적화와 데이터 흐름 최적화가 서로 다른 규칙을 가진다는 사실을 구조적으로 드러내는 장치다.

  • 📢 섹션 요약 비유: 분리 캐시는 서점에서 "책 코너"와 "문구 코너"를 따로 운영하는 방식이고, 통합 캐시는 하나의 대형 홀에서 모두 진열하는 방식이다. 전자는 찾기와 이동이 빠르고, 후자는 공간을 더 유연하게 쓸 수 있다.

Ⅳ. 실무 적용 및 기술사 판단

실무에서 Split Cache는 "있으면 좋다"가 아니라, 어떤 병목을 줄이려는지 명확히 봐야 하는 설계 요소다. 고클럭 코어, 깊은 파이프라인, 강한 분기 예측을 쓰는 프로세서는 명령어 인출이 끊기지 않는 것이 매우 중요하므로 I-Cache의 독립성이 큰 가치가 있다. 동시에 load/store가 잦은 워크로드에서는 D-Cache가 별도 포트와 정책을 가져야 데이터 경로 튜닝도 쉬워진다.

소프트웨어 관점에서도 영향이 분리되어 나타난다. 코드 크기가 불필요하게 커지면 I-Cache 미스가 늘어나고, 데이터 구조가 흩어져 있으면 D-Cache 미스가 늘어난다. 즉 같은 "캐시 최적화"라도 인라인 함수 남발, 과도한 가상 호출, 거대한 핫 루프는 I-Cache 문제를 만들고, 포인터 체이싱, 비연속 접근, 낮은 지역성은 D-Cache 문제를 만든다. Split Cache를 이해하면 성능 저하 원인을 "그냥 캐시가 작다"가 아니라 코드 측 병목인지 데이터 측 병목인지로 나눠 판단할 수 있다.

기술사 관점 체크포인트

  1. L1에서는 지연시간과 동시 접근성이, 하위 캐시에서는 용량 효율과 공유성이 더 중요하다는 점을 구분할 것
  2. 명령어 병목은 코드 배치·분기·함수 크기와, 데이터 병목은 자료구조·쓰기 정책·지역성과 연결해서 설명할 것
  3. Split Cache를 하버드 아키텍처의 "완전한 복제"가 아니라 L1 수준의 부분 적용으로 표현할 것

대표 안티패턴

  • 모든 캐시 문제를 D-Cache 미스로만 해석하고 I-Cache 압박을 놓치는 경우
  • L1도 L2처럼 용량 유연성이 중요하다고 보고, 앞단 충돌 비용을 과소평가하는 경우
  • 코드와 데이터의 접근 성격 차이를 무시한 채 동일한 최적화 원칙을 적용하는 경우

실제 설계 답안에서는 "왜 L1만 Split인가?"라는 질문에 답할 수 있어야 한다. 정답은 단순히 전통이라서가 아니라, 가장 가까운 계층에서는 충돌 없는 저지연 접근이 절대 과제이고, 더 아래 계층에서는 남는 공간을 함께 쓰는 효율이 더 중요하기 때문이다.

  • 📢 섹션 요약 비유: 분리 캐시를 이해한 설계자는 병원에서 외래 접수 문제와 수술실 문제를 같은 방식으로 풀지 않는다. 앞문 혼잡은 동선을 나눠 해결하고, 뒤쪽 자원 부족은 큰 창고를 함께 쓰는 방식으로 푼다.

Ⅴ. 기대효과 및 결론

Split Cache의 가장 직접적인 효과는 파이프라인 전면부의 정체를 줄여, 프로세서가 같은 클럭 안에서 명령어 흐름과 데이터 흐름을 더 자연스럽게 겹쳐 실행하도록 만드는 데 있다. 이로 인해 체감 성능은 단순한 캐시 용량 증가보다 더 크게 좋아질 수 있다. 왜냐하면 코어 가까운 병목은 "얼마나 많이 저장했는가" 못지않게 "동시에 접근할 수 있는가"에 달려 있기 때문이다.

다만 Split Cache는 만능이 아니다. 캐시 총량이 고정된 상황에서 I-Cache와 D-Cache 사이의 경계가 너무 경직되면, 워크로드 편중에 따라 한쪽은 부족하고 다른 한쪽은 남을 수 있다. 또한 하위 계층과의 연결, 일관성 관리, 프리페치 정책 조율까지 고려해야 하므로, 분리만으로 전체 시스템이 자동 최적화되지는 않는다.

따라서 Split Cache는 "명령어와 데이터는 본질적으로 다른 흐름"이라는 통찰을 하드웨어에 새겨 넣은 설계라고 기억하면 좋다. 가장 앞단에서는 둘을 갈라 충돌을 줄이고, 더 아래에서는 다시 합쳐 전체 효율을 높인다. 이 분리와 통합의 계층적 조합이 현대 캐시 아키텍처의 핵심 균형이다.

  • 📢 섹션 요약 비유: 분리 캐시는 고속도로 초입에서 승용차와 화물차 차선을 나누는 것과 같다. 입구에서는 빨리 흘려보내는 것이 중요하고, 멀리 가는 큰 환승 구간에서는 다시 넓은 도로를 함께 쓰는 편이 더 효율적이다.

📌 관련 개념 맵

개념연결 포인트
하버드 아키텍처 (Harvard Architecture)명령어와 데이터를 분리해 다루는 발상을 제공하며, Split Cache의 개념적 배경이 됨
구조적 해저드 (Structural Hazard)하나의 하드웨어 자원을 동시에 요구할 때 생기는 충돌로, Split Cache가 직접 완화하려는 대상
통합 캐시 (Unified Cache)Split Cache와 대비되는 구조로, 하위 계층에서 용량 유연성을 제공
프리페칭 (Prefetching)I-Cache와 D-Cache 각각에서 다른 패턴으로 작동하며 분리 설계의 이점을 강화
더티 비트 (Dirty Bit)D-Cache 쪽 쓰기 관리와 밀접하게 연결되어, I-Cache와 데이터 경로의 차이를 드러냄

📈 관련 키워드 및 발전 흐름도

폰 노이만 구조의 단일 메모리 접근
        │
        ▼
파이프라인 확장 · IF / MEM 동시 접근 문제
        │
        ▼
L1 Split Cache (I-Cache + D-Cache)
        │
        ├──────────────▶ I-Cache 최적화
        │                 (분기 예측 · 코드 배치 · 명령어 프리페치)
        │
        └──────────────▶ D-Cache 최적화
                          (쓰기 정책 · 더티 비트 · 데이터 지역성)
        │
        ▼
L2/L3 Unified Cache와 결합한 하이브리드 계층

이 흐름도는 Split Cache가 단독 기술이 아니라, 파이프라인 병목 해결에서 출발해 명령어 최적화와 데이터 최적화로 갈라지고, 다시 하위 계층 통합 구조와 결합하는 과정을 보여준다.

👶 어린이를 위한 3줄 비유 설명

  1. 컴퓨터는 책을 읽는 손과 연필을 쓰는 손을 동시에 움직이고 싶어 해요.
  2. 그래서 책장은 "읽을 책 칸"과 "연필·공책 칸"을 따로 만들어 서로 안 부딪히게 해요.
  3. 덕분에 한쪽이 바빠도 다른 쪽이 기다리지 않아서 공부를 더 빨리 할 수 있어요.