---
title: "슈퍼스칼라: 한 사이클에 명령 하나라는 한계를 넘는 방법"
author: "Lee"
published_at: "2026-10-20T21:55:02.580Z"
updated_at: "2026-09-30T09:48:51.634Z"
tags: ["컴퓨터공학","컴퓨터구조"]
canonical_url: "https://ariser.io/@writer_a1cd615ab19e/%EC%8A%88%ED%8D%BC%EC%8A%A4%EC%B9%BC%EB%9D%BC-%ED%95%9C-%EC%82%AC%EC%9D%B4%ED%81%B4%EC%97%90-%EB%AA%85%EB%A0%B9-%ED%95%98%EB%82%98%EB%9D%BC%EB%8A%94-%ED%95%9C%EA%B3%84%EB%A5%BC-%EB%84%98%EB%8A%94-%EB%B0%A9%EB%B2%95"
ai_assisted: false
---

# 슈퍼스칼라: 한 사이클에 명령 하나라는 한계를 넘는 방법

[원문](https://ariser.io/@writer_a1cd615ab19e/%EC%8A%88%ED%8D%BC%EC%8A%A4%EC%B9%BC%EB%9D%BC-%ED%95%9C-%EC%82%AC%EC%9D%B4%ED%81%B4%EC%97%90-%EB%AA%85%EB%A0%B9-%ED%95%98%EB%82%98%EB%9D%BC%EB%8A%94-%ED%95%9C%EA%B3%84%EB%A5%BC-%EB%84%98%EB%8A%94-%EB%B0%A9%EB%B2%95)

파이프라인은 서로 다른 명령의 단계를 겹쳐 처리량을 높인다. 슈퍼스칼라는 여기에 여러 명령을 한 사이클에 발행하고 처리할 수 있는 폭을 더한다. 한 코어 안에 여러 실행 장치와 이를 공급하는 제어 구조를 두어 명령 수준의 병렬성을 활용한다. 코어가 여러 개라는 멀티코어 개념과는 구분해야 한다.

![코어 하나의 두 덧셈 장치가 독립 명령을 함께 처리하고 의존 명령은 앞 결과를 기다리는 그림](/api/v1/media/7e7a04bd-0dc7-47f6-9063-bab9da5b2641)

*처리 폭을 넓혀도 값 의존성과 자원 제약이 실제 병렬 실행을 제한한다.*

## 독립적인 명령은 함께 갈 수 있다

`a = b + c`와 `x = y + z`가 서로 다른 값을 사용하고 두 덧셈 장치가 준비돼 있다면 같은 사이클에 실행을 시작할 수 있다. 반대로 `a = b + c` 뒤에 `x = a + z`가 오면 x는 a의 결과를 기다린다. 실행 장치를 늘려도 진짜 값 의존 사슬을 없앨 수는 없다. 독립적인 작업이 얼마나 있는지가 유효한 폭을 결정한다.

발행 폭이 4라고 해서 모든 프로그램이 매 사이클 명령 네 개를 완료하는 것은 아니다. 명령 인출과 해독, 사용할 실행 포트, 데이터 준비, 메모리 접근, 분기 예측, 결과 확정이 모두 충분해야 한다. 어떤 구조에서는 기계 명령을 내부의 여러 마이크로 연산으로 나누므로, 명령 수와 내부 작업 수의 측정 단위도 구분해야 한다.

## 폭을 넓히면 앞뒤도 넓어야 한다

여러 명령을 동시에 공급하려면 코드 인출과 해독 장치가 따라가야 한다. 여러 결과를 기록하고 의존성을 추적하는 구조도 필요하다. 단순히 덧셈기를 네 개 넣는 것만으로 넓은 코어가 완성되지 않는다. [CMU의 슈퍼스칼라 처리 수업](https://www.cs.cmu.edu/afs/cs/academic/class/15740-s17/www/lectures/12-ooo.pdf)은 발행 폭과 동적 실행 구조, 의존성 관리의 관계를 다룬다.

순서대로 발행하는 슈퍼스칼라도 있고 준비된 명령을 동적으로 고르는 비순차 구조와 결합한 슈퍼스칼라도 있다. 두 용어는 자주 함께 나타나지만 같은 뜻은 아니다. 슈퍼스칼라는 한 사이클에 여러 명령을 처리하는 폭에 초점을 두고, 비순차 실행은 어떤 준비된 명령을 먼저 실행할지에 초점을 둔다.

## 반복문 안의 의존 사슬

배열 합계를 하나의 누적 변수에 더하면 각 덧셈이 이전 덧셈의 결과를 기다린다. 여러 독립 누적 변수로 나눠 계산하고 마지막에 합치면 동시에 진행할 수 있는 사슬이 늘어날 수 있다. 그러나 부동소수점은 더하는 순서에 따라 결과가 달라질 수 있고, 정수도 언어의 오버플로 규칙을 따라야 한다. 최적화는 의미와 허용 오차를 먼저 확인해야 한다.

큰 폭은 회로 면적과 전력, 의존성 검사 복잡성을 늘린다. 메모리 대역폭이 이미 한계라면 실행 장치를 더 늘려도 도움이 적다. 코드가 계속 분기하거나 캐시에서 데이터를 못 찾으면 장치가 비어 있을 수도 있다. IPC가 낮다는 관찰을 장치 수 부족으로만 해석하지 말고 어떤 단계가 일을 공급하지 못하는지 분석해야 한다.

슈퍼스칼라를 이해하면 클럭 주파수만으로 CPU를 비교하기 어려운 이유가 보인다. 같은 주파수에서도 한 사이클에 처리하는 유효 작업이 다를 수 있다. 다만 최대 폭은 조건이 맞을 때의 능력이고 실제 성능은 코드의 의존, 메모리 상태, 실행 자원 배치에 달린다. 여러 명령을 함께 처리할 기회와 그 기회를 사용할 조건을 함께 보는 개념이다.

### 참고 자료

- [CMU CS 740 — Superscalar Processing](https://www.cs.cmu.edu/afs/cs/academic/class/15740-s17/www/lectures/12-ooo.pdf)
