[컴퓨터 구조] 명령어 병렬 처리 기법 (명령어 파이프라이닝, 슈퍼스칼라, 비순차적 명령어 처리 기법)

2025. 1. 3. 22:15·CS

빠른 CPU를 만들기 위해서는 높은 클럭 속도, 멀티코어 (Multicore), 멀티스레드 (Multithreading) 외에도 CPU가 효율적으로 작업을 수행하도록 하는 명령어 병렬 처리 기법이 중요하다. 이를 통해 CPU는 대기 시간을 줄이고 효율적인 연산을 할 수 있다.

 

1. 명령어 파이프라이닝 (Instruction Pipelining)

  • CPU의 명령어 처리 과정에서 각 단계를 분리하여 명령어 파이프라인 (Instruction Pipeline) 에 넣어 동시에 처리할 수 있도록 하는 기법
  • 일반적인 명령어 처리 과정 :
    1. 명령어 인출 (Instruction Fetch)
    2. 명령어 해석 (Instruction Decode)
    3. 명령어 실행 (Instruction Execute)
    4. 결과 저장 (Write Back)
  t0 t1 t2 t3 t4 t5 t6
명령어 1 인출 해석 실행 저장      
명령어 2   인출 해석 실행 저장    
명령어 3     인출 해석 실행 저장  
명령어 4       인출 해석 실행 저장
명령어 5         인출 해석 실행
명령어 6           인출 해석
명령어 7             인출

 

파이프라인 위험 (Pipeline Hazard)

1️⃣ 데이터 위험 (Data Hazard) 

  • 명령어 간 데이터 의존성에 의해 발생
  • 예) 명령어 1이 실행되어야만 명령어 2를 실행할 수 있는 경우
명령어 1 : R1 에 R2 + R3 를 저장
명령어 2 : R4 에 R1 + R5 를 저장

 

2️⃣ 제어 위험 (Control Hazard)

  • 프로그램 카운터 (PC) 의 갑작스러운 변화로 발생
  • 예) 분기 명령어로 인해 프로그램 흐름이 바뀔 때 이전에 불러온 명령어들이 무용지물 되는 상황
  • 이를 해결하기 위한 기술 중 하나가 분기 예측 (Branch Prediction)

 

3️⃣ 구조적 위험 (Structural Hazard)

  • 여러 명령어가 동시에 같은 CPU 자원을 사용하려고 할 때 발생
  • 예) ALU나 레지스터와 같은 자원을 동시에 여러 명령어가 요구할 때
  • 자원 위험 (Resource Hazard) 라고도 부른다.

 

2. 슈퍼스칼라 (Superscalar)

  • CPU 내부에 여러 개의 파이프라인을 포함하여 한 클럭 주기 내에 여러 명령어를 동시에 처리할 수 있는 구조
  • 이를 통해 CPU는 병렬 처리가 가능하고 이론적으로는 파이프라인 수에 비례하여 성능 향상
  • 파이프라인 위험 등으로 인해 실제 성능 향상은 적을 수 있다.
  • 이 구조로 명령어 처리가 가능한 CPU를 슈퍼스칼라 프로세서 (Superscalar CPU, 슈퍼스칼라 CPU) 라고도 부른다.
    • 다양한 명령어를 동시에 인출하고 실행할 수 있는 능력을 갖추고 있어 더욱 효율적인 명령어 처리 가능
    • 파이프라인 위험을 방지하려면 고도의 설계 필요

 

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

  • 명령어를 순차적으로 처리하지 않고 순서를 바꾸어 실행하는 기법
  • 한 명령어가 이전 명령어의 결과를 기다리고 있을 때, 다른 명령어를 실행하여 파이프라인의 공백 제거
<예시>
명령어 1 : 메모리[100] = 1
명령어 2 : 메모리[101] = 2
명령어 3 : 메모리[102] = 메모리[100] + 메모리[101]
명령어 4 : 메모리[150] = 1
명령어 5 : 메모리[151] = 2
명령어 6 : 메모리[152] = 3
  • 명령어 2가 끝난 후에 명령어 3을 실행할 수 있음 → 명령어 3과 명령어 6의 위치를 바꿔도 문제가 없음 → 순서를 바꿔서 파이프라인 멈추는 것을 방지
  • CPU가 명령어 간의 데이터 의존성을 분석하고, 실행할 수 있는 명령어들의 순서를 조정

'CS' 카테고리의 다른 글

[컴퓨터 구조] CISC와 RISC  (0) 2025.01.03
[컴퓨터 구조] 빠른 CPU를 위한 설계 기법 (클럭, 코어, 멀티코어, 스레드, 멀티스레드)  (3) 2025.01.03
[컴퓨터 구조] CPU의 작동 원리  (1) 2025.01.02
[컴퓨터 구조] 명령어의 구조와 오퍼랜드 필드의 주소 지정 방식  (0) 2024.12.26
[컴퓨터 구조] 컴퓨터의 구성  (2) 2024.12.26
'CS' 카테고리의 다른 글
  • [컴퓨터 구조] CISC와 RISC
  • [컴퓨터 구조] 빠른 CPU를 위한 설계 기법 (클럭, 코어, 멀티코어, 스레드, 멀티스레드)
  • [컴퓨터 구조] CPU의 작동 원리
  • [컴퓨터 구조] 명령어의 구조와 오퍼랜드 필드의 주소 지정 방식
하늘☁️
하늘☁️
개발일지, 학습, 스터디 기록 남기는 블로그 ☁️
  • 하늘☁️
    구름일지
    하늘☁️
  • 전체
    오늘
    어제
    • 분류 전체보기 (51)
      • Java (3)
      • SQL (5)
      • 알고리즘 (31)
      • TIL (4)
      • CS (6)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    학습일지
    dna 비밀번호
    코딩테스트
    boj5427
    제로베이스백엔드스쿨초단기취업반
    db
    명령어파이프라인
    boj1377
    상속
    mysql
    제로베이스백엔드스쿨
    회고
    알고리즘
    백준
    충돌위험 찾기
    java
    TIL
    CS
    비순차적명령어처리기법
    boj12891
    정적블록
    pccp 기출문제 3번
    프로그래머스
    코딩테스트연습
    컴퓨터구조
    스터디기록
    cpu의작동원리
    코딩테스트입문
    boj10986
    제로베이스부트캠프
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
하늘☁️
[컴퓨터 구조] 명령어 병렬 처리 기법 (명령어 파이프라이닝, 슈퍼스칼라, 비순차적 명령어 처리 기법)
상단으로

티스토리툴바