명령어를 처리할때 한번에 하나씩 순차적으로 처리하는 것이 아니라 명령어가 처리되는 도중에 다른 명령어의 처리를 시작하는 방식으로 동시에 여러개의 명령어를 처리해 처리량을 올리는 것입니다.
동일 시간에 더 많은 명령어를 처리할 수 있는 것이지 동작 속도를 증가시키는 것은 아닙니다.
이때 처리시간과 처리단계가 균등하지 않아서 ‘해저드’ 라는 오류가 발생할수 있습니다.
해저드
해저드란 파이프라이닝에서 나타나는 문제점을 뜻합니다. 명령어의 처리시간과 처리단계가 균등하지 않아서 발생합니다.
해저드의 종류는 구조적 해저드, 데이터 해저드, 제어 해저드로 나뉩니다.
구조적 해저드구조적 해저드는 하나의 자원을 여러개의 명령어에서 동시에 사용하려 할 때 발생합니다. 구조적 해저드를 해결하기 위해서는 데이터 처리와 명령어 처리를 동시에 할 수 있게 자원을 추가하거나 명령어 처리를 지연시켜서 해결합니다.
데이터 해저드데이터 해저드는 이전 명령어의 결과값이 다음 명령어의 입력으로 사용될 경우 발생합니다. 이를 해결하기 위해 결과를 저장하기 전에 다음 명령어를 입력으로 넣어줘서 해결하거나 이전 명령어의 값이 저장되기 전까지 기다렸다가 진행하는 방식을 사용합니다.
제어 해저드제어 해저드는 분기처리시 다음 명령어가 어떤 것인지 특정하지 못하기 때문에 발생합니다. 이를 해결하기 위해 분기 처리에 영향을 받지 않는 명령어를 우선 수행하거나 명령어 분기를 예측하여 명령어를 수행하거나 지연시키는 방법으로 해결합니다. 👉분기를 예측하는 방법은 항상 하나의 결과를 예측하는(True or False) 정적 예측이나 이전의 분기를 기록해두고 이를 바탕으로 예측하는 동적예측 2가지가 있습니다.