오래 못 할 짓 하지 않기
[ 컴퓨터 구조 ] 10. Pipeline 적용 본문
728x90
Basic Steps of Execution of Pipeline
- Instruction Fetch (IF)
- Instruction decode / Register Fetch (ID)
- Execution / Effective address (EX)
- Memory access (MEM)
- Register write-back (WB)
Multiple에서 : 위 작업을 하는 데 걸리는 시간이 [ 5 CLK * 개수 ] 였음
Pipeline에서 : 첫 번째 수행하는 놈이 1번을 끝내고 2번으로 갔다 → 두 번째 놈이 1번으로 들어감 (돌림노래 한다고 생각하면 됨)
위 실행은 Pipeline이 X일 때의 모습이고
아래 실행은 Pipeline으로 실행했을 때의 모습이다.
+ADD인 경우에 3단계로 끝나기 때문에 4단계가 딱히 돌아갈 이유가 없다.
따라서, 노란색같은 부분은 돌아가지 않는 걸 뜻한다.
Single Cycle : Multiple Cycle : Pipeline 비교
● Pipeline하기 좋은 이유 → [ 실행 시간이 예측 가능 ]
- 모든 명령어의 길이가 같다. → 모든 명령어가 32비트로 통일되어 있기 때문에 (애초에 다른 비트를 배우질 않았음)
→ 32 비트로 같기 때문에 Instruction Fetch (IF) 에서 걸리는 시간이 항상 같다.
ex) 어떤 명령어는 32비트, 어떤 건 64, 어떤 건 16 이런 식이면 IF에서의 시간을 고정할 수가 없음 - 명령어가 format이 많지 않다. (5개 밖에 안 되어서?(질문하기) )
→ 명령어를 Decoding 하는데 걸리는 시간이 얼마 안 걸린다. - Memory 에 접근하는 건 Load 와 Store 만 있다.
만약 Memory에 접근하는 명령어들이 여러 가지 더 생기게 된다면 실행하는 데 걸리는 시간을 보장할 수가 없다.
(중간 단계들이 더 생길 것이기 때문에)
● Pipeline하기 어렵게 만드는 요소들
- Structure hazards : Memory 가 하나만 있는 경우
→ Instruction memory, Data memory 두 개가 합쳐져 하나로 있다고 하면 Pipeline을 하기가 힘들다.
이유 : IF에서 메모리에 access + MEM 단계에서도 메모리에 Access
이 상황은 돌림노래에 도돌이표가 있어 같은 구간을 부르는 두 사람(혹은 그 이상)이 생기는 느낌임.
이 때문에 Instruction memory, Data memory를 나누어서 사용함 - Data hazards : Instruction 간의 Dependency가 있는 경우
ex) 해당 Instruction을 실행하기 위해서는 이전 Instruction의 결과를 받아야 할 때
Pipeline은 이전 명령어가 끝나기 전에 그 다음 명령어를 실행하는 것인데
이전 명령어가 끝나야 다음 명령어가 실행되는 조건이 있는 경우에는 Pipeline을 하기가 어렵다. - Control hazards : 원래 명령어의 순서가 아니라 BEQ나 JUMP를 만나 멀리 떨어진 명령어로 넘어가는 경우
ex) 단체 줄넘기를 할 때, 내가 들어가려고 리듬타고 출발하는데
갑자기 내 다음다음 애가 후다닥 뛰어들어가는 상황.
정확히는 미리 내가 비집고 들어가서 작업중인데 순서 바뀌었으니 넌 작업 안 해도 된다. 너 다음다음 애로 바뀌었다. 하는 상황
- Single : 한 CLK에 할 거 다 할 수 있도록 모든 명령어들을 때려 박음.
- Multiple : 한 CLK에 한 작업씩 나누어서 하도록 쪼개놓음
- Pipeline : Multiple 요소에서 다른 작업들과 동시에 작업 가능.
- Single : 하드웨어 공유 X
- Multiple : ALU Memory 이런 거 같이 씀, 대신 Register 가 늘어남.
- Pipeline : 하드웨어 공유하다가 hazard 생길 수도 있음.
참고 : https://luv-n-interest.tistory.com/993
출처 : 한동대 SW 중심대학
'2학년 2학기 > 컴퓨터 구조' 카테고리의 다른 글
[ 컴퓨터 구조 ] 12. Pipeline 제어부 (Control) (0) | 2023.07.07 |
---|---|
[ 컴퓨터 구조 ] 11. Pipeline DataPath (0) | 2023.07.06 |
[ 컴퓨터 구조 ] 9. Pipeline (0) | 2023.07.05 |
[ 컴퓨터 구조 ] 8. (Multiple Cycle) Multiple Cycle 제어부 (Control Unit) (0) | 2023.07.05 |
[ 컴퓨터 구조 ] 7. (Multiple Cycle) 명령어별 Multiple Cycle 실행 (0) | 2023.07.05 |