Post

[컴퓨터 구조] 5. CPU 성능 향상 기법

[컴퓨터 구조] 5. CPU 성능 향상 기법

Chapter5 CPU 성능 향상 기법


5-1 빠른 CPU를 위한 설계 기법

클럭

  • 컴퓨터 부품들은 ‘클럭 신호에 맞추어 동작
  • 클럭 속도가 높은 CPU는 일반적으로 성능이 좋음
  • 클럭 속도 : 헤르츠(Hz) 단위로 측정
    • 클럭이 1초에 한번 반복되면 CPU 클럭 속도는 1Hz
    • 1 Ghz = 10^9 Hz
  • 클럭 속도가 매번 일정한 것은 아님
    • 고성능을 요할 때는 높이고, 그렇지 않을 때는 낮추기도 함

코어와 멀티코어

  • 코어 : CPU 내에서 명령어를 실행하는 부품

image

image

  • 코어마다 처리할 명령어들을 얼마나 적절하게 분배하느냐가 중요

스레드와 멀티스레드

  • 스레드 : 실행 흐름의 단위
    • 하드웨어적 스레드 : 하나의 코어가 동시에 처리하는 명령어 단위

      image

      • 위와 같이 하나의 코어로 여러 명령어를 동시에 처리
      • 멀티스레드 프로세서 : 여러개의 하드웨어적 스레드를 지원하는 CPU
      • 하이퍼스레딩 : 인텔의 멀티스레드 기술
    • 소프트웨어적 스레드 : 하나의 프로그램에서 독립적으로 실행되는 단위

      image

  • 멀티스레드 프로세서
    • 멀티스레드 프로세서를 설계하는 데 핵심은 레지스터
    • 프로그램 카운터, 스택 포인터, 데이터 버퍼 레지스터, 데이터 주소 레지스터와 같이 하나의 명령어를 처리하기 위해 꼭 필요한 레지스터를 여러 개 가지고 있으면 됨

    image

    • 2코어 4스레드 CPU는 한번에 네 개의 명령어를 처리할 수 있는데 프로그램의 입장에선 하나의 명령을 처리하는 CPU가 네 개 있는 것처럼 보임 → 하드웨어 스레드를 논리 프로세서라고 하기도 함

    image


5-2 명령어 병렬 처리 기법

명령어 파이프라인

  • 명령어 파이프라이닝 : 동시에 여러 개의 명령어를 실행하는 기법
    1. 명령어 인출 (Instruction Fetch)
    2. 명령어 해석 (Instruction Decode)
    3. 명령어 실행 (Execute Instruction)
    4. 결과 저장 (Write Back)
  • 위와 같이 4단계가 있는데 단계가 겹치지만 않는다면 CPU는 각 단계를 동시에 실행할 수 있다는 것이 핵심 → 효율적으로 처리 가능

    image

    • 파이프라인을 통해 병력적으로 명령어를 처리하는 경우

    image

    • 위는 파이프라인없이 모든 명령어를 순차적으로 처리하는 경우
  • 파이프라인 위험 : 파이프라인이 높은 성능을 가져오기는 하지만 특정 상황에는 성능 향상에 실패할 수도
    • 데이터 위험 : 명령어간 데이터 의존성에 의해 발생

      image

      • 위와 같은 경우 명령어 1을 수행해야만 명령어 2를 수행할 수 있음
      • 명령어 2는 명령어 1에 의존적
    • 제어 위험 : 분기 등으로 인한 프로그램 카운터의 갑작스러운 변화에 의해 발생

      image

      • 분기 예측 : 프로그램이 어디로 분기할지 미리 예측한 후 그 주소를 인출하는 기술
    • 구조적 위험 : 서로 다른 명령어가 동시에 ALU, 레지스터와 같은 CPU 부품을 사용하려고 할 때 발생

      • 자원 위험이라고도 함

슈퍼스칼라

  • 슈퍼스칼라 : 여러 개의 명령어 파이프라인을 두는 기법

image

  • 슈퍼스칼라 프로세서 : 슈퍼스칼라 구조로 명령어 처리가 가능한 CPU
  • 슈퍼스칼라 프로세서는 이론적으로는 파이프라인 개수에 비례하여 프로그램 처리 속도가 빨라짐
    • 하지만 파이프라인 위험 등의 문제로 실제로는 파이프라인 개수에 비례하여 빨라지는 것은 아님 → 여러 개의 파이프라인을 사용하면 더욱 많은 위험 존재

비순차적 명령어 처리

  • 비순차적 명령어 처리 기법 : 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 기법 → OoOE로 줄여서 부름

image

  • 3번 명령어를 실행하기 위해서는 1번, 2번 명령어가 실행이 끝날 때까지 기다려야 함

image

  • 위와 같이 4번, 5번, 6번 명령어도 다같이 밀리게 됨
  • 여기서 3번 명령어는 뒤의 명령어와 순서를 바꾸어 실행하여도 문제될 것이 없음

image

  • 여기서 위와 같이 3번 명령어를 마지막에 수행한다면?

image

  • 위와 같이 효율적인 파이프라인 수행가능
  • 그렇지만 아무 명령어나 순서를 바꿔서 수행가능한 것은 아님 → 의존성을 고려해야!!

image

  • 4번과 5번 명령어는 의존성이 없기 때문에 순서를 바꿀 수 있음

image


5-3 CISC와 RISC

명령어 집합

  • 명령어 집합(ISA) : CPU가 이해할 수 있는 명령어의 모음
  • CPU마다 ISA가 다름
  • ISA는 CPU의 언어임과 동시에 CPU를 비롯한 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속

CISC

  • 복잡하고 다양한 종류의 가변 길이 명령어 집합 활용

image

RISC

  • 단순하고 적은 종류의 고정 길이 명령어 집합 활용

image

image

혼자 공부하는 컴퓨터구조 + 운영체제를 통해 진행한 스터디를 정리한 내용입니다.
문제가 될시에는 수정 혹은 삭제하겠습니다.

This post is licensed under CC BY 4.0 by the author.