오래 못 할 짓 하지 않기

[ 컴퓨터 구조 ] 10. Pipeline 적용 본문

2학년 2학기/컴퓨터 구조

[ 컴퓨터 구조 ] 10. Pipeline 적용

쫑알bot 2023. 7. 6. 13:30
728x90

Basic Steps of Execution of Pipeline

 

  1. Instruction Fetch (IF)

  2. Instruction decode / Register Fetch (ID)

  3. Execution / Effective address (EX)

  4. Memory access (MEM)

  5. Register write-back (WB)

Multiple에서 : 위 작업을 하는 데 걸리는 시간이 [  5 CLK * 개수 ] 였음

Pipeline에서 : 첫 번째 수행하는 놈이 1번을 끝내고 2번으로 갔다 → 두 번째 놈이 1번으로 들어감 (돌림노래 한다고 생각하면 됨) 

더하기 > LW > 곱하기 연산을 하는 작업


위 실행은 Pipeline이 X일 때의 모습이고


아래 실행은 Pipeline으로 실행했을 때의 모습이다.  
+ADD인 경우에 3단계로 끝나기 때문에 4단계가 딱히 돌아갈 이유가 없다.
  따라서, 노란색같은 부분은 돌아가지 않는 걸 뜻한다.

 


 

  Single Cycle : Multiple Cycle : Pipeline 비교

 

 


●   Pipeline하기 좋은 이유 → [ 실행 시간이 예측 가능 ]

  1. 모든 명령어의 길이가 같다. → 모든 명령어가 32비트로 통일되어 있기 때문에 (애초에 다른 비트를 배우질 않았음)
    → 32 비트로 같기 때문에 Instruction Fetch (IF) 에서 걸리는 시간이 항상 같다.
    ex) 어떤 명령어는 32비트, 어떤 건 64, 어떤 건 16 이런 식이면 IF에서의 시간을 고정할 수가 없음

  2. 명령어가 format이 많지 않다. (5개 밖에 안 되어서?(질문하기) ) 
    → 명령어를 Decoding 하는데 걸리는 시간이 얼마 안 걸린다.

  3. Memory 에 접근하는 건 Load 와 Store 만 있다.
    만약 Memory에 접근하는 명령어들이 여러 가지 더 생기게 된다면 실행하는 데 걸리는 시간을 보장할 수가 없다.
    (중간 단계들이 더 생길 것이기 때문에)



●    Pipeline하기 어렵게 만드는 요소들

  1. Structure hazards : Memory 가 하나만 있는 경우
    → Instruction memory, Data memory  두 개가 합쳐져 하나로 있다고 하면 Pipeline을 하기가 힘들다.
    이유 : IF에서 메모리에 access + MEM 단계에서도 메모리에 Access
           이 상황은 돌림노래에 도돌이표가 있어 같은 구간을 부르는 두 사람(혹은 그 이상)이 생기는 느낌임.
           이 때문에 Instruction memory, Data memory를 나누어서 사용함
  2. Data hazards : Instruction 간의 Dependency가 있는 경우
    ex) 해당 Instruction을 실행하기 위해서는 이전 Instruction의 결과를 받아야 할 때

    Pipeline은 이전 명령어가 끝나기 전에 그 다음 명령어를 실행하는 것인데
    이전 명령어가 끝나야 다음 명령어가 실행되는 조건이 있는 경우에는 Pipeline을 하기가 어렵다.

  3. Control hazards : 원래 명령어의 순서가 아니라 BEQ나 JUMP를 만나 멀리 떨어진 명령어로 넘어가는 경우
    ex) 단체 줄넘기를 할 때, 내가 들어가려고 리듬타고 출발하는데
           갑자기 내 다음다음 애가 후다닥 뛰어들어가는 상황.

    정확히는 미리 내가 비집고 들어가서 작업중인데 순서 바뀌었으니 넌 작업 안 해도 된다. 너 다음다음 애로 바뀌었다. 하는 상황


 

 

X축 : 1CLK당 수행하는 명령어의 개수/ Y축 : CLK 주기 (fater : 짧다)

 

  • Single    : 한 CLK에 할 거 다 할 수 있도록 모든 명령어들을 때려 박음. 
  • Multiple  : 한 CLK에 한 작업씩 나누어서 하도록 쪼개놓음
  • Pipeline :  Multiple 요소에서 다른 작업들과 동시에 작업 가능.


 

  • Single    : 하드웨어 공유  X
  • Multiple  : ALU Memory 이런 거 같이 씀, 대신 Register 가 늘어남.
  • Pipeline :  하드웨어 공유하다가 hazard 생길 수도 있음.

 

 

 

참고 : https://luv-n-interest.tistory.com/993

출처 : 한동대 SW 중심대학