공부 Note/컴퓨터 구조

Chapter 04 파이프라인과 벡터처리(4)

AmyG 2022. 2. 24. 10:27
반응형

Pipeline CPU의 성능 분석

   * 파이프라인 분기 예측

   * RISC Processor

   * 파이프라인 CPU 성능 분석

 

파이프라인 분기 예측

   * 명령어 파이프라인이 정상적인 동작에서 벗어나게 되는 요인

      - 자원 충돌 (Resource conflict) : 두 세그먼트가 동시에 메모리를 접근하려고 하는 데에서 기인한다 -> 명령어 메모리와 데이터 메모리를 분리함으로써 대부분 해결한다

      - 데이터 의존성 (data dependency) : 충돌은 어떤 명령어가 이전 명령어의 결과에 의존하여 수행되는데, 그 값이 아직 준비되지 않은 경우에 발생한다
      -
분기 곤란 (branch difficulty) : 분기 명령어같이 PC의 값을 변경 시키려는 명령어에 의해 발생한다

 

   * 데이터 의존성

      - 데이터나 주소의 충돌은 명령어 파이프라인의 성능을 저하 시키는 요인

         > 데이터 의존성 : 아직 준비되지 않은 데이터를 기다리는 경우

         > 주소 의존성 : 마이크로 연산 시 레지스터 간접모드를 사용하는 명령어는 이전 명령어가 주소 값을 메모리로부터 로드하는 명령어라면 곧바로 피연산자를 fetch하지 못하고 기다리게 된다

 

   * 분기 명령어의 처리

      - 조건 분기 또는 무조건 분기 등은 처리 여하에 따라 파이프라인의 정상적인 프로그램 순서를 바꾸어 버리기 때문에 파이프라인 시스템을 채택하고 있는 컴퓨터의 성능을 저하시키는 주 요인으로 간주되고 있다

         > 순차적으로 처리될 명령어를 분기의 목표가 되는 명령어와 함께 저장하는 방법

         > 분기 목표 버퍼(branch target buffer, BTB)의 사용 : fetch 세그먼트에 속해 있는 associative memory : 이전에 실행된 분기 명령어와 분기 목표 명령어를 저장하여 활용(loop buffer - 일종의 레지스터)

   ※ associative memory(어소시에이티브 메모리) : 주소가 아닌 내용에 의해 검색이 가능한 기억장치

      - 실제 다양한 프로그램의 실행 결과를 분석한 결과 참조의 시간적 지연성과 유사하게 일부 명령어들은 반복 수행되며 반복 실행시에는 규칙성을 갖는다

      - 이러한 예측 기법을 이용하여 분기 및 적재 명령어가 참조하는 오퍼랜드도 반복 참조 시 규칙성을 갖고 있으며 이를 이용할 경우 명령어 fetch 과정에서 신속하게 오퍼랜드의 제공 및 fetch가 수월해 질 수 있다 다만 예측실패시 지불해야 할 패널티(시간 지연)가 있을 수 있다

 

RISC Processor

   * RISC 프로세서의 설계목표

      - 실행 명령어 수는 증가 하더라고 작업 처리 시간의 감소가 가능하다

      - 명령어당 실행 클록 수(CPI)와 클록 주기를 파이프라인 구조를 이용하여 감소시킬 수 있다

  
   * RISC
프로세서의 구조적 특징

      - 명령어의 1 사이클 실행을 위한 파이프라인 구조, 메모리 참조를 위한 온칩 캐쉬(CPU내 메모리 구현, 명령어 캐쉬, 자료 캐쉬로 구성)

      - 간단한 명령 코드와 주소 지정 모드 및 하드와이어 적 제어 장치

      - 신속한 오퍼랜드 참조/문맥 전환을 위한 레지스터 집합 (중첩된 레지스터 윈도우)

      - 실수 연산의 별도 처리를 위한 코프로세서(Co-processor)

 

   * RISC 파이프 라인

      - 명령어 사이클은 세 개의 부연산으로 나뉘어 다음과 같은 세 세그먼트로 구성

         > I : 명령어의 fetch

              >  A : ALU의 동작

         > E : 명령어의 실행

파이프라인 CPU 성능 분석

   * 이론적으로는 명령어 세그먼트의 횟수가 많아질수록 파이프라인의 이론적 최대 속도가 증가할 것으로 분석 되었으나 실제 상황은 그렇게 단순하지 않다

      - 모든 명령어는 동일한 처리 과정(세그먼트의 적용)으로 처리되어야 한다

      - 파이프라인을 구성하는 각 단계의 처리 시간이 일정해야 한다

      - 모든 명령어는 작성된 순서에 따라 순차적(분기 명령, 함수 호출, 반환 명령 등에 의해 순차성이 깨짐)으로 실행되어야 한다

      - 사용 명령어들 사이에는 상호 의존성이 없어야 한다

      - 명령어들 처리 시 공유 자원의 충돌이 없어야 한다

 

출처 : 제로베이스

반응형