210. 실행 사이클 (Execute Cycle)

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

  1. 본질: 실행 사이클 (Execute Cycle)은 명령어 사이클의 핵심 단계로, 해독된 명령어와 준비된 피연산자를 바탕으로 ALU 연산을 수행하거나, 메모리에 접근하거나, 조건에 따라 분기(PC 갱신)를 수행하는 단계다.
  2. 가치: 인출과 해독이 그저 '준비 과정'이었다면, 실행 사이클은 소프트웨어가 의도한 '실제 상태 변화(상태 플래그 갱신, 레지스터 값 변경)'를 물리적 세계에 기록하는 진정한 일꾼의 역할이다.
  3. 융합: 파이프라인 구조에서는 이 단계가 EX(실행)와 MEM(메모리 접근)으로 나뉘며, 비순차적 실행(OoO) 아키텍처에서는 명령어의 원래 순서와 무관하게 데이터가 준비된 순서대로 동시다발적으로 연산이 일어나는 핵심 병렬 구간이 된다.

Ⅰ. 개요 및 필요성 (Context & Necessity)

  • 개념: 실행 사이클 (Execute Cycle)은 CPU가 인출하고 해독한 명령어의 종류에 따라, 지정된 산술 연산을 ALU를 통해 처리하거나 지정된 데이터의 이동을 실제로 수행하여 프로그램의 논리적 의도를 물리적으로 완성하는 단계다.

  • 필요성: 실행 사이클은 컴퓨터가 단순한 데이터 저장소를 넘어 '연산하는 지능'으로서의 본질적 임무를 수행하기 위해 반드시 필요하다. 앞선 인출과 해독 단계가 오직 실행을 위한 '준비' 과정이라면, 실행 사이클은 소프트웨어의 추상적인 명령이 하드웨어의 전압 변화와 수치적 가치 창출로 승화되는 실질적인 작업 완료 지점이기 때문이다. 또한, 실행 결과에 따라 시스템의 상태 플래그를 갱신함으로써 다음 명령어의 실행 경로를 결정짓는 지능형 판단의 근거를 마련하며, 현대 프로세서에서는 비순차 실행(OoO) 기술과 결합하여 데이터 의존성을 정면 돌파하는 하드웨어 성능 극대화의 핵심 구간이 된다.

  • 💡 비유: 요리사가 냉장고에서 재료를 꺼내고 조리법을 모두 테이블에 올려놓은 뒤, 실제로 "도마에서 칼질을 하고 불에 볶아 음식을 완성(상태 변화)"하는 핵심 조리 단계와 같다. 준비 과정이 아무리 완벽해도 불을 켜고 요리를 하지 않으면 음식(결과값)은 나오지 않는다.

  • 등장 배경: 명령어 사이클은 하나의 거대한 상태 머신이다. 명령어를 가져와서(Fetch) 해석(Decode)했으면, 그 명령어의 진짜 의미를 하드웨어에 물리적으로 반영할 시간이 필요하다. 덧셈이라면 더해야 하고, 점프라면 다음 목적지로 뛰어야 한다. 이 각각의 명령어 형태에 맞춰 ALU와 멀티플렉서의 스위치가 켜지고 데이터패스가 본격적으로 가동되는 구간이 바로 실행 사이클이다.


Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)

구성 요소

요소명역할내부 동작
ALU (산술논리장치)데이터 연산 수행입력된 두 데이터(레지스터 또는 즉치값)를 더하거나 빼거나 논리곱/합 수행
상태 레지스터 (Status Flags)연산 결과의 특징 보관ALU 연산 결과가 0인지(Zero), 음수인지(Sign), 자리올림이 발생했는지(Carry) 기록
멀티플렉서 (MUX)실행 경로의 최종 결정레지스터 값을 쓸지, 상수 값을 쓸지 등 ALU의 입력을 동적으로 선택
분기 제어 로직 (Branch Control)PC 갱신 여부 판단상태 플래그와 분기 조건을 비교하여 PC를 타겟 주소로 덮어쓸지 결정

명령어 종류별 실행 사이클의 마이크로 오퍼레이션 (단일 사이클 기준)

실행 사이클은 이전 단계와 달리 '어떤 명령어(Opcode)냐'에 따라 가동되는 하드웨어의 경로가 완전히 달라진다.

  ┌────────────────────────────────────────────────────────────────────────┐
  │                 명령어 종류에 따른 실행 사이클의 분기                  │
  ├────────────────────────────────────────────────────────────────────────┤
  │                                                                        │
  │ [해독 사이클 완료] ──▶ 명령어 종류(Opcode) 식별                        │
  │                         │                                              │
  │       ┌─────────────────┼─────────────────┐                            │
  │       ▼                 ▼                 ▼                            │
  │ [ 데이터 처리 명령어 ]  [ 메모리 접근 명령어 ] [ 제어 흐름 명령어 ]    │
  │ (예: ADD, SUB)     (예: LOAD, STORE)  (예: JUMP, BEQ)                  │
  │       │                 │                 │                            │
  │       ▼                 ▼                 ▼                            │
  │ ALU <- Reg A + Reg B  주소 계산(ALU)     조건 플래그 확인              │
  │ 결과 -> Reg C         Mem Read/Write   (조건 만족 시)                  │
  │                                        PC <- Target Addr               │
  └────────────────────────────────────────────────────────────────────────┘

[다이어그램 해설] 실행 사이클은 크게 세 가지 흐름으로 나뉜다. 1) ADD 같은 산술 명령어는 ALU를 가동해 계산하고 그 결과를 즉시 레지스터에 기록한다. 2) LOAD/STORE는 ALU를 덧셈기로 활용해 '접근할 메모리 주소'를 계산하고, 실제로 데이터 버스를 통해 메모리 영역을 읽거나 쓴다. 3) BEQ(Branch if Equal) 같은 조건 분기는 직전 연산의 결과 플래그(Zero Flag)를 확인하여 조건이 참이면 PC(Program Counter)에 다음 목적지 주소를 덮어씌워 실행 흐름을 완전히 꺾어버린다.

  • 📢 섹션 요약 비유: 주문서(해독 결과)에 따라 고기를 굽는 요리사(ALU 연산), 창고에서 와인을 꺼내오는 매니저(메모리 접근), 비가 오면 야외 테이블을 접으라고 지시하는 지배인(분기 제어)이 각자의 역할을 실제로 수행하는 현장과 같습니다.

Ⅲ. 융합 비교 및 다각도 분석

단일 사이클 vs 파이프라인 아키텍처의 실행 단계 분리

단일 사이클 아키텍처의 '실행 사이클'은 메모리 접근까지 모두 포함하는 큰 개념이지만, 파이프라인 설계(RISC)에서는 임계 경로(Critical Path)를 줄이기 위해 이를 EX(실행)와 MEM(메모리 접근) 두 단계로 쪼갠다.

비교 항목기본 실행 사이클 (단일 사이클)파이프라인의 EX (Execute) 단계파이프라인의 MEM (Memory) 단계
역할연산과 메모리 접근을 한 박자에 완료오직 ALU 산술 연산과 메모리 주소 계산만 수행오직 메모리 영역 Read/Write만 수행
시간 할당매우 길다 (메모리 접근 지연 포함)짧다 (단순 ALU 연산 지연만 고려)캐시 적중 여부에 따라 가변적이다
ALU 사용연산 또는 주소 계산용으로 1회 사용거의 모든 명령어에서 필수적으로 사용됨전혀 사용 안 함 (주소는 EX에서 계산해 넘김)

비순차적 실행 (Out-of-Order Execution)에서의 실행 사이클 혁명

현대 고성능 프로세서는 코드를 프로그래머가 작성한 순서대로 얌전히 실행(Execute)하지 않는다.

  ┌───────────────────────────────────────────────────────────────────────────┐
  │         순차적(In-Order) vs 비순차적(OoO) 실행 사이클의 차이              │
  ├───────────────────────────────────────────────────────────────────────────┤
  │                                                                           │
  │ [순차적 실행 (In-Order)] - 앞이 막히면 뒤도 멈춤                          │
  │ 1. LOAD $t1, 0($t0)  (← 캐시 미스로 수백 클럭 대기 발생!)                 │
  │ 2. ADD  $t2, $t1, $t3 (← $t1 데이터를 기다리며 파이프라인 정지)           │
  │ 3. SUB  $t5, $t6, $t7 (← 앞과 무관하지만 순서 때문에 억울하게 대기)       │
  │                                                                           │
  │ [비순차적 실행 (Out-of-Order)] - 준비된 놈부터 먼저 병렬 실행             │
  │ (디코드 후 명령어들을 '예약역(Reservation Station)'이라는 대합실에 뿌림)  │
  │                                                                           │
  │ ALU 1 [대기 중] <─ 2. ADD $t2, $t1, $t3 ($t1 메모리 도착을 대기)          │
  │ ALU 2 [실행 중!] ─> 3. SUB $t5, $t6, $t7 (데이터가 있으므로 먼저 EX!)     │
  │                                                                           │
  │ * 효과: 메모리 병목을 무시하고, 실행(Execute) 유닛의 활용도를 100%로 유지.│
  └───────────────────────────────────────────────────────────────────────────┘

[다이어그램 해설] 기본 구조에서 실행 사이클은 반드시 이전 명령어의 실행이 끝나야 다음 명령어의 실행이 가능하다. 하지만 앞 명령어가 메모리에서 데이터를 가져오느라 수백 클럭을 지연하면, 뒤에 있는 무관한 산술 명령어들도 덩달아 멈춘다(Stall). 이를 타파하기 위해 현대의 아키텍처는 해독(Decode)된 명령어를 '예약역(Reservation Station)'이라는 대기실에 쏟아 넣는다. 그리고 서로 의존성이 없는 명령어(예: 3번 SUB 명령어)는 1번 명령어의 결과가 나오기 전이라도 여분의 ALU를 통해 '먼저' 실행(Execute) 사이클을 돌려버린다. 이 기술이 현대 CPU 단일 스레드 성능 발전의 가장 거대한 원동력이다.

  • 📢 섹션 요약 비유: 햄버거 패티가 익기를(데이터 로드) 기다리는 동안 주방장이 멍하니 서 있는 것(순차적 실행)이 아니라, 그 틈에 먼저 감자튀김을 튀기고 콜라를 담아버리는(비순차적 실행) 극강의 주방 운영과 같습니다.

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

실무 시나리오

  1. 분기 예측 실패로 인한 실행 단계의 롤백 (Branch Misprediction) 파이프라인 환경에서는 조건 분기 명령어의 실행(Execute) 사이클이 완료되어 실제 분기 여부가 확정되기 전에, 이미 뒤따르는 수십 개의 명령어들이 인출/해독되어 실행 중이다. 만약 분기 예측기(Branch Predictor)가 틀렸다면, 뒤따르던 명령어들이 잘못된 경로를 따라 헛고생을 한 것이므로 즉각 모두 폐기(Flush)해야 한다. 실행 사이클의 결과를 PC에 덮어쓰는 순간 파이프라인 전체를 비우는 이 막대한 비용을 '분기 패널티'라고 부르며, 아키텍트는 이를 줄이기 위해 분기 조건을 EX 단계가 아니라 앞쪽의 ID(해독) 단계에서 조기 판별하도록 하드웨어를 튜닝하기도 한다.

도입 체크리스트

  • 기술적: 실행(EX) 사이클을 담당하는 연산 유닛 (정수 ALU, 부동소수점 FPU 등)의 갯수와 스케줄링 대역폭이 충분하여 구조적 해저드(Structural Hazard)가 발생하지 않는가?
  • 운영적: 데이터패스 상에서 곱셈, 나눗셈 등 실행 사이클이 다중 클럭을 소모하는 무거운 명령어들이 파이프라인 후반부의 상태 반영(Commit) 순서를 심각하게 꼬이게 만들지 않는가?

안티패턴

  • Execute 단에서의 복잡한 예외 처리 강제 집중 나눗셈의 '0으로 나누기 (Divide by Zero)'나 메모리의 '페이지 폴트 (Page Fault)' 등은 실행 사이클이나 메모리 사이클에서 즉각적으로 발견된다. 이때 실행 단에서 즉시 파이프라인을 멈추고 예외를 처리하려 하면, 비순차적으로 먼저 실행되던 다른 명령어들과 상태가 엉켜버린다. 모든 예외의 발견은 실행 단에서 하되, 실제 예외 처리로의 진입 결정은 가장 마지막 단계(Retire/Commit)에서 원래 프로그램 순서대로 정렬된 후에 이루어지도록 (Precise Exception) 설계해야 한다.

  • 📢 섹션 요약 비유: 요리사가 요리(실행)를 하다가 상한 재료를 발견(예외)했더라도, 당장 식당 문을 닫고 난리를 치는 게 아니라, 손님 테이블에 나가기 직전 마지막 검수 단계(Retire)에서 지배인이 최종 확인 후 정중히 취소하는 체계를 갖춰야 혼선이 없습니다.


Ⅴ. 기대효과 및 결론

정량/정성 기대효과

구분초기 스칼라(Scalar) 실행 구조현대 슈퍼스칼라 + 비순차(OoO) 실행개선 효과
정량 (처리량)1클럭당 1개 명령어 순차 실행1클럭당 4~10개 명령어 동시 실행IPC(Instruction Per Cycle) 대폭 향상
정량 (가동률)메모리 지연 발생 시 ALU 가동률 20%예약역(RS) 운영으로 가동률 90%+ 유지하드웨어 자원 낭비 원천 차단
정성 (성능)명령어 배치(컴파일러)에 매우 의존적CPU 하드웨어가 런타임에 스스로 최적화컴파일러 한계 극복, 동적 워크로드 완벽 대응

미래 전망

  • AMX / Tensor 코어와 같은 거대 병렬 실행 사이클의 부상: AI 추론과 훈련 연산의 폭발적 증가로, 단순히 1~2개의 덧셈을 수행하는 전통적 범용 ALU 실행 사이클은 도태되고 있다. 한 번의 실행(Execute) 사이클 명령으로 256개, 1024개의 행렬 데이터를 동시에 곱하고 더하는 텐서(Tensor) 처리 유닛이나 AMX(Advanced Matrix Extensions)가 CPU 내부에 기본 실행 데이터패스로 이식되는 추세다.

  • 📢 섹션 요약 비유: 칼로 당근을 하나씩 썰던 단일 주방장(스칼라 실행)의 시대가 지나고, 버튼 한 번(명령어 하나)에 당근 100개를 동시에 채 써는 거대한 다중 칼날 기계(AI 가속 실행 유닛)가 주방의 표준 장비로 들어서는 것입니다.


📌 관련 개념 맵

개념 명칭관계 및 시너지 설명
ALU (Arithmetic Logic Unit)실행 사이클에서 산술 및 논리 연산을 물리적으로 담당하는 핵심 부품이다.
데이터 해저드 (Data Hazard)실행 사이클이 완료되어 레지스터에 기록되기 전에 다음 명령어가 그 연산 결과를 즉시 필요로 할 때 발생한다.
비순차적 실행 (Out-of-Order Execution)명령어의 원래 순서에 얽매이지 않고, 데이터가 준비된 순서대로 실행 사이클을 가동하는 하드웨어 최적화 기법이다.
분기 예측 (Branch Prediction)조건 분기 명령어의 실행 사이클이 끝나기 전에(결과를 알기 전에) 목적지를 미리 찍어 파이프라인의 멈춤을 방지한다.
데이터 포워딩 (Data Forwarding)실행 사이클이 방금 끝난 임시 연산 결과를, 다음 명령어의 실행 사이클 ALU 입력으로 직통 연결해주는 우회 기술이다.

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

  1. 요리사(CPU)가 재료를 꺼내고 레시피를 다 읽었다면, 이제 진짜로 도마 위에서 칼질을 하고 프라이팬에 달달 볶아야 요리가 완성되겠죠?
  2. 명령어 사이클 중에서 이렇게 덧셈뺄셈 계산을 진짜로 하고, 결과를 목적지에 저장하는 행동 대장 단계를 '실행(Execute) 사이클'이라고 불러요.
  3. 최근의 똑똑한 요리사들은 앞의 찌개가 끓기를 기다리는 동안, 멍하니 서있지 않고 뒤에 있는 요리의 칼질을 먼저 해버리는 마법 같은 기술로 일의 속도를 엄청나게 높인답니다!