구글 안티그래비티 완전 분석 — 모델·요금제·CLI 총정리

🚀 구글 안티그래비티(Antigravity) 완전 분석 구글이 2025년 11월 Gemini 3와 함께 공개한 에이전트 퍼스트(agent-first) IDE 안티그래비티는 Claude·GPT·Gemini를 한 도구에서 골라 쓰는 멀티모델 코딩 환경이다. 이 글에서는 ① 지원 모델과 요금제별 사용량의 실체, ② 실사용자 평가, ③ 구글의 방향성, ④ Claude Code와의 비교·연계, ⑤ CLI( agy )로 직접 쓰는 법까지 다섯 갈래를 차례로 정리한다. 자료 간 충돌이 있는 지점은 한쪽으로 단정하지 않고 양쪽을 모두 살려 표기했다. 📅 기준 시점: 2026년 6월 · 프리뷰 단계 정보로 수치는 변동 가능 1. 안티그래비티란 무엇인가 — 기초 정리 안티그래비티는 2025년 7월 구글이 24억 달러 규모 라이선스 계약 으로 영입한 전 Windsurf 팀이 설계를 주도했다. VSCode를 포크한 위에 자율 에이전트 오케스트레이션 계층을 얹은 구조다. 2026년 5월 Google I/O에서 발표된 안티그래비티 2.0 은 데스크탑 앱과 함께 공식 CLI agy 를 처음 공개하며 기존 Gemini CLI의 공식 후계자 자리를 확정했다. 핵심 정체성은 단순 코드 자동완성이 아니라 병렬 에이전트 오케스트레이션 이다. 여러 에이전트가 동시에 — 하나는 API, 하나는 테스트, 또 하나는 프론트엔드 — 작업을 나눠 진행하고, 각 에이전트는 계획·테스트 결과·스크린샷·영상을 담은 Artifact 를 남긴다. "사람이 한 줄씩 승인"하는 방식이 아니라 "에이전트들이 일을 마치고 사람이 사후 검수"하는 모델이다. flowchart TD A([사용자 작업 지시]) --> B[에이전트 A API 구현] A --> C[에이전트 B 테스트 작성] A --> D[에이전트 C UI 생성] B --> E[Artifact 계획·결과·영상] C --> E D --> E...

ARM의 MOP 캐시, 왜 넣었다가 다시 뺐을까

🧩 MOps와 MOP 캐시 — ARM 프론트엔드가 넣었다 뺀 한 시대의 최적해

CPU 마이크로아키텍처 · ARM Cortex 시리즈 심층 해설

ARM CPU 문서를 따라가다 보면 Cortex-A76~A77 세대를 기점으로 "MOps(Macro-Operations)"라는 용어와 "MOP Cache"라는 구조물이 공식 문서에 등장한다. 그리고 불과 몇 년 뒤 ARM은 이 구조를 슬그머니 다시 제거한다. RISC라서 디코드가 단순하다는 ARM이, 왜 디코드 결과를 캐싱하는 구조를 넣었다가 뺐을까? 이 글은 그 모순처럼 보이는 흐름을 명령어 처리 계층의 관점에서 풀어낸다.

🧠 한눈에 — MOp는 ARM이 "원시 명령어"와 "최종 실행 단위 µOp" 사이에 둔 중간 표현이다. MOP 캐시는 이 중간 표현을 저장해 디코드 단계를 통째로 건너뛰는 장치였다. 2019년 정점을 찍고 2024년 세대에서 사실상 은퇴했다.

📚 세 계층: 명령어 → MOp → µOp

현대 고성능 CPU는 명령어를 "가져와서 곧장 실행"하지 않는다. 메모리에서 실행 유닛까지 오는 동안 여러 단계의 변환을 거친다. ARM 공식 커뮤니티 포럼에서 ARM 엔지니어는 두 용어를 이렇게 정의한다.

MOps(매크로 연산): 아키텍처가 정의한 명령어. 어셈블리로 쓰거나 컴파일러가 생성하는 바로 그 명령어다.

µOps(마이크로 연산): 프로세서가 실행 도중 내부적으로 만드는 최소 실행 단위. 프로그래머에게는 보이지 않는다.

Cortex-A78 기준으로 프론트엔드 파이프라인은 다음 계층을 흐른다.


graph TD
  A[L1 I-Cache
원시 명령어] --> B[Decode
디코드] B --> C[MOps
중간 표현] C --> D[MOP 캐시
저장] D --> E[Rename
µOps 분리] E --> F[실행 유닛
ALU·LS·FP] style A fill:#eaf2f8,stroke:#2980b9 style B fill:#fef9e7,stroke:#f39c12 style C fill:#e8f8f5,stroke:#16a085 style D fill:#eafaf1,stroke:#27ae60 style E fill:#fef9e7,stroke:#f39c12 style F fill:#f4ecf7,stroke:#8e44ad

🔗 다이어그램 요약: ARM 프론트엔드는 I-Cache의 원시 명령어를 디코드해 MOps라는 중간 표현으로 바꾸고, 이를 MOP 캐시에 저장한 뒤 Rename 단계에서 다시 µOps로 분리해 실행 유닛으로 보낸다. MOp는 명령어와 µOp 사이의 중간 레벨이다.

핵심은 MOp ≈ 명령어(거의 1:1.06) 수준의 상위 추상화라는 점이다. Cortex-A78은 명령어 4개를 디코드하면 평균 6개의 MOp를 만든다(명령어 대비 약 6% 많음). 각 MOp는 이후 다시 1~2개의 µOp로 분리되며, 진짜 최소 실행 단위는 µOp다.

CISC와 RISC, 출발점이 다르다

구분 CISC (x86) RISC (ARM AArch64)
명령어 길이 가변 (1~17바이트) 고정 4바이트
디코드 난이도 매우 높음 (경계·피연산자 모드 분석) 단순 (경계 문제 없음)
내부 분해 명령어 → 1~4 µop (1995 P6부터) 명령어 ≈ MOp → 1~2 µop

x86은 복잡 명령어를 그대로 실행하는 게 비효율적이라 P6 마이크로아키텍처부터 명령어를 µop으로 분해해 내부적으로 RISC처럼 실행해 왔다. 반면 ARM은 이론상 그런 분해가 거의 불필요하다. 그런데도 MOps라는 중간 계층을 둔 이유 — 여기서부터가 본론이다.

🕰️ 등장 배경 — x86이 먼저 두 번 실험했다

ARM이 MOP 캐시를 도입하기 전, x86 진영은 이미 "디코드 결과를 저장하자"는 아이디어를 두 차례 실험했다. ARM의 MOP 캐시는 이 흐름의 후발 주자다.

Pentium 4 Trace Cache (2000) — 디코드된 µop을 순서대로 저장한 선구적 구조. 분기 예측 실패 시 무효화 비용이 커 Core 마이크로아키텍처에서 폐기.

Intel Sandy Bridge µop Cache (2011) — 약 1.5K µop 규모의 Decoded ICache. 핫 코드에서 무거운 x86 디코드를 우회. Ivy Bridge·Haswell까지 계승.

AMD Zen Op Cache (2017) — Zen에서 첫 µop 캐시 도입. "성능뿐 아니라 전력도 절감"이라고 문서화.

ARM의 행보는 한 박자 늦게, 그러나 빠르게 진행됐다. Cortex-A76(2018)에서 씨앗을 심고 A77(2019)에서 개화한다.

2018 · A76
MOp 퓨전, 캐시 없음
2019 · A77
MOP 캐시 도입
2020~21 · X1·V1
3K 엔트리 정점
2022 · A715
축소·제거 시작
2024 · X925
사실상 은퇴

🏗️ MOP 캐시의 구조 — I-Cache와 직렬 계층

가장 흔한 오해부터 정리하자. MOP 캐시는 I-Cache와 병렬 대안이 아니라, I-Cache 하위의 직렬 계층이다. I-Cache 히트 후 디코드된 MOp가 MOP 캐시를 채우고, 같은 코드를 재실행할 때 디코드 단계를 건너뛴다.

항목 L1 I-Cache MOP Cache
저장 내용 원시 명령어 바이트 디코드된 MOps
위치 Fetch 단계 (상류) 디코드 직후
히트 효과 메모리·상위 캐시 접근 회피 디코드 단계 우회
A78 규모 64KB 1.5K MOp 엔트리

두 경로를 의사결정 흐름으로 보면 다음과 같다.


flowchart TD
  A([명령어 페치]) --> B{MOP 캐시
히트?} B -->|YES| C[디코드 우회
약 1사이클 단축] B -->|NO| D[I-Cache → Decode
MOP 캐시 채움] C --> E([Rename / 실행]) D --> E style A fill:#3498db,stroke:#2980b9,color:#ffffff style B fill:#fef9e7,stroke:#f39c12 style C fill:#eafaf1,stroke:#27ae60,color:#1e8449 style D fill:#fdedec,stroke:#e74c3c,color:#c0392b style E fill:#3498db,stroke:#2980b9,color:#ffffff

🔁 다이어그램 요약: 명령어 페치 후 MOP 캐시가 히트하면 디코드를 완전히 우회해 약 1사이클을 단축하고, 미스면 I-Cache→Decode로 폴백하며 그 결과로 MOP 캐시를 채운다. 두 경로 모두 Rename/실행으로 합류한다.

AndroidAuthority의 Cortex-A78 분석에 따르면 MOP 캐시는 다양한 워크로드에서 높은 히트율을 보인다. 핫 루프·빈번 함수 같은 반복 코드에서 디코드 단계가 거의 활성화되지 않아 전력 절감 효과가 크다.

MOP 캐시 히트율 (대표 워크로드) 85%+

한편 ARM은 I-Cache에 순수 원시 바이트가 아니라 predecode 메타데이터를 덧붙인 중간 형식으로 명령어를 담는다(A76~X1 세대는 약 36~40비트 형식). 이 predecode가 풀 디코드 비용을 줄이고, MOP 캐시는 한 발 더 나아가 디코드 자체를 건너뛴다. 이 둘의 역할 중복이 훗날 MOP 캐시 철수의 복선이 된다.

📊 세대별 변천 — 정점과 철수

ARM 코어 세대별 MOP 캐시 유무와 규모를 정리하면, 2019~2021년이 정점이고 2022년부터가 철수 국면임이 한눈에 드러난다.

코어 연도 MOP 캐시
Cortex-A76 2018 없음 (퓨전만)
Cortex-A77 2019 1.5K 최초 도입
Cortex-A78 2020 1.5K
Cortex-X1 2020 3K (2배 확장)
Neoverse V1 2021 3K (8 MOp/사이클)
Cortex-X3 2022 1.5K로 축소
Cortex-A715 2022 제거
Cortex-X925 / A725 2024 제거 (predecode 통합)

엔트리 규모만 막대로 비교하면 X1·V1 세대의 3K가 어떻게 솟았다가 다시 내려앉는지 더 직관적이다.

A77 (2019)
1.5K
X1 (2020)
3K
X3 (2022)
1.5K
X925 (2024)
0 (제거)

🔍 같은 구조, 다른 목적 — x86 µop 캐시 vs ARM MOP 캐시

겉모습은 닮았지만 두 진영의 도입 동기는 정반대에 가깝다.

💼 x86의 동기 — "복잡한 디코드 자체를 피하려고"

가변 길이 명령어의 경계 찾기, 피연산자 모드 파악, 1~4 µop 분해는 매 사이클 막대한 에너지·면적을 먹는다. µop 캐시는 이 무거운 디코더를 핫 코드에서 통째로 건너뛰기 위한 장치다.

🧠 ARM의 동기 — "디코드는 가벼우나 다른 이득이 있어서"

① 모바일 전력 절감, ② 퓨전된 MOp 재사용, ③ 리네임 직전 약 1사이클 단축으로 분기 회복 가속, ④ 프론트엔드 처리량 증대(4명령어/사이클 → 6 MOp/사이클).

개념 ARM Intel AMD
디코드 후 저장 MOP Cache µop Cache Op Cache
저장 단위 MOps (1:1.06) µops (1~4) µops
도입 시기 2019 2011 2017

핵심 차이는 추상화 수준이다. x86의 µop은 최종 실행 단위지만, ARM의 MOp는 이후 다시 µOp로 분리되는 한 단계 높은 중간 표현이다. 그래서 같은 "디코드된 명령어 캐시"라도 ARM 쪽이 저장 단위가 더 굵다.

🔒 보안 — 성능 구조가 공격 표면이 되다

디코드된 명령어 캐시는 성능 구조이면서 동시에 사이드 채널 공격 표면으로 학계의 주목을 받았다. "I See Dead µops" (ISCA 2021) 논문은 Intel·AMD의 µop 캐시가 Spectre 류 사이드 채널에 취약함을 입증했다. µop 캐시의 타이밍 차이를 이용하면 프로세스 간 데이터 누출이 가능하다는 결과다. ARM MOP 캐시는 이 논문에서 직접 다뤄지지 않았으나 구조가 유사해 동종 공격 가능성이 후속 연구 대상으로 남아 있다(ARM 측정·공격 1차 학술 자료는 아직 적어 추가 확인이 필요한 영역이다).

🔄 왜 다시 제거했나 — predecode가 같은 일을 더 싸게

Chips and Cheese의 Cortex-X925 분석에 따르면 ARM은 다음 세 가지 이유로 X925(2024)·A725(2024)에서 MOP 캐시를 제거했다.

predecode가 디코드 비용을 충분히 낮춤 — I-Cache에 76비트 형식(32비트 명령어 + 44비트 메타데이터)으로 predecode 정보를 저장하므로 풀 디코드 없이 빠르게 MOp 생성. MOP 캐시와의 병행 운영이 "과잉"이 됨.

낮은 클럭에선 이득 미미 — 효율 코어(A725)처럼 낮은 클럭에선 타이밍 여유가 충분해 1사이클 절약 효과가 작음.

면적 재배치 — 1.5~3K 엔트리가 쓰던 실리콘을 더 큰 I-Cache나 실행 유닛에 투자하는 편이 유리.

요약하면 ARM은 predecode 체계를 키워 MOP 캐시의 역할을 흡수한 셈이다. 처음 든 모순("RISC인데 왜 넣었다 뺐나")의 답이 여기 있다 — MOP 캐시는 고클럭 모바일 코어 경쟁기에 ROI가 높았다가, predecode가 성숙하면서 중복 투자가 된 시대적 최적해였다.

🍎 Apple Silicon — 다른 길로 같은 결론

Apple M1/M2의 Firestorm 고성능 코어는 약 192KB의 거대한 L1 I-Cache와 8-wide decode를 갖는다. 공개 자료 기준 별도의 "MOP 캐시" 명칭 구조는 보고되지 않았다. 대신 Apple은 거대한 I-Cache와 600+ 엔트리의 거대한 ROB(재정렬 버퍼)로 프론트엔드 병목을 푼다. "MOP 캐시 없이 충분히 큰 버퍼로도 해결 가능하다"는 대안적 접근이며, ARM 본사가 2024년 MOP 캐시를 버린 방향과 묘하게 수렴한다.

🎯 결론 — 한 시대의 최적해

MOp는 중간 표현 — 원시 명령어와 µOp 사이. 명령어와 거의 1:1이지만 복잡 명령어는 2 MOp로 분리, 단순 명령어 쌍은 1 MOp로 융합된다.

MOP 캐시는 직렬 하위 계층 — I-Cache와 병렬이 아니라, I-Cache 히트 후 디코드 결과를 채워 재실행 시 디코드를 우회한다.

닮은 구조, 다른 목적 — x86은 복잡 디코드 회피, ARM은 전력·퓨전 재사용·처리량이 동기였다.

2019 정점, 2024 은퇴 — predecode 성숙으로 역할이 중복돼 거둬들였다.

앞으로 ARM 프론트엔드 최적화는 MOP 캐시 대신 더 정교한 predecode와 분기 예측 방향으로 진화할 전망이다. 반대로 x86 µop 캐시는 CISC 복잡성이 사라지지 않는 한 필수 구조로 남는다(다만 AMD Zen 5는 프론트엔드를 개편하며 Op 캐시 역할을 재정의 중). RISC-V 진영도 고성능 구현에서 디코드된 명령어 캐시를 탐색 중이라, "디코드 결과 캐싱"은 ISA를 가리지 않는 공통 설계 화두로 남는다.

💬 한 줄 요약 — MOps는 ARM이 명령어와 µOp 사이에 둔 중간 표현이고, MOP 캐시는 그 결과를 저장해 디코드를 건너뛰는 장치였다. 그러나 predecode가 같은 일을 더 싸게 해내면서 2024년 세대에서 사실상 은퇴한 "한 시대의 최적해"다.

📎 참고 자료

• ARM Community Forum — MOps/uops 정의 (Cortex-A Forum)

• Chips and Cheese — Cortex-X925 MOP 캐시 제거 분석

• WikiChip — ARM Cortex-A77 / A78 / Neoverse V1 마이크로아키텍처

• WikiChip — Intel Sandy Bridge µop Cache, AMD Zen Op Cache

• I See Dead µops: Leaking Secrets via Intel/AMD Micro-Op Caches (ISCA 2021)

• System on Chips — ARM Cortex-A78 MOPs/UOPs Instruction Fetch Pipeline

본 콘텐츠는 공개된 마이크로아키텍처 문서와 기술 분석을 토대로 작성한 기술 해설이며, 세부 수치는 세대·구현·자료 출처에 따라 차이가 있을 수 있습니다. 칩 설계 의사결정에 직접 활용하기 전 1차 공식 문서를 확인하시기 바랍니다.

📄 Raw Data
## MOps와 MOP 캐시 — ARM 프로세서 프론트엔드의 진화

### 1. 질문 파악

ARM CPU 아키텍처 문서를 따라가다 보면 **Cortex-A76~A77 세대를 기점으로 "MOps(Macro-Operations)"라는 용어와 "MOP Cache"라는 구조물이 공식 문서에 등장**한다. 이 질문은 사실상 네 갈래로 나뉜다.

- MOp(매크로 연산)란 정확히 무엇이며, I-Cache에 담긴 원시 명령어 및 실행 단계의 µOp(마이크로 연산)와 어떻게 구분되는가?
- MOP 캐시는 왜 만들어졌고, 기존 I-Cache와는 직렬·병렬 중 어떤 관계인가?
- x86 진영이 수년 앞서 도입한 유사 구조(Intel µop 캐시, AMD Op Cache)와 무엇이 같고 다른가?
- 2022년 이후 ARM이 MOP 캐시를 다시 제거한 이유는 무엇인가?

핵심 관전 포인트는 "RISC인 ARM이, 디코드가 단순하다는 RISC인데도 왜 디코드 결과를 따로 캐싱하는 구조를 넣었다가 다시 뺐는가"라는 모순처럼 보이는 흐름이다.

---

### 2. 기초 정보 — 프로세서 프론트엔드와 명령어 처리 계층

현대 고성능 CPU는 명령어를 "가져와서 곧장 실행"하지 않는다. 메모리에서 실행 유닛까지 오는 동안 여러 단계의 변환을 거치며, 이 변환 계층을 이해하는 것이 MOps 이해의 출발점이다.

#### 2.1 CISC와 RISC의 명령어 처리 방식 차이

**CISC(x86)**: Intel·AMD의 x86은 가변 길이(1~17바이트) 복잡 명령어 세트를 쓴다. `PUSH`, `MOVS`, `LOOP` 같은 명령어 하나가 내부적으로 다수의 단순 연산에 해당한다. 이를 그대로 실행하는 것은 비효율적이라, x86은 1995년 Pentium Pro(P6 마이크로아키텍처)부터 **명령어를 µop으로 분해해 내부적으로 RISC처럼 실행**하는 구조를 택했다.

**RISC(ARM)**: ARM의 AArch64(ARM64) 명령어는 고정 4바이트이고 대부분 단순하다. 이론상 CISC처럼 복잡한 분해가 불필요하다. 그런데도 ARM이 MOps라는 중간 계층을 둔 이유 — 여기서부터가 본론이다.

#### 2.2 세 계층: 명령어(Instruction) → MOp → µOp

ARM 공식 커뮤니티 포럼에서 ARM 엔지니어는 다음과 같이 정의한다.

> "MOps는 매크로 연산(Macro-Operation)이다. 아키텍처가 정의한 명령어로, 어셈블리로 작성하거나 컴파일러가 생성하는 바로 그 명령어다."
> "µOPs는 프로세서가 실행 도중 내부적으로 만드는 표현이며, 프로그래머에게는 직접 보이지 않는다."
> — ARM Community Forum, *Mops/uops - Cortex-A Forum*

**Cortex-A78 기준 파이프라인 계층:**

```
L1 I-Cache (원시 명령어 저장)
    ↓ Decode
   MOps  (중간 표현 — 명령어의 단순화·융합·분리 버전)
    ↓ (MOP 캐시에 저장)
    ↓ Rename / Dispatch
   µOps  (최소 실행 단위 — MOp 1개가 1~2개 µOp으로 분리)
    ↓
 실행 유닛 (ALU, Load/Store, FP/NEON…)
```

즉 ARM에서 **MOp는 I-Cache의 원시 명령어와 실행 단계의 µOp 사이에 놓인 중간 레벨**이다. Cortex-A78은 명령어 4개를 디코드하면 평균 6개의 MOp를 만든다(명령어 대비 약 6% 많음). 각 MOp는 이후 파이프라인에서 다시 1~2개의 µOp로 분리된다. 핵심은 **MOp ≈ 명령어(거의 1:1.06)** 수준의 상위 추상화이고, µOp가 진짜 최소 실행 단위라는 점이다.

---

### 3. 역사와 등장 배경 — 왜 MOP 캐시가 필요했는가

#### 3.1 x86 진영의 선행 실험: Trace Cache → µop Cache

ARM이 MOP 캐시를 도입하기 전, x86은 이미 두 번 실험했다.

- **Pentium 4 Trace Cache (2000년)**: NetBurst 마이크로아키텍처에서 디코드된 µop을 순서대로 저장한 구조. 선구적이었으나 분기 예측 실패 시 무효화 비용이 크고 복잡해 Core 마이크로아키텍처에서 폐기됐다.
- **Intel Sandy Bridge µop Cache (2011년)**: WikiChip Sandy Bridge 항목에 따르면 Intel은 **Decoded ICache(µop 캐시, 약 1.5K µop)** 를 도입해 복잡한 x86 디코드 스테이지를 핫 코드에서 우회하게 했다. 이후 Ivy Bridge·Haswell까지 계승됐다.
- **AMD Zen Op Cache (2017년)**: WikiChip AMD Zen 항목에 따르면 AMD는 Zen에서 처음 µop 캐시(Op Cache)를 넣으며 "성능 개선뿐 아니라 전력도 절감한다"고 문서화했다.

#### 3.2 ARM: Cortex-A76에서 씨앗, Cortex-A77에서 개화

- **Cortex-A76 (2018년)**: ARM은 "완전한 재설계(ground-up redesign)"를 선언하며 4-wide decode에서 명령어를 MOps로 디코드하기 시작했고, **매크로 연산 퓨전(MOp Fusion)** — 인접한 두 명령어를 하나의 MOp로 합치는 기법 — 을 도입했다. 단, 이 시점엔 **전용 MOP 캐시가 없었다.** MOps는 파이프라인을 흐를 뿐 저장되지 않았다.
- **Cortex-A77 (2019년)**: A77부터 **전용 MOP 캐시(1.5K 엔트리)** 가 공식 등장했다(WikiChip Cortex-A77). 디코드된 MOps를 저장해 동일 코드 경로 재실행 시 디코드 스테이지 전체를 건너뛸 수 있게 됐다.

---

### 4. MOP 캐시의 구조와 I-Cache와의 관계

#### 4.1 I-Cache와 MOP Cache의 차이

| 항목 | L1 I-Cache | MOP Cache |
|------|-----------|-----------|
| 저장 내용 | 원시 명령어 바이트 (ISA 그대로) | 디코드된 MOps (중간 표현) |
| 위치 | 파이프라인 상류 (Fetch 단계) | 디코드 단계 직후 |
| 히트 시 효과 | 메모리/상위 캐시 접근 회피 | 디코드 단계 우회 |
| 미스 시 동작 | 상위 캐시(L2, L3) 조회 | I-Cache → Decode로 폴백 |
| Cortex-A78 규모 | 64KB | 1.5K MOp 엔트리 |

여기서 중요한 개념 정리: **MOP 캐시는 I-Cache와 병렬 대안이 아니라, I-Cache 하위의 직렬 계층**이다. 두 경로는 다음과 같다.

```
[정상 경로 — MOP 캐시 미스]
L2 → L1 I-Cache → Predecode → Decode → MOps → MOP 캐시 채움 → Rename

[빠른 경로 — MOP 캐시 히트]
MOP 캐시 → Rename  (디코드 단계 완전 우회 + 약 1 사이클 단축)
```

AndroidAuthority의 Cortex-A78 분석에 따르면 MOP 캐시는 다양한 워크로드에서 **85% 이상의 히트율**을 보인다. 핫 루프·빈번 함수 같은 반복 코드에서 디코드 단계가 거의 활성화되지 않아 **전력 절감 효과**가 크다.

#### 4.2 Predecode — I-Cache와 MOP 캐시 사이의 가교

ARM은 I-Cache에 명령어를 저장할 때 순수 원시 바이트가 아니라 **일부 디코드 정보(predecode 메타데이터)를 덧붙인 중간 형식**으로 담는다. Cortex-A76~X1 세대는 약 36~40비트 형식(32비트 명령어 + 4~8비트 메타데이터)을 쓴다. 이 predecode 덕분에 I-Cache 히트 시 풀 디코드 비용이 줄고, MOP 캐시는 거기서 한 발 더 나아가 디코드 자체를 건너뛴다. 이 두 장치의 역할 중복이 후일 MOP 캐시 철수의 복선이 된다.

---

### 5. 현황 데이터 — ARM 세대별 MOP 캐시 변천

| 세대 | 코어 | 연도 | MOP 캐시 | 비고 |
|------|------|------|---------|------|
| — | Cortex-A75 이전 | ~2017 | 없음 | MOps 개념 미도입 |
| 1세대 | Cortex-A76 | 2018 | 없음 | MOp 퓨전 도입, 캐시 없음 |
| 2세대 | Cortex-A77 | 2019 | 1.5K 엔트리 | MOP 캐시 최초 도입 |
| 3세대 | Cortex-A78 | 2020 | 1.5K 엔트리 | 4명령어 / 6MOp / 사이클 |
| 3세대 | Cortex-X1 | 2020 | **3K 엔트리** | X1 전용 2배 확장 |
| 4세대 | Cortex-X2 | 2021 | 3K 엔트리 | 유지 |
| 5세대 | Cortex-X3 | 2022 | 1.5K 엔트리 | A77 수준으로 축소 |
| 5세대 | Cortex-A715 | 2022 | **제거** | I-Cache 내 퓨전으로 대체 |
| 6세대 | Cortex-X4 | 2023 | **제거** | A715와 동일 방향 |
| 7세대 | Cortex-X925 / A725 | 2024 | **제거** | Predecode 체계로 통합 |

서버용 Neoverse 라인에서는 V1(2021)이 **3K 엔트리 MOP 캐시**로 8 MOps/사이클을 달성했고, Neoverse N1(2019)도 MOP 캐시를 탑재했다(WikiChip Neoverse V1). 즉 **2019~2021년이 ARM MOP 캐시의 정점**, 2022년부터가 철수 국면이다.

---

### 6. 원인 분석 — x86 µop 캐시와 ARM MOP 캐시의 동기 차이

겉모습은 닮았지만 두 진영의 도입 동기는 다르다.

#### x86 µop 캐시의 동기 — "복잡한 디코드 자체를 피하려고"

x86 명령어는 가변 길이에 극도로 복잡하다. 디코더가 명령어 경계를 찾고(alignment), 피연산자 모드(32/64비트, 세그먼트 오버라이드 등)를 파악하고, 1~4개 µop으로 쪼개는 과정은 매 사이클 막대한 에너지·면적을 먹는다. Sandy Bridge µop 캐시는 이 무거운 디코더를 **핫 코드에서 통째로 건너뛰기** 위한 장치다.

#### ARM MOP 캐시의 동기 — "디코드는 가벼우나, 다른 이득이 있어서"

AArch64는 고정 4바이트라 경계 찾기 문제가 없고 디코드 자체가 x86보다 훨씬 단순하다. 그럼에도 ARM이 MOP 캐시를 넣은 이유는:

1. **전력 절감** — 모바일 환경에서 디코드 단계 비활성화로 전력 절약
2. **퓨전 결과 캐싱** — 퓨전된 MOp를 재사용해 퓨전 연산 반복 회피
3. **약 1 사이클 단축** — 리네임/디스패치 직전 단계를 줄여 분기 회복 속도 개선
4. **프론트엔드 처리량 증대** — 4명령어/사이클(I-Cache) → 6 MOp/사이클(MOP 캐시)

#### 명칭·구조 비교

| 개념 | ARM | Intel | AMD |
|------|-----|-------|-----|
| 디코드 전 명령어 저장 | L1 I-Cache | L1 I-Cache | L1 I-Cache |
| 디코드 후 연산 저장 | **MOP Cache** (MOps) | **Decoded ICache / µop Cache** (µops) | **Op Cache** (µops) |
| 저장 단위 | MOps (명령어 ≈ MOp, 1:1.06) | µops (복잡 명령어 → 1~4 µops) | µops |
| 도입 시기 | 2019 (A77) | 2011 (Sandy Bridge) | 2017 (Zen) |

핵심 차이: ARM의 "MOp"는 x86의 "µop"보다 **한 단계 높은 추상화**다. x86 µop는 최종 실행 단위지만, ARM MOp는 이후 다시 µOp로 분리되는 중간 단계다. 그래서 같은 "디코드된 명령어 캐시"라도 ARM 쪽이 저장 단위가 더 굵다.

---

### 7. 학계 반응과 보안 연구

MOP·µop 캐시는 성능 구조이면서 동시에 **보안 공격 표면**으로 학계의 주목을 받았다.

- **"I See Dead µops: Leaking Secrets via Intel/AMD Micro-Op Caches" (ISCA 2021)**: 이 논문은 Intel·AMD의 µop 캐시가 Spectre 류 사이드 채널에 취약함을 입증했다. µop 캐시의 타이밍 차이를 이용하면 프로세스 간 데이터 누출이 가능하다는 결과로, 디코드된 명령어 캐시가 공격 벡터가 될 수 있음을 환기했다. ARM MOP 캐시는 이 논문에서 직접 다뤄지지 않았으나, 구조가 유사하므로 동종 공격 가능성이 후속 연구 대상이 되고 있다.
- **"Design of Decoded Instruction Cache" (CANDAR 2023, 히로시마대)**: 디코드된 명령어 캐시의 설계 방법론을 다룬 연구로, 이 구조가 학술적으로도 정형화 단계에 들어섰음을 보여준다.

다만 ARM MOP 캐시를 정면으로 측정·공격한 1차 학술 논문은 µop 캐시 쪽에 비해 공개 자료가 적다. 이 부분은 추가 확인이 필요한 영역으로 남겨둔다.

---

### 8. 방향 전환 — 2022년 이후 MOP 캐시 철수

#### 왜 제거됐는가

Chips and Cheese의 Cortex-X925 분석에 따르면 ARM은 다음 이유로 X925(2024)·A725(2024)에서 MOP 캐시를 제거했다.

1. **Predecode가 이미 디코드 비용을 충분히 낮춤**: I-Cache에 76비트 형식(32비트 명령어 + 44비트 메타데이터)으로 predecode 정보를 저장하므로, 풀 디코드 없이 빠르게 MOp를 만든다. MOP 캐시와 predecode를 함께 운영하는 것은 "과잉"이 됐다.
2. **낮은 클럭에서는 이득이 미미**: 효율 코어(A725)처럼 낮은 클럭에선 타이밍 여유가 충분해 MOP 캐시의 1 사이클 절약 효과가 크지 않다.
3. **면적 재배치**: 1.5~3K 엔트리 MOP 캐시가 쓰던 실리콘을 더 큰 I-Cache나 실행 유닛에 투자하는 편이 낫다.

요약하면, ARM은 **predecode 체계를 키워 MOP 캐시의 역할을 흡수**한 셈이다. 처음 든 모순("RISC인데 왜 넣었다 뺐나")의 해답은 여기 있다 — MOP 캐시는 특정 시기(고클럭 모바일 코어 경쟁기)에 ROI가 높았다가, predecode가 성숙하면서 중복 투자가 된 **시대적 최적해**였다.

---

### 9. 비교 사례 — Apple Silicon의 다른 길

Apple M1/M2의 Firestorm(고성능) 코어는 **약 192KB의 거대한 L1 I-Cache**와 8-wide decode를 갖는다. 공개 자료 기준 별도의 "MOP 캐시" 명칭 구조는 보고되지 않았다. 대신 Apple은 거대한 I-Cache와 그보다 더 큰 ROB(재정렬 버퍼, 약 600+ 엔트리)로 프론트엔드 병목을 푼다. ARM 라이선스 IP가 아닌 독자 마이크로아키텍처를 쓰는 Apple의 선택은 "MOP 캐시 없이 충분히 큰 버퍼로도 해결 가능하다"는 대안적 접근의 유효성을 보여준다. ARM 본사가 2024년 MOP 캐시를 버린 방향과도 묘하게 수렴한다.

---

### 10. 결론 및 시사점

**핵심 정리**

1. ARM의 MOp는 "I-Cache의 원시 명령어"와 "실행 유닛의 µOp" 사이의 중간 표현이다. 명령어와 거의 1:1이지만, 복잡 명령어는 2개 MOp로 분리되고 단순 명령어 쌍은 1개 MOp로 융합된다.
2. MOP 캐시는 이 MOp들을 캐시해 동일 코드 재실행 시 디코드 단계를 우회한다. I-Cache와 병렬이 아니라 **직렬 계층의 하위 구조**다 — I-Cache 히트 후 디코드 결과가 MOP 캐시를 채운다.
3. x86 µop 캐시(Intel 2011, AMD 2017)가 복잡한 CISC 디코드 비용 회피에 초점을 둔 반면, ARM MOP 캐시는 전력 절감·퓨전 재사용·프론트엔드 처리량 증대에 초점을 뒀다. 닮은 구조, 다른 목적이다.
4. ARM은 2019~2021년 정점을 찍고 2022년(A715, X4)부터 MOP 캐시를 거둬들였다. predecode 체계가 성숙하며 역할이 중복됐기 때문이다.

**향후 방향**

- ARM 프론트엔드 최적화는 MOP 캐시 대신 **더 정교한 Predecode + 분기 예측 개선** 방향으로 진화 중이다.
- x86 µop 캐시는 CISC 복잡성이 사라지지 않는 한 필수 구조로 남을 것이다(다만 AMD Zen 5(2024)는 프론트엔드를 개편하며 Op 캐시 역할을 재정의 중).
- 보안 측면에서는 타이밍 사이드 채널 연구가 이어지며, 캐시 구조의 투명성이 학계의 요구사항으로 자리 잡고 있다.
- RISC-V 진영도 고성능 구현에서 디코드된 명령어 캐시를 탐색 중이라, "디코드 결과 캐싱"은 ISA를 가리지 않는 공통 설계 화두로 남는다.

**한 줄 요약**: MOps는 ARM이 명령어와 µOp 사이에 둔 중간 표현이고, MOP 캐시는 그 결과를 저장해 디코드를 건너뛰는 장치였으나 — predecode가 같은 일을 더 싸게 해내면서 2024년 세대에서 사실상 은퇴한 "한 시대의 최적해"다.
---

## References

- [ARM Community Forum - MOps/uops 정의](https://community.arm.com/developer/ip-products/processors/f/cortex-a-forum/48877/mops-macro-ops-uops-micro-ops)
- [Chips and Cheese - Cortex X925 MOP 캐시 제거 분석](https://chipsandcheese.com/p/arms-cortex-x925-reaching-desktop)
- [WikiChip - ARM Cortex-A77 마이크로아키텍처](https://en.wikichip.org/wiki/arm_holdings/microarchitectures/cortex-a77)
- [WikiChip - ARM Cortex-A78 마이크로아키텍처](https://en.wikichip.org/wiki/arm_holdings/microarchitectures/cortex-a78)
- [WikiChip - AMD Zen µop Cache](https://en.wikichip.org/wiki/amd/microarchitectures/zen)
- [I See Dead µops - ISCA 2021 논문](https://mktrm.github.io/files/uop_isca21.pdf)
- [System on Chips - ARM Cortex-A78 MOPs UOPs 파이프라인](https://www.systemonchips.com/arm-cortex-a78-mops-uops-and-instruction-fetch-pipeline/)
- [WikiChip - ARM Neoverse V1](https://en.wikichip.org/wiki/arm_holdings/microarchitectures/neoverse_v1)
- [WikiChip - Intel Sandy Bridge µop Cache](https://en.wikichip.org/wiki/intel/microarchitectures/sandy_bridge_(client))
- [Wikipedia - Intel Pentium 4 Trace Cache](https://en.wikipedia.org/wiki/Pentium_4)

댓글

이 블로그의 인기 게시물

Vim 9.2 릴리즈 총정리: 더 빠르고 강력해진 텍스트 편집의 제왕

폐쇄망 SoC 설계자를 위한 가볍고 빠른 Vim 최적화 가이드

에이전트 시대를 위한 터미널 cmux 가이드: 설치부터 AI 활용까지