명령어 파이프라인
명령어를 동시 처리하는 기법을 명령어 파이프라이닝(Instruction Pipelining)이라고 함.
아래 그림과 같이 명령어를 겹쳐서 실행하는 것 (하나가 끝날 때까지 기다렸다 다른 하나를 실행하는게 X)
명령의 단계가 겹치지만 않으면 CPU는 명령어를 동시에 실행할 수 있음
명령어 파이프라이닝은 어떤 경우 성능 향상에 실패하기도 하는데 그 유형은 아래와 같음
- 데이터 위험: 어떤 명령어가 다른 명령어의 결과 값 등에 의존하는 경우
- 제어 위험:
- 분기 등으로 인해 프로그램 카운터에 갑작스러운 변화가 발생하는 경우
- 프로그램 카운터는 기본적으로 바로 다음 명령을 내려야 하는데, 만약 한 명령어가 끝에 바로 다음 주소가 아닌 훨씬 멀리 떨어진 주소의 명령어를 실행시키는 경우.
- 분기 예측을 통해 이를 해결할 수 있음
- 구조적 위험: 서로 다른 명령어가 CPU 자원을 한꺼번에 동시에 사용하려고 하는 경우. 자원 위험이라고도 부름
슈퍼스칼라
현대 CPU의 경우 파이프라인을 여러 개 사용함. 즉, 한 번에 여러 개의 명령어를 동시에, 그리고 겹쳐서 실행. 이렇게 다수의 명령어 파이프라인이 CPU안에 들어 있는 구조를 슈퍼스칼라라고 부름. 그리고 이 슈퍼스칼라 구조로 명령어 처리가 가능한 CPU를 슈퍼스칼라 프로세서 혹은 슈퍼스칼라 CPU라고 부름.
비순차적 명령어 처리 기법
어쨌거나 명령어 파이프라이닝이나 슈퍼스칼라 구조 모두 명령어를 순차적으로 처리하는 것을 목표로 함. 내가 a 명령어를 내리고, 그 다음 b 주소에 있는 명령어를 하라고 시키면 a -> b 순서로 처리하는 것. 그런데, 이렇게 되면 어쨌거나 어느 순간까지는 비효율적으로 기다려야 하는 순간이 왔음. 예를 들어 바로 위 예시에서 명령어 1, 2가 저장되어야 명령어 3, 4이 실행될 수 있다고 생각해보면 쉬움.
비순차적 명령어 처리 기법은 명령어 간 의존성이 없는 독립적인 명령어를 먼저 실행해서 명령어 파이프라인을 효율화하는 기법을 말함.
'CS' 카테고리의 다른 글
보안, 인증, 인가를 위한 최소한의 개념잡기 (feat. 해시, 디지털 서명, PKI) (0) | 2023.10.05 |
---|---|
[혼공컴운] 스레드 (0) | 2023.04.11 |
[혼공컴운] 프로세스 상태와 계층 구조 (0) | 2023.04.07 |
[혼공컴운] 빠른 CPU를 위한 설계 기법 (0) | 2023.04.04 |
[혼공컴운] 명령어 사이클과 인터럽트 (0) | 2023.03.31 |