오늘도 성능을 올리기 위해 달린다.
Superpipelining
superpipelining이란 기존의 pipeline보다 더 잘게 자르는거다.
기존의 pipeline 단점이 명령어 한 cycle에 못끝내면 밑에것도 같이 길어진다는 점이다.
만약 균일하게만 자를 수 있다면 자르는게 도움이 된다.
delay time을 줄여 clock frequency를 올릴 수 있어서 성능 개선.
근데 균일하게 자르는데 한계가 있다. 균일하지 못하면 어차피 큰 거에 bound되서 자르나 마나임.
정리하자면
depth가 늘어나서 clock cycle이 짧아지긴하나
- depth가 깊어지니 forward/hazard hw가 더 필요하고
- stall이 더 생긴다. (만약 ALU가 반띵됐다고 치면 load같은거 forward로도 해결안되고 stall 생긴다)
- linear하지 않다. balance있게 자르기 힘듬.
Superscalar
그래서 나온게 Superscalar 그냥 hw늘려서 명령어 여러개 가져와서 같이하자는 거임. 언듯보면 멀티프로세싱이랑 비슷해보이지만 다르다. 멀티 프로세서는 각 프로세서마다 각자의 PC를 갖고있는 반면 superscalar는 결국 같은 프로세스 이므로 같이 진행한다.
근데 언듯보면 별로 좋아보이지 않음 왜냐하면
문제
대충 생각해봐도 data, control, structural에서 문제생길게 뻔히 보인다. 그럼 왜 쓸까? 다음에 배우는 multi threading 접목 시키면 쓸만해진다.
실행 순서도 바꿔보자
그전에 배우면 좋은거
Instruction-issue : ALU에 명령어를 넣는 타이밍, 시점, 행위
Instruction-completion : ALU에서 명령어가 끝나는 시점, 행위
Instruction-commit : register file에 write back 하는거
In-order : 순서대로
Our-of-Order : 마음대로
In-order issue with out-of-order completion : 순서대로 들어가서 맘대로 나오는거
example
요건 inorder-inorder이다.
in-Order inssue in-Order completion하기 때문에 순서대로 들어오거나 끝나야됨. 동시는 돼도 먼저는 안된다.
I1이 2clock짜리 execution이라도 I2가 먼저 끝나면 안됨. 따라서 1 clock을 쉰다.
또 I3부터는 동일한 excution unit을 사용하기 때문에 EX도 밀리고있다. 암튼 손해임
이걸 In-order out-of-order로 바꾸면?
한 cycle 벌었다
그럼 둘다 out-order로 하면
2사이클 벌었다.
issue와 completion 순서 자유롭게하니 명령어 끝나는 시점이 각각이다.
그럼 문제는 없을까?
전에 data hazards에서 3가지 data-dependence를 배웠다. mips인 경우에는 in-order이라 True data dependency 문제밖에 안생겼었다(RAW) (forward로 해결)
근데 out-of-order 관점에서는 3개의 명령어가 동시에 fetch되는 경우를 생각해보자.
만약 1, 3 line 순서 바뀌면 당연히 결과가 이상해진다. 전에 고려하지 못했던 output dependency 와 anti dependency 고려해줘야한다.
Anti와 output dependency 해결해보자
true dependency는 순서 못 바꾸고 forwarding 해야됨
근데 나머지 anti와 output dependency인 경우 Register renaming을 통해서 해결 가능하다. 따라서 순서 바꾸기 가능.
요약
SuperScalar 좋아보이긴한데 단점이 더 보인다. Data dependency는 어느정도 해결이 된다.
그럼 나머지 control, structural hazard는? 다음에 multi threading을 배우면 해결된다.!
'학교공부 > 컴퓨터구조' 카테고리의 다른 글
컴퓨터구조 17 - SMT (0) | 2020.06.17 |
---|---|
컴퓨터구조 16 - Multithreading (1) | 2020.06.17 |
컴퓨터구조 - 14(Predicated execution, Loop Unroll) (0) | 2020.06.17 |
컴퓨터구조 13 - Branch Prediction (0) | 2020.06.16 |
컴퓨터구조 12 - Branch Prediction (0) | 2020.06.15 |