자막
음성

Lec 7 · Tomasulo algorithm: reservation station, CDB, register renaming

정밀 정리 · 검증 2026-09-24 00:47

1개요

1.1Lec6 뒷부분: OoO execution 만으로는 WAR 에 막힌다는 동기에서 Tomasulo algorithm 으로.
1.2reservation station·register renaming·Common Data Bus 구조와 dispatch/issue/write result 3단계.
1.36개 명령어 예제를 cycle 1~57 로 따라가며 WAR 회피와 in-order dispatch·OoO completion 확인.
1.4한계: imprecise exception, CDB 병목, 복잡성. dynamic loop unrolling 과 OoO 역사(1960년대→1990년대 재도입).

2섹션별 정리 상황·문제 → 원인 → 해결

2.10:00–5:46동기: OoO execution 만으로는 WAR 에 막힌다
상황·문제2번 FLD 가 cache miss 로 길 때, OoO execution 으로 4번을 먼저 실행해도 5번 FDIV 가 멈춰 전체 성능은 in-order 와 같음.
원인5번이 3번 FMULT 의 source f4 를 덮어쓰는 WAR(write-after-read) false dependence. 강사가 처음엔 FU 공유 탓이라 했다가 정정.
해결5번 목적지를 다른 register(f4')로 renaming 하면 3·5번 동시 실행. Tomasulo 는 RAW 만 지키고 false dependence 를 HW 로 제거.
  • OoO execution alone did not allow any significant improvement (p5)
  • renaming = 추가 storage, HW 로 가능 (p6)
p.5
2.1.1 · p.5 · 0:22 · 예제와 in-order/OoO 실행 순서
p.6
2.1.2 · p.6 · 4:32 · f4' renaming 후 순서
2.1.r.1Data dependency — Wikipedia ↗ · RAW(true)·WAR(anti)·WAW(output) 정의, name dependence 는 renaming 으로 제거
2.1.r.2Register renaming — Wikipedia ↗ · WAR/WAW false dependence 제거, architectural vs physical register
2.25:46–13:55Tomasulo 개요: RS, renaming, CDB
상황·문제360/91 배경(p7)은 이미 다뤄 넘김. Tomasulo 는 FU 옆에 분산된 buffer 와 control 로 동작.
원인명령어가 RS 에 들어갈 때 register 를 값이나 RS pointer 로 바꿔(renaming) register file 에 의존하지 않음. RS 는 compiler 에 보이지 않는 추가 register.
해결결과는 CDB 로 broadcast 해 기다리는 RS 가 직접 복사. load/store buffer 도 RS 역할. FP op 은 앞선 branch 가 확정될 때까지 실행 시작 안 함(speculation 은 다음 강의).
  • renaming 으로 WAR·WAW 회피, RAW 는 operand 준비 시 실행으로 해결
  • FP op 은 queue 에만 쌓고 branch 확정 전 실행 금지: 틀린 branch 뒤 결과가 architectural register 를 망치기 때문
  • 강사가 RS 에 들어갈 수 있다고 했다가 FP op queue 까지만이라고 정정(817초)
p.8
2.2.1 · p.8 · 6:02
2.2.r.1Tomasulo's algorithm — Wikipedia ↗ · reservation station·CDB·register renaming·3단계와 precise exception 문제 정리
2.2.r.2IBM System/360 Model 91 — Wikipedia ↗ · Tomasulo 최초 구현(FP unit), 일부 exception 이 imprecise
2.313:55–16:49Tomasulo organization 그림
상황·문제Tomasulo 에 필요한 구성 요소와 데이터 흐름.
원인FP op queue 에서 명령어가 adder/multiplier RS 또는 load/store buffer 로 감.
해결FU 결과는 CDB 로 adder·multiplier RS, store buffer, register file 에 동시에 전달되어 여러 entry 를 한 번에 갱신.
  • Load1~6, Add1~3, Mult1~2 RS
  • 단계: Dispatch → Issue/Execute → Write result (p10)
p.9
2.3.1 · p.9 · 13:57
p.10
2.3.2 · p.10 · 15:53 · 단계 표시
2.3.r.1Tomasulo's algorithm — Wikipedia ↗ · reservation station·CDB·register renaming·3단계와 precise exception 문제 정리
2.416:49–20:17세 단계와 Common Data Bus
상황·문제명령어 하나가 거치는 단계와 결과 전달 방식.
원인Dispatch 는 빈 RS 가 있어야 가능(없으면 stall), 이때 준비된 operand 를 복사하는 것이 renaming.
해결operand 가 다 준비되면 issue·execute, 아니면 CDB 감시. CDB 는 data + source tag(원 구현 64-bit + 4-bit RS 번호)를 broadcast 하고 tag 일치 entry 가 가져감.
  • 일반 bus 는 destination 을 주지만 CDB 는 source 를 줌 ("come from" bus)
p.11
2.4.1 · p.11 · 16:56
2.4.r.1R. M. Tomasulo, An Efficient Algorithm for Exploiting Multiple Arithmetic Units (IBM JRD 1967) — PDF ↗ · 원 논문. common data bus 와 register tagging 을 직접 설명
2.4.r.2Tomasulo's algorithm — Wikipedia ↗ · reservation station·CDB·register renaming·3단계와 precise exception 문제 정리
2.520:17–23:26Reservation station field 와 register result status
상황·문제RS entry 와 register 상태를 추적할 field 정의.
원인operand 가 dispatch 시점에 없으면 값 대신 만들 RS 의 tag 를 보관해야 함.
해결Op, Vj/Vk(값), Qj/Qk(tag, 0 이면 준비), Busy. store buffer 는 V·Qi 하나씩. register result status 는 register 별로 쓸 RS 를 기록.
p.12
2.5.1 · p.12 · 20:17
2.5.r.1Reservation station — Wikipedia ↗ · RS 가 CDB 를 listen 해 operand 를 받는 동작
2.623:26–30:55예제 설정과 cycle 1~3
상황·문제6개 명령어 예제, latency ADD/SUB 3·LD 3·MUL 10·DIV 40 (FU 안의 cycle 만).
원인Cycle 1·2 에 FLD 두 개가 Load1·Load2 로 들어가며 F6=Load1, F2=Load2 로 기록.
해결Cycle 3 FMUL.D 는 F2 대신 Qj=Load2, F4 는 값 R(F4) 복사, F0=Mult1. Load1 완료.
  • 강사가 load 를 two cycles 라고 잠깐 말했으나 슬라이드·예제는 3 cycle
  • load 여러 개 outstanding 가능
p.13
2.6.1 · p.13 · 23:26 · 초기 상태, 판서로 field 설명
p.14
2.6.2 · p.14 · 26:27 · cycle 1
p.16
2.6.3 · p.16 · 28:38 · cycle 3
2.730:55–37:26Cycle 4~5: CDB write 와 dispatch/issue 용어
상황·문제Load 결과가 CDB 로 나오며 대기 entry 가 채워짐.
원인Cycle 4 Load1 → F6, FSUB 는 Vj=M(A1)·Qk=Load2. Cycle 5 Load2 → Add1 Vk, Mult1 Vj, F2 가 채워지고 Q 가 지워짐.
해결FDIV 는 Mult2 로(Qj=Mult1, Vk=M(A1)). 이 강의의 dispatch(→RS)를 교재는 issue 라 부르고, 여기서 issue 는 RS→FU.
  • tag 일치 시 CDB 값을 V 로 복사하고 Q 를 지움
p.17
2.7.1 · p.17 · 30:55 · cycle 4
p.18
2.7.2 · p.18 · 33:39 · cycle 5
2.837:26–44:01Cycle 6: WAR 가 있어도 FADD 를 dispatch 할 수 있는 이유
상황·문제FADD.D F6 은 앞선 FSUB 가 읽는 F6 에 씀(WAR). Add1·Mult1 실행 시작.
원인FSUB 가 dispatch 될 때 F6 값을 RS 로 이미 복사했고 dispatch 는 in-order 이므로 이후 F6 을 덮어써도 안전.
해결renaming 으로 WAR 제거. WAW 도 같은 방식으로 피함(과제). 강사 설명 중 cycle 5 로 돌아가 확인.
  • 자막상 2609초 'right-to-right' 는 문맥상 WAR, 2623초는 WAW
p.19
2.8.1 · p.19 · 38:13 · cycle 6, WAR 질문
2.8.r.1Register renaming — Wikipedia ↗ · WAR/WAW false dependence 제거, architectural vs physical register
2.944:01–48:53Cycle 7~57: 완료와 write-back
상황·문제남은 명령어가 latency 에 따라 끝나는 과정.
원인Cycle 8 FSUB 완료→9 에 F8·Add2 갱신, FADD 11 완료→12 에 F6. FMUL 15 완료→16 에 F0·Mult2 갱신.
해결FDIV 가 16 부터 실행, 56 완료, 57 에 F10 write 로 종료.
  • cycle 17 슬라이드 Clock 칸은 16 으로 오기
p.21
2.9.1 · p.21 · 44:29 · cycle 8
p.25
2.9.2 · p.25 · 46:13 · cycle 12
p.34
2.9.3 · p.34 · 48:05 · cycle 57
2.1048:53–58:23in-order dispatch·OoO completion 과 imprecise exception, 비용
상황·문제dispatch 는 in-order, execution completion 과 write result 는 out-of-order.
원인branch 는 확정 전 FP 실행을 막아 문제가 없지만, FDIV divide-by-zero exception 시 이미 뒤의 FADD 가 F6 을 덮어 복구 불가 → precise exception 불가, OS·program debugging 어려움.
해결다음 강의에서 program order 로 architectural state 를 갱신해 해결. RS field 는 in-order pipeline 에 없던 physical register 라 비용이 늘고 ILP 가 적으면 놀게 됨.
  • 학생 질문(RS 로 값 복사 overhead)에 비용 증가를 인정, 많은 application 에서 성능 이득
p.34
2.10.1 · p.34 · 48:53 · in-order issue / OoO execution & completion 표시
p.29
2.10.2 · p.29 · 57:05 · 질문 답변 중 cycle 16 으로 돌아감
2.10.r.1Out-of-order execution — Wikipedia ↗ · CDC 6600→360/91→1990년대 재도입 역사, precise exception·memory latency 동기
2.1158:23–1:06:12Dynamic loop unrolling
상황·문제compiler loop unrolling 은 architectural register 가 많이 필요하고 부족하면 spill 로 더 느려질 수 있음.
원인Tomasulo 는 RS 라는 추가 physical register 로 여러 iteration 을 겹침. 두 iteration 후 Load1/2, Store1/2, Mult1/2 사용.
해결integer 명령어가 앞서 나가 FP op 을 queue 에 쌓고, FP op 은 앞선 branch 확정 후 실행. 확정 전 실행하면 잘못된 iteration 이 register 를 덮어 틀린 결과.
  • 슬라이드 ADDI X1,X1,8 은 주소 R(X1)-8 과 맞지 않아 감소여야 한다고 강사 지적
p.35
2.11.1 · p.35 · 58:34 · 두 iteration 후 상태
2.11.r.1Loop unrolling — Wikipedia ↗ · compiler loop unrolling 과 register pressure 단점
2.121:06:12–1:09:40Tomasulo 가 iteration 을 겹칠 수 있는 이유
상황·문제p36 정리.
원인RS 가 architectural 보다 많은 physical register 제공, 옛 register 값을 buffer 해 WAR·WAW stall 제거.
해결operand 준비 시 실행 = dataflow graph 를 실행 중 구성. 'control flow 를 넘어 issue' 항목은 강사가 오해 소지가 있어 다음 강의에서 정정하겠다고 함.
  • 정정 요지: RS 로 dispatch 는 하되 branch 확정 전에는 issue 를 막는 형태
p.36
2.12.1 · p.36 · 1:06:13
2.12.r.1Dataflow architecture — Wikipedia ↗ · operand 가 준비되면 실행, OoO 를 restricted dataflow 로 설명
2.131:09:40–1:11:49장점: 분산 hazard detection 과 CDB broadcast
상황·문제RAW 검사를 RS 마다 수행.
원인중앙 register file 이면 먼저 쓰고 FU 들이 cycle 마다 하나씩 읽어야 함.
해결CDB broadcast 로 같은 결과를 기다리는 여러 명령어가 같은 cycle 에 시작. WAR·WAW 회피.
p.37
2.13.1 · p.37 · 1:09:41
2.141:11:49–1:13:53단점: 복잡성, CDB 병목, imprecise interrupt
상황·문제구현이 복잡해 360/91 등 제품이 지연.
원인CDB 는 모든 unit 에 broadcast 하는 high capacitance·high wiring density bus 라 clock 을 올리기 어렵고, cycle 당 하나의 FU 만 write.
해결CDB 를 여러 개 두면 RS 마다 여러 bus 와 비교해 비용 증가. non-precise interrupt 도 단점.
p.38
2.14.1 · p.38 · 1:11:49
2.14.r.1Out-of-order execution — Wikipedia ↗ · CDC 6600→360/91→1990년대 재도입 역사, precise exception·memory latency 동기
2.151:13:53–1:18:30OoO 의 쇠퇴와 1990년대 이후 재도입, 요약
상황·문제OoO 는 1960년대 상용화 뒤 1990년대까지 사라짐.
원인precise trap(→ 다음 강의 reorder buffer)과 정확한 branch prediction 이 없었고, 공정 발전이 빨라 단순 core + on-chip cache 가 유리했음.
해결이후 memory 가 상대적으로 느려져 latency hiding 이 중요, compiler 최적화 의존 감소, wider issue·deeper pipeline 의 ILP 필요로 desktop·laptop·smartphone 대부분이 OoO 사용.
p.39
2.15.1 · p.39 · 1:13:53
p.40
2.15.2 · p.40 · 1:16:42
p.41
2.15.3 · p.41 · 1:18:13 · 요약
2.15.r.1Out-of-order execution — Wikipedia ↗ · CDC 6600→360/91→1990년대 재도입 역사, precise exception·memory latency 동기
2.15.r.2Branch predictor — Wikipedia ↗ · branch prediction 목적과 2-bit·two-level predictor 발전사

3핵심 개념

3.1WAR(write-after-read)·WAW(write-after-write) hazard
name(false) dependence. 뒤 명령어가 앞 명령어의 source/destination register 를 먼저 덮어쓰는 위험.
3.1.r.1Data dependency — Wikipedia ↗ · RAW(true)·WAR(anti)·WAW(output) 정의, name dependence 는 renaming 으로 제거
3.2reservation station(예약 스테이션, RS)
FU 옆 buffer. Op, Vj/Vk, Qj/Qk, Busy 로 operand 값이나 생산자 tag 를 보관.
3.2.r.1Reservation station — Wikipedia ↗ · RS 가 CDB 를 listen 해 operand 를 받는 동작
3.3register renaming(레지스터 이름 재할당)
dispatch 때 register 를 값 또는 RS tag 로 바꿔 WAR·WAW 제거.
3.3.r.1Register renaming — Wikipedia ↗ · WAR/WAW false dependence 제거, architectural vs physical register
3.4Common Data Bus(공통 데이터 버스, CDB)
data + source tag 를 broadcast, tag 가 일치하는 RS·register 가 가져감.
3.4.r.1Tomasulo's algorithm — Wikipedia ↗ · reservation station·CDB·register renaming·3단계와 precise exception 문제 정리
3.5dispatch vs issue
이 강의: dispatch = FP queue→RS(in-order), issue = RS→FU. 교재는 앞쪽을 issue 라 부름.
3.6register result status(레지스터 결과 상태)
register 마다 값을 쓸 RS 이름(Qi). 비어 있으면 register file 값이 최신.
3.7imprecise exception(부정확한 예외)
OoO write-back 으로 exception 명령어 뒤의 결과가 이미 반영돼 상태 복구 불가.
3.7.r.1Out-of-order execution — Wikipedia ↗ · CDC 6600→360/91→1990년대 재도입 역사, precise exception·memory latency 동기
3.8dynamic loop unrolling(동적 루프 전개)
RS 의 추가 physical register 로 여러 iteration 을 HW 에서 겹쳐 실행.
3.8.r.1Loop unrolling — Wikipedia ↗ · compiler loop unrolling 과 register pressure 단점
3.9dataflow execution
operand 가 준비되면 실행. Tomasulo 는 dataflow graph 를 실행 중에 구성.
3.9.r.1Dataflow architecture — Wikipedia ↗ · operand 가 준비되면 실행, OoO 를 restricted dataflow 로 설명

4스스로 확인

4.1p5 예제에서 OoO execution 만으로 성능이 거의 안 오른 이유는?
답
5번 FDIV 가 3번 FMULT 의 source f4 에 쓰는 WAR 때문에 3번을 기다려야 함.
4.2CDB 가 일반 bus 와 다른 점은?
답
destination 대신 source(RS 번호 tag)를 data 와 함께 broadcast, 대기 entry 가 tag 비교로 가져감.
4.3Qj=0 의 의미는?
답
첫 operand 를 기다리지 않음, 즉 Vj 값이 유효.
4.4cycle 6 에 FADD.D F6 을 WAR 가 있어도 dispatch 할 수 있는 이유는?
답
앞선 FSUB 가 dispatch 때 F6 값을 RS 로 복사했고 dispatch 가 in-order 이기 때문.
4.5예제에서 FDIV 가 write result 하는 cycle 과 그 전 실행 시작 cycle 은?
답
16 에 F0 을 받아 실행 시작, 56 완료, 57 write.
4.6Tomasulo 에서 precise exception 이 안 되는 이유는?
답
register 를 out-of-order 로 갱신해 FDIV exception 전에 뒤의 FADD 가 F6 을 이미 덮어씀.
4.7CDB 가 병목이 되는 두 이유는?
답
high capacitance·wiring 으로 고속 동작 어려움, cycle 당 FU 하나만 write.

5참고 자료

5.1Computer Architecture: A Quantitative Approach, 6th ed. — Elsevier ↗ · 교재. 덱 권장 읽기 Chapter 3.4–3.5
5.2Tomasulo's algorithm — Wikipedia ↗ · reservation station·CDB·register renaming·3단계와 precise exception 문제 정리
5.3R. M. Tomasulo, An Efficient Algorithm for Exploiting Multiple Arithmetic Units (IBM JRD 1967) — PDF ↗ · 원 논문. common data bus 와 register tagging 을 직접 설명
5.4Out-of-order execution — Wikipedia ↗ · CDC 6600→360/91→1990년대 재도입 역사, precise exception·memory latency 동기

7한국어판 강의자료

단축키
Ctrl K · s자료 검색
[ ]이전·다음 강의
Space영상 재생·정지
j k다음·이전 section
n p다음·이전 slide
b강의 목록 접기·펴기
t맨 위
/강의 검색
Esc닫기