명령어 병렬 처리 기법

컴퓨터 구조

목록 보기
12/20

명령어 병렬 처리 기법 요약


1. 명령어 파이프라인 (Instruction Pipeline)

(1) 개념

  • CPU가 시간을 효율적으로 사용하여 명령어를 빠르게 처리하는 방법.

  • 하나의 명령어를 실행할 때 4가지 단계로 나누어 진행:

    1. 인출 (Fetch): 메모리에서 명령어를 가져옴.
    2. 해석 (Decode): 명령어를 분석하여 실행할 준비.
    3. 실행 (Execute): 연산을 수행.
    4. 저장 (Write-back): 연산 결과를 저장.
  • 동시에 실행 가능: 각 단계가 서로 겹치지만 않으면, 여러 개의 명령어를 동시에 실행할 수 있음.

(2) 효과

  • CPU의 성능을 향상시킴.
  • 예를 들어, 한 명령어를 실행하는 동안 다음 명령어를 해석하고, 또 다음 명령어를 인출하는 방식으로 CPU의 자원을 낭비하지 않음.

(3) 한계: 파이프라인 위험 (Pipeline Hazard)

  • 명령어 파이프라인이 항상 성능을 향상시키는 것은 아님.
  • 파이프라인 위험(Pipeline Hazard)이 발생할 수 있음.

1) 데이터 위험 (Data Hazard)
  • 이전 명령어의 실행 결과가 필요한데, 아직 실행이 완료되지 않은 경우.

  • 예:
    ADD R1, R2, R3  ; R1 = R2 + R3
    SUB R4, R1, R5  ; R4 = R1 - R5 (R1의 값이 아직 없음)
  • 해결법: 데이터 포워딩(Data Forwarding) 또는 명령어 지연(Instruction Stall)

2) 제어 위험 (Control Hazard)
  • 프로그램 실행 중 점프(Branch) 명령어가 발생하여 실행 흐름이 변경되는 경우.

  • 예:
    JUMP 60  ; 60번지로 이동 (이미 인출된 명령어가 무효화됨)
  • 해결법: 분기 예측(Branch Prediction) 기법 사용.
3) 구조적 위험 (Structural Hazard)
  • 두 개 이상의 명령어가 같은 CPU 자원(ALU, 메모리 등)을 동시에 사용하려고 할 때 발생.


2. 슈퍼스칼라 (Superscalar)

  • 여러 개의 파이프라인을 두는 기법.
  • 여러 개의 명령어를 동시에 병렬로 처리할 수 있음.

  • 예:
    • 1개 파이프라인: 1개 명령어 처리
    • 2개 파이프라인: 2개 명령어 동시 실행
    • 4개 파이프라인: 4개 명령어 동시 실행

(1) 효과

  • 성능 향상: 한 사이클에 여러 개의 명령어를 실행할 수 있음.
  • 멀티스레드 CPU와 연계 가능: 예를 들어, 8코어 16스레드 CPU는 여러 개의 파이프라인을 가질 수 있음.

(2) 한계

  • 파이프라인 개수가 많아질수록 파이프라인 위험도 증가.
  • 실질적인 성능 향상은 파이프라인 개수에 비례하지 않음.

3. 비순차적 명령어 처리 (Out-of-Order Execution, OoOE)

  • CPU가 명령어를 순차적으로 실행하지 않고, 실행할 수 있는 명령어를 먼저 처리하는 방식.

(1) 개념

  • 기본적으로 CPU는 메모리에 저장된 명령어를 순서대로 실행함.
  • 하지만 의존성이 없는 명령어는 순서를 바꿔서 먼저 실행할 수 있음.
  • 예:
    MOV [100], 1
    MOV [101], 2
    ADD [102], [100], [101]  ; 100번지, 101번지 값이 필요
    • 3번째 명령어는 앞의 연산이 끝나야 실행 가능.
    • 순서를 조정하면 실행 속도가 향상됨.

(2) 효과

  • CPU의 유휴 시간을 줄이고, 명령어 실행을 최적화할 수 있음.
  • 파이프라인 중단을 방지하여 성능을 향상.

(3) 한계

  • 명령어 간의 의존성을 고려해야 함.
  • 일부 명령어는 순서를 바꿀 수 없음:
    ADD R1, R2, R3  ; R1 = R2 + R3
    SUB R4, R1, R5  ; R4 = R1 - R5 (R1이 필요함)
    • 이 경우 순서를 변경하면 오류 발생.

4. 전체 요약

기법개념장점한계
명령어 파이프라인여러 명령어를 겹쳐서 실행성능 향상파이프라인 위험 발생 가능
슈퍼스칼라여러 개의 파이프라인 사용한 사이클에 여러 명령어 실행 가능관리 복잡, 파이프라인 위험 증가
비순차적 명령어 처리실행 가능한 명령어를 먼저 처리CPU 유휴 시간 최소화명령어 의존성 고려 필요

5. 결론

  • CPU의 성능을 향상시키기 위해 병렬 처리 기법이 필수적.
  • 명령어 파이프라인을 기본으로 하며, 더 나아가 슈퍼스칼라, 비순차적 명령어 처리 등의 기술을 활용.
  • 그러나 각 기법에는 단점과 한계가 있으며, 이를 극복하기 위한 기술이 지속적으로 발전하고 있음.

최종 정리

  • CPU 성능 최적화를 위해 다양한 병렬 처리 기법을 사용함.
  • 명령어 파이프라인 → 슈퍼스칼라 → 비순차적 명령어 처리 순으로 발전.
  • 현실적으로는 다양한 기술을 조합하여 성능을 높임.

이 강의 내용을 이해하면 현대 CPU의 구조와 성능 최적화 방식을 확실히 파악할 수 있습니다! 😊

0개의 댓글