슈퍼스칼라

rin12·2020년 11월 14일
0

CSW

목록 보기
9/12

슈퍼스칼라란?

: CPU 내에 파이프라인을 여러 개 두어 여러 명령어를 동시에 실행하는 기술

※ 파이프라인이란? 한 데이터 처리 단계의 출력이 다음 단계의 입력으로 이어지는 형태로 연결된 구조

슈퍼스칼라 VS 파이프라이닝

위 사진과 같이 슈퍼스칼라는 동시에 두 명령어에 대해 같은 동작을 할 수 있습니다.




슈퍼스칼라는 동시에 실행하기 때문에 처리 속도가 빠릅니다.

6개의 명령어를 실행하는 동작을 나타낸 구조입니다.
파이프라이닝은 6개의 명령어를 처리하는데 시간 9가 걸리지만 슈퍼스칼라는 동시에 두 명령어를 같은 동작을 할 수 있기 때문에 시간 6이 걸려서 처리 속도가 빨라진 걸 확인할 수 있습니다.




하지만 병렬로 처리할 수 있는 명령어가 없는 경우에는 슈퍼스칼라를 써도 효과를 기대할 수 없습니다. 그렇기 때문에 슈퍼스칼라에서는 제약 사항이 존재합니다.


1) 데이터 의존성

2) 자원 의존성

3) 프로시저 의존성





데이터 의존성

다음 주소 명령어들이 동시에 실행되거나 실행 순서가 바뀌면 안 됩니다.

ADD R1, R2, R3 ··· R2와 R3을 더해서 R1에 저장
DIV R2, R4, R5 ··· R1를 R5로 나누어 R4에 저장

레지스터 값이 R1 = 6, R2 = 1, R3 = 3, R5 = 2
들어올 때, 두 명령어를 순차적으로 실행하면
1 + 3 => R1 = 4, 4 / 2 => R4 = 2이 되지만 실행 순서를 바꿔서 실행한다면
6 / 2 => R4 = 3, 1 + 3 => R1 = 4
다음과 같이 잘못된 결과가 R4에 저장 됩니다.




이렇게 첫번째 명령어에 의해 값이 정해지는 데이터를 두번째 명령어에서 읽게 되는 경우에는 두 명령어를 실행 순서가 변경되면 안 되는 이러한 성질을 순수 데이터 의존성이라 합니다.




아래의 예에서도 동시에 실행되거나 실행 순서가 바뀌어서는 안 됩니다.

ADD R1, R2, R3 ··· R2와 R3를 더해서 R1에 저장
DIV R2, R4, R5 ··· R4를 R5로 나누어 R2에 저장

레지스터 값이 R2 = 4, R3 = 1, R4 = 6, R5 = 3 이와 같이 들어올 때, 순차적으로 실행한다면 4 + 1 => R1 = 5, 6 / 3 => R2 = 2
하지만 순서를 바꾼다면 6 / 3 => R2 = 2, 2 + 1 => R1 = 3이라는 잘못된 결과가 저장됩니다.




이렇게 첫번째 명령어에 의해 읽혀진 데이터를 두 번째 명령어에서 값을 변경하는 경우에는 실행 순서가 변경되서는 안 되는데 이러한 성질을 반의존성이라고 합니다.




자원 의존성

DIV R3, R1, R2 ··· R1을 R2로 나누어 R3에 저장한다.
DIV R6, R4, R5 ··· R4를 R5로 나누어 R6에 저장한다.

두 명령어는 모두 나누기 연산 장치라는 같은 자원을 요구하기 때문에 동시에 실행될 수 없습니다.

이러한 성질을 자원 의존성이라고 합니다. 자원 의존성은 같은 자원을 동시에 사용하고자 할 때 생기는 것으로 다음 예가 해당됩니다.




프로시저 의존성

분기 명령어에 의해 생기는 것으로 분기 명령어와 바로 다음에 있는 명령어는 동시에 실행될 수 없다. 분기 명령어의 다음 명령어는 분기 명령어의 실행이 종료될 때까지 실행되서는 안 된다.

※ 분기 명령어란? 조건 코드가 0이면 지정 주소 번지로 분기하라는 명렁어

0개의 댓글