💡 파이프라이닝 (Pipelining) 💡
🔍 정의
동시에 여러 개의 명령어를 처리하여 처리량을 올리는 기법
파이프라이닝 (Pipelining)은 명령어를 순차적으로 실행하는 프로세서에 적용되는 기술이다.
하나의 명령어가 실행될 때, 다른 명령어를 실행시켜서 동시에 여러 개의 명령어를 실행시키는 기법이다.
이렇게 동시에 여러 개의 명령어를 처리하여 처리량을 올리는 것이 핵심이다.
이때 명령어에 따라 실행하는 각 단계 수행 속도는 변화가 없으며 처리량만 증가한다.
또한 명령어가 동시에 여러 개가 실행되면서 전체 수행 속도는 향상된다.
🔍 이해
파이프라이닝 (Pipelining)을 이해하기 위해 세탁소에서 세탁물을 처리하는 예제를 많이 사용한다.
세탁소에서 세탁물을 처리하는 절차
- (세탁) 세탁물을 세탁기에 넣고 동작시킨다.
- (건조) 세탁된 옷을 건조기에 넣고 동작시킨다.
- (접기) 건조된 옷을 접는다.
- (보관) 접은 옷을 보관한다.
위와 같이 4단계의 절차가 있고, 세탁물 A, B, C가 있다고 가정해 보자.
각 단계를 처리하는데 소요되는 시간은 1시간이라고 가정한다.
위의 순서대로 세탁물 A, B, C를 차례대로 세탁을 하면 아래와 같은 표로 정리할 수 있다.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | |
세탁물 A | 세탁 | 건조 | 접기 | 보관 | ||||||||
세탁물 B | 세탁 | 건조 | 접기 | 보관 | ||||||||
세탁물 C | 세탁 | 건조 | 접기 | 보관 |
각 단계별로 세탁물 A, B, C를 처리하는데 전체 12시간 소요된다.
각 단계가 종료되면 다음 세탁물이 들어올 때까지 계속 대기하고 있는 idle task
가 발생하게 된다.
이러한 idle task
를 줄여 동일 한 시간 내에 작업 처리량을 증가시키기 위해 파이프라이닝을 사용한다.
아래 표는 파이프라이닝을 적용한 내용을 정리한 표이다.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | |
세탁물 A | 세탁 | 건조 | 접기 | 보관 | ||||||||
세탁물 B | 세탁 | 건조 | 접기 | 보관 | ||||||||
세탁물 C | 세탁 | 건조 | 접기 | 보관 |
각 단계별로 세탁물 A, B, C를 처리하는데 전체 6시간 소요된다.
위 와 같이 동시에 처리 가능한 일들은 동시에 처리하여 전체 작업 속도를 향상하고 동일한 시간 내에 처리량을 증가시킬 수 있다.
파이프라이닝 기술 적용 유무에 대해 비교하면 아래와 같다.
p
: 단계 수n
: 작업 수T
: 전체 시간sp
: 파이프라이닝을 적용하여 얻을 수 있는 속도 향상
파이프라이닝 X | 파이프라이닝 O | |||
전체 작업 시간 (T) | T = p*n | 4*3 = 12 | T = p+(n-1) | 4+(3-1) = 6 |
속도 향상 (sp) | sp = (p*n) / {p+(n-1)} | (4*3)/{4+(3-1)} = 2 |
위 예제의 경우 파이프라이닝을 적용했을 때, 속도가 2배 상승함을 알 수 있다.
🔍 효율적인 파이프라인 조건
명령을 세분화하여 단계를 더 나눌 수 있다면 처리 속도 향상을 기대할 수 있다.
그러나, 실행할 수 있는 명령어 수에 비해 단계가 너무 많이 세분화되어 있다면 효율성을 기대하기는 힘들다.
- 각 단계별 처리 시간 일정
- 각 명령어 처리 단계 균일
또한 위와 같은 두 가지 조건에서 파이프라이닝의 효율이 좋다.
처리 시간이 일정하지 않거나 명령어 처리 단계가 균일하지 않으면 문제가 발생하기도 한다.
이때 시스템에서 발생할 수 있는 잠재적인 위험을 가리키는 '파이프라인 해저드'라는 용어를 사용한다.
💡 해저드 (Hazard) 💡
🔍 정의
파이프라인을 사용하는 명령어가 클럭 사이클 내에 실행하지 못해서 다른 명령어들이 대기하는 상황.
처리 성능을 향상하기 위해 파이프라이닝을 적용하면 명령어를 여러 단계로 분할하여 동시에 실행하면서 문제가 발생할 수 있다.
이를 파이프라인 해저드라고 한다.
파이프라인 해저드 (Pipeline hazard)는 3가지 종류가 있다.
- 구조적 해저드 (Structural Hazard)
- 데이터 해저드 (Data Hazard)
- 제어 해저드 (Control Hazard)
🔍 구조적 해저드 (Structural Hazard)
여러 단계의 파이프라인에서 동시에 수행되는 작업들 사이에 자원 충돌이 발생하는 경우 발생
프로세스의 자원 부족으로 발생한다.
예를 들어,
하나의 명령어가 실행 단계에서 필요한 자원을 이미 사용 중인 경우
다음 명령어의 실행이 지연되거나 중단될 수 있다.
🔍 데이터 해저드 (Data Hazard)
파이프라인의 한 단계에서 결과가 아직 사용되지 않은 상태에서
다음 단계에서 해당 결과를 필요로 하는 경우 발생
잘못된 결과가 생성되거나 파이프라인의 동작이 불안정해질 수 있다.
위와 같이 데이터의 의존성으로 인해 발생하는 문제를 해결하기 위해
전방전달 (Forwarding) (or 우회전달 (Bypassing)) 이 사용된다.
전방전달은 실행 중인 명령어의 결과를 파이프라인의 이후 단계로 직접 전달하여 데이터 의존성을 우회하는 방법이다.
즉, 이전 명령어의 결과가 아직 메모리에 기록되지 않았더라도,
해당 결과를 다음명령어의 연산에 사용할 수 있도록 한다.
이를 통해 데이터 의존성으로 인한 대기 시간을 줄이고, 파이프라인 성능을 향상할 수 있다.
🔍 제어 해저드 (Control Hazard)
분기 명령어나 예외 상황과 같이 명령어 흐름을 변경하는 상황에서 발생
예를 들어,
분기 예측이 실패하거나 분기 결과가 다음 명령어의 실행에 영향을 주는 경우
잘못된 명령어가 실행될 수 있다.
위와 같은 파이프라인 해저드 문제가 발생하지 않기 위해서
파이프라인 간단화, 지연 슬롯, 예측 기술들을 사용할 수 있으며
파이프라인을 잘 관리하여야 한다.
'Computer Science > Computer Architecture' 카테고리의 다른 글
5. 패리티비트 & 해밍코드 (0) | 2021.08.02 |
---|---|
4. 고정소수점 & 부동소수점 (0) | 2021.08.02 |
3. Cache Memory (0) | 2021.07.20 |
2. CPU (0) | 2021.07.18 |
1. Structure (0) | 2021.07.14 |