명령어 파이프라인
- 명령어 인출 → 명령어 해석 → 명령어 실행 → 결과 저장
- 단계가 겹치지만 않는다면 CPU는 각 단계를 동시에 실행할 수 있다.
- 예를 들어 CPU는 한 명령어를 ‘인출’하는 동안에 ‘실행’을 할 수 있고, 실행을 하는 중에는 ‘저장’을 할 수 있다.

- 그림으로 나타내면 이러하다
- 명령어를 겹쳐서 수행하면 명령어를 하나하나 실행하는 것보다 더 효율적으로 처리를 할 수 있다.
- 이렇게 파이프라인에 넣고, 동시 처리하는 기법을 명령어 파이프라인 기법이라고 한다.
파이프라인 위험
- 파이프 라인을 통해서 일을 병렬처리 하면 빠르게 처리할 수는 있지만 3가지 위험이 있다.
데이터 위험
- 데이터 위험은 명령어 간 데이터 의존성 때문에 발생하게 된다.
- 예를 들어 명령어1, 명령어2가 있다고 해보자
- 명령어2는 명령어1이 끝나야 실행이 가능하다.
- 따라서 명령어 1 실행이 끝나기 전에 명령어 2를 인출하면 원치 않는 값이 출력되므로 명령어2는 명령어1에 의존한다고 볼 수 있다.
- 따라서 의존적인 두 명령어를 동시에 실행하는 것은 파이프라인이 제대로 작동하지 않을 수 있다.
제어위험
- 분기 여부가 결정되기 전에 파이프라인이 다음 명령어를 잘못 가져오면 문제 발생
구조적 위험
- 하드웨어 자원이 부족해서 명령어들이 동시에 실행될 수 없는 경우
- 하나의 메모리를 명령어 fetch와 데이터 read/write가 동시에 사용하려고 할 때 충돌
비순차적 명령어 처리
- 순차적 명령어 순서와 달리, 의존성이 없는 명령어를 먼저 실행함으로써 파이프라인 정지를 방지하고 CPU 자원을 효율적으로 활용하는 기법
- 파이프라인 구조에서는 어떤 명령어가 데이터를 기다리거나 메모리 접근 때문에 지연되면, 뒤에 있는 명령어들까지 멈추는 일이 생긴다.
- 이런 스톨을 방지하고 성능을 유지하기 위해 등장한 기술이 비순차적 실행
- 의존성이 있는 명령어는 기다리고, 독립적인 다른 명령어를 먼저 실행한다.
Reference
https://m.yes24.com/Goods/Detail/111378840