슈퍼스칼라

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색

슈퍼스칼라(superscalar)는 CPU 내에 파이프라인을 여러 개 두어 명령어를 동시에 실행하는 기술이다. ILP를 최대한 적용하여 실행하면 CPU 처리 속도가 빨라진다. 파이프라인이 하나라면 얻을 수 있는 최대 1사이클에 하나의 명령어만 완료할 수 있었다. 다시 말해 IPC가 1이었는데 이 값을 높이려면 파이프라인을 여러 개 두어 명령어를 동시에 실행시켜야 한다. 파이프라인이 2개라면 이상적으로 시퀸스마다 최대 2 개의 명령어가 투입과 완료 가능해져 IPC=2가 된다. 보통 슈퍼스칼라 프로세서는 동시에 투입/완료가 가능한 명령어 개수에 따라 N-이슈, N-와이드(wide), N-웨이(way) 슈퍼스칼라라고 표현한다. 이상적으로는 N개의 명령어를 읽어 파이프 라인에 넣을 수 있지만(fetch), 실제로는 명령어 캐시의 제약, 명령어 사이의 의존성, 분기문 때문에 N개보다 작은 명령어만 넣을 수 있을 때가 일방적이다.

데이터 종의성, 자원 의존성, 프로시저 의존성이 존재하는 경우에는 동시에 실행되어서는 안 된다.

데이터 의존성[편집]

  • ADD R1, R2, R3 : R2와 R3를 더해서 R1에 저장한다.
  • DIV R4, R1, R5 : R1을 R5로 나누어서 R4에 저장한다.

다음과 같은 값이 주어질 때

R1 = 8
R2 = 1
R3 = 3
R5 = 2

두 명령어를 순차적으로 실행하면 다음과 같으며

R1 = 4
R4 = 2

실행 순서를 바꿔 실행하면 다음과 같이

R1 = 4
R4 = 4

R4에 잘못된 결과가 저장된다.

첫 번째 명령어에 의해 값이 정해지는 데이터를 두 번째 명령어에서 읽게 되는 경우에는 두 명령어의 실행 순서가 변경되어서는 안 되며, 이것을 'READ AFTER WRITER 의존성'이라고 한다.