[혼공학습단 9기] 혼공컴운 2주차 챕터5 : CPU 성능 향상 기법 + 미션

낙원·2023년 1월 12일
0
post-thumbnail

🖥빠른 CPU 설계를 위한 설계 기법

  • 컴퓨터 부품들은 클럭 신호에 맞춰 움직인다.
  • CPU는 명령어 사이클이라는 흐름에 맞춰 명령어를 실행한다.

⏰클럭

  • 클럭 속도 : 헤르츠(Hz) 단위로 측정
  • 헤르츠 : 1초에 클럭이 반복되는 횟수
    • 클럭이 1초에 100번 반복되면 100Hz

클럭 속도를 높인다고 해서 무조건 빨라지는 것이 아니다.
필요 이상으로 클럭을 높이면 발열이 심각해진다.

⏳코어와 멀티코어

코어

  • 명령어를 실행하는 부품
  • CPU : 코어를 여러 개 포함하는 부품으로 명칭의 범위 확장

멀티코어

  • 코어를 여러 개 포함하고 있는 CPU

🧨스레드와 멀티스레드

하드웨어적 스레드

  • 하나의 코어가 동시에 처리하는 명령어 단위
    - 2코어 4스레드 CPU

    명령어 실행부품 2개, 한 번에 4개의 명령어 처리 가능하다.
  • 멀티스레드 프로세서(멀티스레드 CPU)
    하나의 코어로 여러 명령어를 동시에 처리하는 CPU

소프트웨어적 스레드

  • 하나의 프로그램에서 독립적으로 실행되는 단위

멀티스레드 프로세서

  • 설계는 복잡하지만, 가장 핵심은 레지스터다.
    레지스터 세트 : PC, SP 등 꼭 필요한 레지스터

메모리 입장에서 위 CPU는 한 번에 하나의 명령어를 처리하는 CPU가 4개 있는 것처럼 보인다.
그래서 하드웨어 스레드를 논리프로세서라고 부르기도 한다.


🎯명령어 병렬 처리 기법

💎명령어 파이프라인

  • 명령어 처리 과정을 클럭 단위로 나누면 다음과 같다.
    1. 명령어 인출
    2. 명령어 해석
    3. 명령어 실행
    4. 결과 저장

같은 단계가 겹치지만 않으면 CPU는 각 단계를 동시에 실행 가능하다.

  • 명령어 파이프라이닝
    명령어들을 명령어 파이프라인에 넣고 동시에 처리하는 기법

파이프라인 위험

  • 특정 상황에서 성능 향상에 실패할 수 있다.
  1. 데이터 위험

    • 명령어 간 ‘데이터 의존성’에 의해 발생
    • 모든 명령어를 동시에 처리할 수 없다. 이전 명령어를 끝까지 실행해야만 실행할 수 있는 경우가 있다.
  2. 제어 위험

    • 분기 등으로 인한 프로그램 카운터의 갑작스런 변화에 의해 발생
    • 기본적으로 PC값은 다음 주소로 갱신된다. 그러나 위처럼 갑자기 변화가 생기면 미리 가지고 와서 처리 중이던 명령어들은 쓸모가 없어진다.
  3. 구조적 위험(자원 위험)

    • 서로 다른 명령어가 동시에 ALU, 레지스터 등을 사용하려 할 때 발생

🎡슈퍼스칼라

  • CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조
  • 이론적으로 파이프라인 개수에 비례하여 처리 속도가 증가한다.
    그러나 파이프라인 위험도 증가로 인해 비례하여 빨라지지는 않는다.

비순차적 명령어 처리

  • 명령어들을 순차적으로 실행하지 않는 기법

  • 예시

    위 명령어에서 3번 실행을 위해서는 1, 2 실행이 끝나야한다.

    하지만 3번 명령을 가장 마지막에 실행하면 더 효율적으로 실행 가능하다.

의존성이 없는 명령어들은 순서를 바꿔서 실행해도 상관없다.
의존성이 있는 명령어들은 순서를 바꿀 수 없다.

따라서 어떤 명령어와 의존성을 가지고, 순서를 바꿔 실행할 수 있는 명령어에는 어떤 것들이 있는지 판단할 수 있어야 한다.


💊CISC와 RISC

🎨명령어 집합(ISA)

  • CPU가 이해할 수 있는 명령어들의 모음
  • CPU마다 ISA가 다를 수 있다.
  • ISA가 같은 CPU끼리는 서로의 명령어를 이해할 수 있지만 ISA가 다르면 서로의 명령어를 이해하지 못한다.
  • ISA는 CPU의 언어임과 동시에 CPU를 비롯한 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속이다.

📉CISC

  • 복잡한 명령어 집합을 활용하는 컴퓨터
  • 명령어의 형태, 크기가 다양한 가변 길이 명령어을 활용한다.
  • 다양하고 강력한 명령어를 활용해 상대적으로 적은 수의 명령어로도 프로그램 실행이 가능하다. → 메모리 공간을 절약할 수 있다.
  • 명령어 크기와 실행 시간이 일정하지 않아 명령어 파이프라인 구현이 어렵다는 단점이 있다.
  • 복잡한 명령어를 사용할 수 있지만 사용 빈도가 낮다.

📈RISC

  • 명령어 종류가 적고, 짧고 규격화된 명령어 사용
  • 고정 길이 명령어를 활용한다.
  • 명령어 파이프라이닝에 유리하다.
  • 메모리에 접근하는 명령어를 load, store 두 개로 제한할 만큼 메모리 접근을 단순화하고 최소화했다.
  • CISC보다 주소 지정 방식의 종류가 적은 경우가 많다.
  • 그 대신 레지스터를 적극적으로 활용한다.
  • 명령어 개수가 CISC보다 적어 더 많은 명령으로 프로그램 작동시킨다.

📕미션

p. 125의 확인 문제 2번

  • 플래그 레지스터
    연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장하는 레지스터

  • 프로그램 카운터
    메모리에서 가져올 명령어의 주소를 저장하는 레지스터

  • 범용 레지스터
    데이터와 주소를 모두 저장할 수 있는 레지스터

  • 명령어 레지스터
    해서할 명령어를 저장하는 레지스터

p. 155의 확인 문제 4번

  • 답 : 코어

코어와 스레드의 개념

  • ⏳코어와 멀티코어 부분 참고

0개의 댓글