Instruction Pipelining

Always·2025년 6월 23일
2

매일메일

목록 보기
69/69
post-thumbnail

명령어 파이프라이닝

명령어 파이프라이닝은 CPU가 여러 명령어를 동시에 처리하기 위해,
각 명령어를 여러 단계로 분할하고 이 단계를 겹쳐서 실행하는 기법입니다.

전통적인 CPU는 한 번에 하나의 명령어만 처리하지만,
파이프라이닝 기법을 사용하면 여러 명령어를 각기 다른 단계에서 병렬로 처리할 수 있어 전체적인 처리 속도가 향상됩니다.


파이프라이닝 단계

일반적으로 명령어는 다음과 같은 단계로 실행됩니다:

  1. IF (Instruction Fetch): 명령어를 메모리에서 가져옴
  2. ID (Instruction Decode): 명령어 해석 및 레지스터 읽기
  3. EX (Execute): 연산 또는 주소 계산 수행
  4. MEM (Memory Access): 메모리 접근 (로드/스토어)
  5. WB (Write Back): 결과를 레지스터에 저장

파이프라이닝에서는 이 각 단계를 서로 다른 명령어가 동시에 수행할 수 있습니다.


파이프라인 위험 (Pipeline Hazard)

파이프라이닝은 성능을 향상시키지만, 다음과 같은 파이프라인 위험(Hazard)으로 인해 성능 저하가 발생할 수 있습니다.

1. 데이터 위험 (Data Hazard)

  • 정의: 명령어 간에 데이터 의존성이 있을 때 발생
  • 예시: 명령어 B가 명령어 A의 결과 레지스터 R을 사용해야 하는 경우
    A의 결과가 나오기 전 B가 실행되면 잘못된 값을 사용할 수 있음
  • 해결 방법: 포워딩(Forwarding), 스톨(Stall), 리오더링 등

2. 제어 위험 (Control Hazard)

  • 정의: 분기(branch)나 조건문으로 인해 다음 명령어가 무엇인지 확실하지 않을 때 발생
  • 예시: 분기문이 참인지 거짓인지 알기 전까지는 다음 명령어를 결정할 수 없음
  • 해결 방법: 분기 예측(Branch Prediction), 딜레이 슬롯(Delay Slot)

3. 구조적 위험 (Structural Hazard)

  • 정의: 두 명령어가 동시에 동일한 하드웨어 자원을 사용할 때 발생
  • 예시: ALU, 레지스터 파일, 메모리 등 자원이 겹칠 경우
  • 해결 방법: 자원 복제, 명령어 재배치, 스케줄링 등
profile
🐶개발 블로그

0개의 댓글