명령어 파이프라이닝에 대해서 설명해 주세요.
분야: 백엔드
명령어 파이프라이닝(instruction pipelining) 은 CPU가 여러 명령어를 동시에 처리하기 위해 각 명령어를 여러 단계로 분할하고, 각 단계를 다른 명령어와 겹쳐서 실행하는 방법입니다. 전통적인 CPU는 한 번에 하나의 명령어를 처리하는 반면, 파이프라인 기법을 사용하는 CPU는 여러 명령어를 각기 다른 단계에서 동시에 처리할 수 있습니다.
![]()
출처 : 위키 백과
파이프라인 위험에 대해서 알고 계시나요?
파이프라이닝은 높은 성능을 가져오지만, 때로는 성능 향상에 실패하기도 하는데요. 이를 파이프라인 위험(pipeline hazard) 이라고 합니다. 파이프라인 위험에는 크게 데이터 위험, 제어 위험, 구조적 위험이 존재합니다.
- 데이터 위험(data hazard) 이란 데이터 의존적인 두 명령어를 동시에 실행하는 경우, 파이프라인이 제대로 작동하지 않는 것을 의미합니다. 예를 들어, 명령어 B가 명령어 A의 연산 결과인 R에 의존하는 경우, 명령어 A의 결과 저장 단계가 완료되어야 명령어 B가 R을 사용할 수 있습니다.
- 제어 위험(control hazard) 이란 분기(branch)나 조건문 등으로 인해 다음에 실행할 명령어가 무엇인지 결정되지 않아 파이프라인이 멈추게 되는 것을 의미합니다. 분기 예측 기법이 사용되기도 하지만, 예측에 실패하면 계산된 파이프라인은 모두 버려야 해서 성능 저하가 발생합니다.
- 구조적 위험(structural hazard) 이란 한 명령어가 자원을 사용하면, 해당 자원이 필요한 다른 명령어는 멈추게 되어 파이프라인이 제대로 작동하지 않는 것을 의미합니다. 서로 다른 명령어가 동시에 ALU, 레지스터와 같은 CPU 자원을 사용하려 할 때 발생합니다.