본문 바로가기

학교공부/컴퓨터구조

컴퓨터구조 15 - SuperScalar

오늘도 성능을 올리기 위해 달린다.

 

 

Superpipelining

superpipelining이란 기존의 pipeline보다 더 잘게 자르는거다.

기존의 pipeline 단점이 명령어 한 cycle에 못끝내면 밑에것도 같이 길어진다는 점이다.

만약 균일하게만 자를 수 있다면 자르는게 도움이 된다. 

delay time을 줄여 clock frequency를 올릴 수 있어서 성능 개선.

근데 균일하게 자르는데 한계가 있다. 균일하지 못하면 어차피 큰 거에 bound되서 자르나 마나임.

 

정리하자면

depth가 늘어나서 clock cycle이 짧아지긴하나

  1. depth가 깊어지니 forward/hazard hw가 더 필요하고
  2. stall이 더 생긴다. (만약 ALU가 반띵됐다고 치면 load같은거  forward로도 해결안되고 stall 생긴다)
  3. 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을 배우면 해결된다.!