본문 바로가기

컴퓨터 구조론( MIPS )

프로세서 5 - 파이프라이닝 개요

728x90
반응형

 

 

 

 

안녕하세요. WH 입니다. 오늘은 파이프 라이닝 입니다.

파이프 라이닝이 뭐냐? 병렬 처리르 통한 성능 개선 방법이라고 생각하시면 됩니다.

이번 글은 배경지식 정도의 느낌으로 정리해주시면 된답니다.

 

단일 사이클은 앞의 4번에 걸쳐 설명했으니.. 넘어갈게요

기억이 나질 않으시면 아래 글을 참고해주세요

2022.02.09 - [컴퓨터 구조론( MIPS )] - 프로세서 1 - R-type 명령어 데이터 패스, 명령어 인출과정

2022.02.09 - [컴퓨터 구조론( MIPS )] - 프로세스 2- Load or Store 명령어, branch 명령어

2022.02.09 - [컴퓨터 구조론( MIPS )] - 프로세스 3 - ALU 제어와 주 제어 유닛 설계

2022.02.10 - [컴퓨터 구조론( MIPS )] - 프로세스 4 - 데이터 패스 동작

 

시작하기 전에 아래 그림을 볼게요.

  lw 명령어에 대해 단일 처리를 하면 2 번의 명령을 처리하는데 약 1600ps 가 걸리는 것을 확인 하실수 있고 파이프라이닝을 이용하면, 대략한 1200ps 정도 걸리는 것을 확인할 수 있네요. 파이프라이닝이 뭐냐면, 처음 시작 명령어가 끝나면 놀고 있지 말고 그 명령어를 실행하여 다른 프로세서를 처리하는 방법이에요. 잘 모르겠는데요? 지금은 그냥 노는 놈 적게 만드는 기술 정도로 생각하시면 될 것같아요. 방금 노는 놈 적게 만든다고 했죠? 그럼 MIPS 명령어는 어떤 단계들을 거쳐올까요??

 

명령어 실행 5단계

  1. 메모리에서 명령어를 가져옴

  2. 명령어를 해독하는 동시에 레지스터를 읽음

  3. 연산을 수행하거나 주소를 계산함

  4. 데이터 메모리에 있는 피연산자에 접근함

  5. 결과 값을 레지스터에 씀

 

  별거 아니네? 맞아요. 데이터 패스에서 저 과정을 지겹도록 많이 했으니까요. 매우 쉬울거에요. 우리가 배운 명령어는 많은 것 같기도, 적은 것 같기도 해요. 뭐 여기서는 lw, sw, R-type( add, sub, and, or, slt), beq 이 정도만 다룰 게요. 사실 이것만 계속 다뤄왔답니다. 뭐 여튼 파이프라이닝이 뛰어남을 알려면 단일 사이클이랑 비교를 해야겠죠? 비교해서 보자구요.

  비교를 하기 전에, 잠깐 단일 사이클 구현에서는 모든 명령어가 한 클럭 사이클이 걸리잖아요? 가장 느린 명령어를 수용할 수있을 만큼 클럭 사이클이 길어져야겠네요. 제일 느린 놈에 맞춰서!! 정리를 좀해보자면 아래와 같이 된답니다.

 

자 우리는 아래의 명령어 비교를 통해 얼마나 빨라지는 지를 확인해 보겠어요

 

lw $1, 100($0) <- 1 번째 명령어

lw $2, 200($0)

lw $3, 300($0)

lw $4, 400($0) <- 4 번째 명령어

 

  다시 사진을 가져왔습니다. 우리는 1 번째 명령어와 4 번째 명령의 사이의 시간을 계산해 볼게요, 1 번째 명령어가 실행되고 단일 사이클에서는 2400ps 후에 4번째 명령어가 실행되는 반면 파이프라이닝에서는 600ps 이후에 실행되죠. 즉 명령어 실행속도가 4배 정도 차이가 난다는 겁니다. 와... 병렬 처리만 해줬는데 이정도라니요. 매력적이네요. 아아 물론 그냥 단순하게 봐서 그렇지 처리량이 많아져야 약 4배의 성능 차이가 난답니다.

 

파이프라인 해저드

  다음 명령어가 다음 클럭 사이클에 실행될 수 없는 상황, 이런 상황을 해저드라 부르며 세 가지 종류가 있답니다.

 

1. 구조적 해저드

  - 이는 같은 클럭 사이클에 실행하기를 원하는 명령어의 조합을 하드웨어가 지원할 수 없다는 것을 의미합니다. 뭐 다른 단계에 있는 명령어들이 동시에 같은 자원을 사용하려고 하는 상황이랄까요?

2. 데이터 해저드

  - 명령어를 실행하는 데 필요한 데이터가 아직 준비되지 않아서 계획된 명령어가 적절한 클럭 사이클에 실행될 수 없는 사건을 데이터 해저드라 말합니다. 즉 앞의 결과를 사용해야 하는데 안 끝나서 못쓰는 상황이랄까요?

3. 제어 해저드

  - 인출한 명령어가 필요한 명령어가 아니기 때문에, 적절한 명령어가 적절한 클럭 사이클에 실행될 수 없는 상황을 말하는데요, 명령어 주소의 흐름이 파이프라인이 기대한 것과 다르기 대문에 발생합니다. 그니까 쉽게 말하면 분기 명령어 결과를 몰라서 다음 명령어를 못가져오는 상황이라고 생각하면 됩니다.

 

728x90
반응형