[전자계산기구조] 명령어 파이프라인

[전자계산기구조] 명령어 파이프라인

컴퓨터에 있어서 파이프라인(pipeline)구조는 CPU의 처리속도를 향상시키기 위한 방법 중의 하나로서, CPU의 내부 하드웨어를 여러 단계로 나누어 처리하는 기술이다. 

벡터 프로세싱을 공간적인 병렬성이라 하면, 파이프라인은 시간적인 병렬성을 추구

한 번에 하나의 명령어만 실행하는 것이 아니라 하나의 명령어가 실행되는 도중에 다른 명령어의 실행을 시작하는 방법으로 동시에 여러 개의 명령어를 실행한다.

프로세서 하나를 서로 다른 기능을 가진 여러 개의 서브 프로세서로 나누어, 각 서브 프로세서가 동시에 서로 다른 데이터를 처리하는 과정이다.

명령어당 수행 사이클(CPI)를 1에 가깝도록 하여, CPU의 성능을 향상시키는 기법

파이프라이닝을 사용하는 CPU의 각 파이프라인 단계는 서로 다른 하드웨어 자원을 사용한다.

각 서브 프로세서의 작업을 단계(stage)라 하며 단계 수 만큼의 속도 향상을 목표로 하지만 파이프라인 해저드로 인해 실제는 단계 수 만큼의 속도 향상은 불가능하다.
ex) 4개의 파이프라인 스테이지를 갖는 CPU의 성능 향상은 최대 4배이다.

  • 전체 워크로드(workload)에 대해 일정시간에 처리할 수 있는 처리량(throughput)을 향상시킬 수 있다.
  • 가장 느린 파이프라이닝 단계에 의해 전체 시스템 성능 향상이 제약을 받는다.
  • 하나의 명령어를 수행하는 데 여러 클럭(clock) 사이클이 필요하다.


명령어 파이프라이닝 4단계

  1. 명령어 인출(IF : Instruction Fetch)
  2. 명령어 해독(ID : Instruction Decode)
  3. 주소부 인출(OF : Operand Fetch)
  4. 실행(EX : Execute)


명령어 파이프라인의 최대 효율 저하 원인

  1. 오퍼랜드를 인출할 필요가 없는 명령어도 파이프라인의 모든 단계를 거쳐야 한다.
  2. 4단계 파이프라이닝에서, 다른 명령어의 IF(명령 인출) 단계와 OF(주소부 인출) 단계가 동시에 실행하게 되어 기억장치 충돌이 발생한다.
  3. 조건 분기(conditional branch) 명령이 실행되어 미리 인출하여 처리하던 명령어들이 무효화 된다.


파이프라인 해저드의 유형

파이프라인 해저드는 실행시간을 낭비하게 되며 주어진 명령어를 실행하는 데 더 많은 시간이 걸리게 된다.
파이프라인 해저드는 여러 가지 발생 원인이 있지만 일반적으로 명령어 의존성(종속성), 데이터 의존성(종속성)에 의해 일어난다.
  • 명령어 종속성 : 명령어 실행 사이클에서 여러 개의 명령어가 파이프라인으로 수행될 경우에는 순차적으로 실행되는 경우와 다르다.
    파이프라인에서 명령어 수행 후 결과 값을 저장하지 않으면 다음 명령어가 그 값을 읽을 수 없다.
    이렇게 한 명령어가 수행한 결과 값을 다음 명령어가 사용할 수 없는 관계를 종속성이라 한다.
  • 데이터 종속성 : 명령어 소스 오퍼랜드가 이전의 명령어 수행 결과 값과 의존 관계가 있는 경우이다.
    현재의 명령어가 인출되어 수행하는 데 필요한 오퍼랜드는 이전의 명령어 수행 결과 값이 저장될 때까지 유효하지 않은 상태이다.

유형
  • 구조적 해저드(Structural Hazard)
발생 원인 : CC4 시점에서, Load 명령이 데이터 메모리 읽기를 수행하는것과, 명령어 3이 명령어 메모리에서 인출(fetch)을 수행하는 것 사이에서, 자원 충돌이 발생
    • 하드웨어가 여러 명령들의 수행을 지원하지 않기 때문에 발생 = 자원 충돌
    •  해결 방법 : 하드웨어 추가 , NOP(No - Operation) 사용

  • 데이터 해저드(Data Hazard)
발생 원인 : 이전 명령이 WB(Write Back) 단계에서, 레지스터 파일에 값을 반영하기 전에, 후속 명령이 그 값을 읽거나, 쓰려고 하는 경우에 발생
    • 명령의 값이 현재 파이프라인에서 수행 중인 이전 명령의 값에 종속
    • 해결 방법 : 데이터 종속성에 의해 어떤 명령어가 이전에 명령어에서 수행한 결과값을 사용한다면, 그때마다 정확한 값이 사용되는지 확인이 필요,
      하드웨어 데이터 포워딩, 소프트웨어 데이터 포워딩, 데이터 전방 전달

  • 제어 해저드(Control Harzard)
발생 원인 : 분기명령에서 분기가 결정되는 시점에 이미 파이프라인에 후속명령들이 채워져 있기 때문에
    • 분기(jump, bracnh 등) 명령어에 의해서 실행
    • 해결 방법 : 분기 예측, 지연 분기, 명령어 재배치, 분기 선계산, 명령어 선인출 


파이프라인 종류

단일 파이프 라인 & 슈퍼 파이프 라인 & 슈퍼 스칼라
이 세가지의 차이를 요약하자면 '병렬성이 얼마나 더 올라가냐'입니다.
세 방식 모두 동시에 수행할 명령어와 데이터는 의존성이 없어야 합니다.
단일 파이프 라인

슈퍼 파이프 라인(단계를 더 잘게 쪼개서 병렬성을 더 올림)
슈퍼 스칼라

슈퍼 파이프라인을 이용한 슈퍼 스칼라

출처

댓글

이 블로그의 인기 게시물

[Python] # -*- coding: utf-8 -*-를 쓰는 이유

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?