+ 한국항공대학교 길현영 교수님의 컴퓨터구조론 과목 내용을 정리한 글입니다.
파이프라이닝 개요
세탁 시스템을 통해 쉽게 이해할 수 있다. (or 소화기관)
- 전체 세탁 흐름 = 하나의 프로그램
- 전체 세탁하는데 걸리는 시간 = 프로그램 실행 시간 -> 성능
- 세탁물 1개 = 명령어 1개
하나의 일을 수행하는데 걸리는 시간이 각각 다를 경우 기다리는 시간이 발생한다.
위 그림에서
(기본) 세탁물 수가 4개일 경우, 병행 방식은 순차 방식에 비해 약 1.7배 빠르다.
- (90 × 4) ÷ (90 +40 × 3) = 1.7
- 40 × 3: 첫 세탁을 제외하고, 두 번째부터 가장 길게 걸리는 마지막 일만큼 기다려야하기 때문에 40분이 지날 때마다 세탁 하나가 완료된다.
세탁물 수가 10개일 경우, 병행 방식은 순차 방식에 비해 약 2배 빠르다.
- (90 × 10) ÷ (90 +40 × 9) = 2
=> 해야할 일이 증가할수록, 성능 개선율이 높아진다.
세탁 시스템을 3 -> 5단계로 분리할 경우, 즉 세탁기와 건조기를 두 대로 분할하여 15분, 20분씩 처리할 경우, 병행 방식은 순차 방식에 비해 약 2.4배 빠르다.
- (90 × 4) ÷ (90 + 20 × 3) = 2
=> 하나의 일을 수행하는 데 필요한 단계를 분리할수록, 성능 개선율이 높아진다. (depth 증가)
세 개의 서브시스템의 지연시간이 동일하게 30분인 경우, 병행 방식은 순차 방식에 비해 약 2배 빠르다.
- (90 × 4) ÷ (90 + 30 × 3) = 2
=> 각각의 단계들의 지연시간이 동일하면, 성능 개선율이 높아진다. (pipe의 수행 시간을 일정하게)
(가장 길게 걸리는 시간보다 더 짧게 동일해야한다.)
파이프라이닝 정의
=> 명령어의 데이터 경로를 세분화하고, 각기 다른 세부 단계를 동시에 수행하게 함으로써, 여러 명령어들을 중첩 수행 가능하게하여 성능을 향상시키는 방법이다.
파이프 (pipe)
=> 세분화된 각 단계
파이프라인의 깊이 (Depth)
=> 세부 단계의 개수 (모든 단계를 동시에 수행하고 있는 순간이 존재한다.)
< 빈 부분이 존재하는 이유 >
레지스터에 접근하는데 걸리는 시간은 다른 일보다 수행 시간이 상대적으로 적게 걸린다.
레지스터를 읽는 부분과 쓰는 부분이 동시에 발생할 수 있다.
따라서, 사이클 시간 중 절반을 나눠서 읽는 부분은 두 번째 절반에, 쓰는 부분은 첫 번째 절반에 실행한다.
해저드 (위험)
1. 강력하거나 복합적인 명령어는 데이터 경로의 일부 단계를 두 번 이상 사용한다.
ex) 많이 더러운 세탁물은 세탁 과정을 두 번 이상 수행한다.
2. 선행 명령어가 후행 명령어에 종속될 수 있다.
ex) 선행 명령어: c = a + b, 후행 명령어: d = c + e => 선행 명령어를 수행해야 후행 명령어를 수행할 수 있다.
3. 분기 명령어에 의해 명령어의 실행 순서가 달라질 수 있다.
순차 vs 병렬 vs 병행
데이터 하나당 T 시간이 걸리는 함수 f(x)로 n개의 데이터를 처리할 때,
- f: 프로세서
- f1: 프로세서 상위 절반
- f2: 프로세서 하위 절반
1. 순차 처리
- 실행 시간: n × T
- 추가 비용: X
2. 병렬 처리
- 실행 시간: (n × T) ÷ 2
- 추가 비용: 프로세서 및 다른 HW (디멀티플렉서, 토글 스위치 등)
+ 하나의 HW를 추가하기 위해서 다른 요소들이 더 추가되어야한다. (선)
+ HW에서 공간은 곧 돈이다.
3. 병행 처리 (파이프라이닝)
- 실행 시간: (n × T) ÷ 2
- 추가 비용: 프로세서 및 다른 HW (디멀티플렉서, 토글 스위치 등)
+ 첫 데이터와 마지막 데이터 처리를 제외하면, 모두 2개를 동시에 수행한다. n이 매우 크면 2배 더 빠르다.
+ 병렬 처리와 마찬가지로 추가적인 HW(임시 데이터를 저장할 기억소자 래치)가 더 필요하다.
+ HW가 많아질수록 추가적인 시간, 공간, 관리 시스템 등이 소요된다.
파이프라이닝의 성능
관련 요소
1. 클록 주기:T
2. 파이프라이닝 깊이(단계 개수): M
3. 래치 지연시간: L
+ FlipFlop은 입력 값 + 클락 사이클의 영향을 받아 출력 상태(값)를 변경(기억)한다.
+ 래치는 입력 값의 영향만을 받아 출력 상태(값)을 변경(기억)한다.
4. 처리할 데이터(명령어) 수: n
성능 분석
1. 순차 처리 방식
- n개의 데이터 처리시간
=> T × n
2. 파이프라이닝 방식
(T ÷ m) + L = 파이프라이닝 한 단계를 처리하는데 걸리는 시간
- 첫 번째 데이터 처리시간 = m × (T ÷ m + L) = T + m × L
= 클락 사이클 T에 파이프라이닝 단계 개수만큼 래치 지연시간이 추가로 소요된다.
- 두 번째 ~ n번째까지 데이터 처리시간 = (n - 1) × (T ÷ m + L)
=> m × (T ÷ m + L) + (n - 1) × (T ÷ m + L)
구현 방식 | 지연 시간 (첫 번째 데이터 처리) | 처리율 (처리할 데이터가 매우 많을 때) |
순차 처리 | T | 1 ÷ (T) |
m단계 파이프라이닝 | T + mL | 1 ÷ (T ÷ m + L) |
래치 지연시간이 무시할 만큼 작다면, (L = 0)
구현 방식 | 지연 시간 (첫 번째 데이터 처리) | 처리율 (처리할 데이터가 매우 많을 때) |
순차 처리 | T | 1 ÷ (T) |
m단계 파이프라이닝 | T | 1 ÷ (T ÷ m) = m ÷ T |
=> 처리율이 m배 향상된다.
파이프라이닝 성능 극대화 방법
1. 래치 지연 시간이 파이프 지연 시간에 비해 무시할 정도로 작을 경우
=> L = 0
2. 처리할 데이터가 충분할 경우 (첫 번째 데이터 처리시간을 무시할 만큼)
=> n = ∞
3. 파이프라인의 각 단계를 균등하게 분할하는 경우
=> 파이프라인의 각 단계의 처리 시간이 T ÷ m + L로 일정
4. 하나의 파이프에서 이웃한 파이프들로 데이터를 이동할 때 clock을 사용하여 동기화가 필요하다.
=> Clock Skew 문제 (물리적 전기 신호의 특성으로 발생하는 Clock의 시간 편차)가 발생한다.
+ 이웃한 파이프들간 거리에 따라 데이터 이동 시간이 달라진다.
5. 데이터(명령어)의 의존성이 없을 경우
=> 해저드 가능성 X
picoMIPS 아키텍처와 파이프라이닝
구현 방식에 따른 picoMIPS의 성능
< 가정 >
- 명령어 인출 단계 소요 시간: 2ns
- 명령어 해독 및 레지스터 읽기 단계: 1ns
- ALU 연산 단계: 2ns
- 메모리 접근 단계: 2ns
- 레지스터 쓰기 단계: 1ns
- 래치 시간: 0ns
구현 방식 | 클록 시간 | CPI |
단일 사이클 | 2ns + 1ns + 2ns + 2ns + 1ns + 0ns = 8ns | 1 |
다중 사이클 | max(2+0ns, 1+0ns, 2+0ns, 2+0ns, 1+0ns) = 2ns | 3 ~ 5 (명령어마다 다름) |
파이프라이닝 | max(2+0ns, 1+0ns, 2+0ns, 2+0ns, 1+0ns) = 2ns | 1 (n = ∞, 한 단계만 실행) |
'Computer Science > Computer Architecture' 카테고리의 다른 글
[Computer Architecture] 공격적 파이프라이닝 (1) | 2023.11.18 |
---|---|
[Computer Architecture] 해저드 (0) | 2023.11.18 |
[Computer Architecture] 데이터 경로 (0) | 2023.11.05 |
[Computer Architecture] 데이터 연산 (picoMIPS) (1) | 2023.10.22 |
[Computer Architecture] 디지털 논리 회로 (2) | 2023.10.22 |