✅파이프라니잉
: 여러 명령어가 중첩되어 실행되는 구현 기술
☑️파이프라닝 예시
위의 그림은 네 묶음의 빨래를 처리하는데 8시간이 걸리지만
아래 그림은 빨래를 3.5시간만에 했죠??
아래가 바로 파이프라인의 단계라고 볼 수 있습니다.
일감 하나를 끝내는 데 걸리는 시간을 단축하지는 못하지만, 해야 할 빨래가 많을 경우 처리량이 증가하므로 일을 끝내는 데 걸리는 전체 시간을 단축시켰습니다.
명령어 실행을 파이프라이닝 한 프로세서에도 같은 원리가 적용된다.
- 메모리에서 명령어를 가져온다.
- 명령어를 해독하는 동시에 레지스터를 읽는다. MIPS 명령어는 형식이 규칙적이므로 읽기와 해독이 동시에 일어날 수 있다.
- 연산을 수행하거나 주소를 계산한다.
- 데이터 메모리에 있는 피연산자에 접근한다.
- 결과값을 레지스터에 쓴다.
파이프라인은 각 단계별로 하나의 cycle을 잡는다.
가장 오래 걸리는 것을 기준으로 한 clock을 잡는 것이다.
어떤 isntruction은 필요 없는 stage가 있을 수 있다. 그럼에도 불구하고 다음 명령어가 꼬일 수 있기 때문에 그냥 한 clock을 부여한다.
⇒ 이것이 파이프라인에서 손실이 일어나는 경우이다!
파이프라인은 가장 오래 걸리는 stage를 기준으로 잡는다고 위에서 설명했다.
위의 표를 보면 200ps가 가장 오래 걸리는 것을 확인할 수 있다.
즉, lw에서 Register read와 Register write는 레지스터를 읽고 쓰는데는 100ps가 걸리지만 두 번째 하고 다섯 번재 stage에는 200ps가 할당이 되어있는 것이다!
다음의 예시를 보자.
두 번째 명령어에서는 첫 번째 stage가 돌아갈 수 있게끔함
파이프라인을 보면 빈칸들이 있는 것을 볼 수 있다. 각각 100ps씩 차지한다고 볼 수 있다.
✅파이프라인에 대한 성능
가장 느리게 실행이 되는 stage에 의해 clock cycle이 결정된다고 했다.
파이프라인의 성능은 각 stage별로 걸리는 시간은 똑같다고 가정한다.
⇒ perfectly balanced stage
파이프라인은 다음과 같이 구한다!
stage와 명령어 개수의 상관관계이다.
파이프라인이 논 파이프라인보다 성능이 좋다!
stage 개수만큼 성능이 좋다.
물론! stage개수가 4라고 해서 4배가 빠른 건 아님 (위의 세탁기 예시에서 확인가능!)
실제 속도가 k개보다 작은 이유
1. 파이프라인 fill up 타임이 있기 떄문이다.
- 파이프라인을 채우는 시간이 존재한다.
2. 파이프라인 해저드
- 명렁어 시간을 지연시킨다. (한 클럭에 한 단계를 거쳐야 하는데 지연이 되는 경우가 있음)
3. 스테이지 별로 걸리는 시간은 unbalance 하다.
4. 파이프라인 오버헤드
- 파이프라인 레지스터 딜레이 발생 (없었던 장치들이 새롭게 추가)
해저드
간단하게 파해쳐보자!🤔
- 구조적 헤저드 (structural hazard)
- 같은 클럭 사이클에 실행하기를 원하는 명령어의 조합을 하드웨어가 지원할 수 없기 때문에 발생한다.
2. 데이터 헤저드 (data hazard)
- 어떤 단계가 다른 단계가 끝나기를 기다려야 하기 때문에 파이프라인이 지연되어야 하는 경우 일어난다.
3. 제어 헤저드 (control hazard)
- 다른 명령어들이 실행되는 동안 어떤 명령어의 결과에 기반을 둔 결정을 할 필요가 있을 때 일어난다.
✅MIPS에 파이프라인 적용시키기
5개로 자를 수가 있다.
위의 그림을 보면 예쁘게 잘리지 않았나??! 사실 MIPS는 파이프라인이었다고 한다!! 😮
각각의 stage별로 저장된 데이터가 존재한다.
첫 번째 stage의 경우 데이터가 두 개이다.
- instruction
- PC + 4
⇒ 둘 중 하나 중에 먼저 끝나는 애가 있더라도 기다려야 함
⇒ 이 하나가 clock cycle time임
근데 역방향으로 가는 게 있다.
(헤저드의 원인 중 하나였음)
'2-2 학기 > Computer Organization' 카테고리의 다른 글
[컴퓨터구조] Lec17, Lec18 Data Hazards (0) | 2023.12.19 |
---|---|
[컴퓨터구조] Lec16 Pipelined Datapath and Control (1) | 2023.12.19 |
[컴퓨터구조] Lec12 Datapath Design (0) | 2023.10.30 |
[컴퓨터구조] Lec10 Floating Point (1) | 2023.10.30 |
[컴퓨터구조] Lec8 Multiplication (0) | 2023.10.30 |