이 영역을 누르면 첫 페이지로 이동
butter_shower 블로그의 첫 페이지로 이동

butter_shower

페이지 맨 위로 올라가기

[병렬 처리] 슈퍼스칼라 프로세서 - 명령어 발송 정책과 레지스터 재명명

butter_shower

[병렬 처리] 슈퍼스칼라 프로세서 - 명령어 발송 정책과 레지스터 재명명

  • 2019.06.20 08:33
  • Computer Engineering/병렬 처리(Parallel Processing)
글 작성자: _rian
명령어-수준 병렬성 (Instruction - level prallelism)

명령어들이 서로 독립적이어서 동시에 실행될 수 있는 상태

하드웨어 병렬성 (H/W parallelism, machine parallelism)

실제 명령어들을 병렬로 실행하는 데 사용될 수 있는 하드웨어 능력


하드웨어 자원의 이용률 저하 원인

1. 데이터 의존성

(1) 흐름 의존성 (flow dependence)

어떤 명령어를 실행하기 위해서는 앞의 다른 명령어의 실행 결과를 이용해야 하는 상황 
-> 두 명령어는 반드시 순차적으로 실행되어야 함.

흐름 의존성 예시
동적 실행 (dynamic execution)

프로그램에서 흐름 의존성이 존재하는 경우에, 뒤에 위치한 명령어들 중에서 현재 실행하려는 명령어와 의존성이 존재하지 않는 것이 있으면 순서를 변경하여 먼저 실행하는 방법.

펜티엄 프로 프로세서 이후의 대부분의 프로세서들에서 사용. -> 슈퍼스칼라 정도(degree of superscalar)를 결정

(2) 반의존성 (antidependence)

흐름 의존성이 존재하지 않는 명령어들 간이라도, 동적 실행을 위하여 순서를 바꾸어 실행할 수는 없는 의존 관계

흐름 의존성과 반대 방향의 의존성.

반의존성 얘시

(3) 출력 의존성 (output dependence)

두 명령어들의 실행 결과가 동일한 목적지에 저장되는 경우

출력 의존성 예시

2. 자원 충돌 (resource conflict)

동시에 실행될 수 있는 명령어들이 같은 HW 자원을 사용하며, 그 수가 충분하지 못한 상황.

(자원의 예 : ALU, 기억장치 모듈, 캐시, 레지스터 등)

자원 충돌 예시

명령어 발송 정책

명령어를 발송하는데 필요한 프로토콜

명령어 발송 (Instruction issue)

프로세서가 독립적인 명령어들을 찾아서 실행 파이프라인으로 보내서 실행이 시작되도록 하는 과정

1. 순서대로 발송하고 순서대로 종료하는 방식 (in-order issue with in-order completion)

  • 가장 간단한 명령어 발송 정책
  • 원래 프로그램 순서대로 발송하고, 결과들고 원래 순서대로 저장
  • 실행 단계가 미리 종료된 명령어라도 프로그램 순서 상으로 그 이전에 위치한 명령어가 완전히 종료되지 않았다면 기다렸다가 순서에 맞추어 마지막 단계인 저장(S) 단계 수행.

2. 순서대로 발송하고 순서와 다르게 종료하는 방식 (in-order issue with out-of-order completion)

  • 명령어의 인출 및 해독 순서는 원래 프로그램 순서와 동일
  • 데이터 의존성이나 자원 충돌 문제가 없는 한 실행 및 종료되는 순서는 원래 프로그램 순서와 상관없이 진행.

3. 순서와 다르게 발송하고 순서와 다르게 종료하는 방식 (out-order issue with out-of-order completion)

  • 최근 대부분의 슈퍼스칼라 프로세서들에서 사용되고 있는 방식
  • 최단 시간 내에 프로그램 실행을 완료할 수 있도록 명령어 발송과 종료 순서를 조정
  • 명령어 발송 단계부터 데이터 의존성과 자원 충돌을 고려
  • 원래 프로그램 순서와는 거의 상관없이 실행 순서 결정
  • 필요시 미리보기 윈도우 (lookahead window)에 의해 독립적인 명령어의 추가 실행 추진
명령어 윈도우 (instruction window (명령어 풀 instruction pool)) 파이프 라인의 해독 단계와 실행 단계 사이에 위치하는 버퍼로서, 해독된 명령어를 일시 저장한다. 이 윈도우가 채워지지 않는 한 프로세서는 명령어들을 계속 인출하고 해독할 수 있다.
명령어 분배기 (instruction dispatcher) 명령어 윈도우에 저장되어 있는 해독된 명령어들을 검사하여
1. 그 실행에 필요한 기능 유니트가 사용 가능해지고,
2. 자원 충돌이나 데이터 의존성이 없는 경우에 그 명령어를 꺼내 기능 유니트로 보내어 실행 단계가 시작되도록 한다.

 


레지스터 재명명

명령어 실행 과정에서 CPU 레지스터의 중복 사용에 의해 실행이 지연되는 출력 의존성 및 반의존성에 의한 명령어-수준 병렬성의 저하를 방지하기 위한 방법.

전통적인 자원 충돌 해결책인 자원 복제(duplication of resource) 방법 이용함.

  • 레지스터를 추가적으로 사용하거나
  • 원래의 프로그램 코드에서 사용하는 레지스터의 이름을 변경

=> 불필요한 의존성 제거

레지스터 재명명 예시

 

'Computer Engineering > 병렬 처리(Parallel Processing)' 카테고리의 다른 글

[병렬 처리] 클러스터 미들웨어와 SSI  (0) 2019.06.20
[병렬 처리] 클러스터 컴퓨터의 구조 및 분류  (0) 2019.06.20
[병렬 처리] 고성능 입출력 시스템 구조  (0) 2019.06.20
[병렬처리] 상호 연결망 구조 - 정적 상호 연결망의 종류  (0) 2019.06.20
그래픽 처리 유니트 (GPU) - GPU의 개념과 CUDA 프로그래밍  (0) 2019.06.20

댓글

댓글을 사용할 수 없습니다.

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [병렬 처리] 클러스터 미들웨어와 SSI

    [병렬 처리] 클러스터 미들웨어와 SSI

    2019.06.20
  • [병렬 처리] 클러스터 컴퓨터의 구조 및 분류

    [병렬 처리] 클러스터 컴퓨터의 구조 및 분류

    2019.06.20
  • [병렬 처리] 고성능 입출력 시스템 구조

    [병렬 처리] 고성능 입출력 시스템 구조

    2019.06.20
  • [병렬처리] 상호 연결망 구조 - 정적 상호 연결망의 종류

    [병렬처리] 상호 연결망 구조 - 정적 상호 연결망의 종류

    2019.06.20
다른 글 더 둘러보기

정보

butter_shower 블로그의 첫 페이지로 이동

butter_shower

  • butter_shower의 첫 페이지로 이동

검색

메뉴

  • All Categories
  • About Me
  • Guest Book

카테고리

  • 전체보기 (223)
    • 💫 주인장 이야기 (17)
    • 🌱 와글와글뻘글 (27)
    • IT Trends (11)
    • 주인장 일상 (0)
    • 📒 내 마음대로 독서 서평 (12)
    • 머신러닝 꿈나무 (30)
      • 기본 개념 (6)
      • Hands-on! (5)
      • Paper Review (5)
      • 캐린이의 Kaggle (1)
    • 알고리즘 Algorithm (33)
      • PS (8)
    • Computer Engineering (75)
      • Python (8)
      • Cloud Computing (9)
      • C (9)
      • C++ (0)
      • Java (6)
      • Django 장고 (4)
      • 임베디드 시스템 (10)
      • 병렬 처리(Parallel Processing) (9)
      • 데이터 통신 Data communication (4)
      • 유닉스 시스템 (Unix System) (3)
      • GitHub (1)
      • 마이크로 프로세서 (micro processor) (1)
      • 데이터 마이닝 (1)
    • Error Note 🚨 (3)
    • 영어 공부 (6)
      • Live Academy (6)
    • HOBBY (2)
      • Film Log (2)

정보

_rian의 butter_shower

butter_shower

_rian

나의 외부 링크

  • Github
  • Facebook
  • Instagram
  • LinkedIn
  • Twitter

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © _rian. Designed by Fraccino.

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.