[혼공컴운]2주차_Chap05 | CPU 성능 향상 기법

곽나현·2024년 1월 14일
0

혼공컴운

목록 보기
4/16
post-thumbnail

⚪ 학습목표

  • 빠른 CPU를 위한 설계 기법을 학습한다.
  • 빠른 CPU를 위한 명령어 병렬 처리 기법을 학습한다.
  • RISC와 CISC의 차이에 대해 이해한다.

🎇 빠른 CPU를 위한 설계 기법

🔗 클럭

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

➡ 클럭 속도가 높은 CPU는 일반적으로 성능이 좋다.

  • 클럭 속도는 헤르츠(Hz) 단위로 측정한다.

  • 클럭 속도는 일정하지 않다.

    • 클럭속도는 기본 클럭 속도(Base)최대 클럭 속도(Max)로 나뉘는데 CPU는 계속 일정한 클럭 속도를 유지하기보단 고성능을 요하는 순간에 순간적으로 클럭 속도를 높이고, 그렇지 않을 때에는 클럭 속도를 낮춘다.

    • 최대 클럭 속도를 강제로 더 끌어 올리는 기법오버클럭킹이라고 한다.

◼ 클럭 속도만 높인다면 무조건 CPU가 빨라질까?

  • 클럭 속도만 빠르다고 해서 CPU의 속도가 무조건 빨라지지는 않는다.
  • 클럭 속도를 무작정 높이면 발열 문제가 심각해진다.

◼ 클럭 속도 향상 외에 CPU 성능을 높이는 방법은?

🔗 CPU의 코어 수 증가

✔ 코어

명령어를 실행하는 부품

➡ 예로 8코어명령어를 실행하는 부품이 8개가 있다는 의미

✔ 멀티코어 CPU (멀티코어 프로세서)

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

◼ CPU의 연산 속도가 코어 수에 비례하여 증가하는 것은 아니다.

  • 코어마다 처리할 연산이 적절히 분배되지 않는다면 코어 수에 비례하여 연산 속도가 증가하지 않음

🔗 CPU의 스레드 수 증가

✔ 스레드

사전적 의미로는 실행의 흐름 단위이다. CPU에서 사용되는 하드웨어적 스레드가 있고, 프로그램에서 사용되는 소프트웨어적 스레드가 있다.

스레드
하드웨어적 스레드하나의 코어가 동시에 처리하는 명령어 단위 (CPU입장)
소프트웨어적 스레드하나의 프로그램에서 독립적으로 실행되는 단위 (프로그램, 운영체제 입장)

<하드웨어적 스레드>
➡ 1코어 1스레드는 명령어를 실행하는 부품이 하나있고, 한 번에 하나씩 명령어를 실행하는 CPU
➡ 2코어 4스레드는 명령어를 실행하는 부품이 두 개 있고, 한 번에 4개의 명령어를 처리할 수 있는 CPU

<소프트웨어적 스레드>
➡ 하나의 프로그램은 실행되는 과정에서 한 부분만 실행될 수도 있고, 여러 부분이 동시에 실행될 수도 있음
➡ 1코어 1스레드 CPU로도 프로그램의 여러 부분을 동시에 실행할 수 있음

✔ 멀티스레드 CPU (멀티스레드 프로세서)

하나의 코어로 여러 명령어를 동시에 처리하는 CPU

➡ 8코어 16스레드는 코어 하나당 두 개의 하드웨어 스레드를 처리한다는 의미

하이퍼스레딩이란 인텔의 멀티스레드 기술을 의미

◼ 어떻게 멀티스레드 프로세서가 가능한가?

⭐ 레지스터

하나의 코어로 여러 명령어를 동시에 처리하도록 만들려면 PC, SP, MAR, MBR과 같이 하나의 명령어를 처리하기 위해 꼭 필요한 레지스터(레지스터 세트)를 여러 개 가지고 있으면 된다.

➡ ALU와 제어장치가 두 개의 레지스터 세트에 저장된 명령어를 해석하고 실행하면 하나의 코어에서 두 개의 명령어가 동시에 실행된다.

프로그램 입장에서 봤을 때 하드웨어 스레드'한 번에 하나의 명령어를 처리하는 CPU'와 같으므로 2코어 4스레드프로그램입장에서 4개의 CPU가 있는 것처럼 보인다. 때문에 하드웨어 스레드논리 프로세서라고 부르기도 한다.

🎇 명령어 병렬 처리 기법

🔎 명령어 병렬 처리 기법의 3가지 종류

  1. 명령어 파이프라이닝
  2. 슈퍼스칼라
  3. 비순차적 명령어 처리

🔗 명령어 파이프라인 (Instruction pipeline)

명령어 처리 과정을 비슷한 시간 간격으로 나눠서 서로 다른 단계의 명령어를 동시에 실행하는 것

파이프라이닝높은 성능을 가져오긴 하지만, 특정 상황에서는 성능 향상에 실패하는데 이러한 상황을 파이프라인 위험이라고 한다.

◼ 파이프라인 위험 (pipeline hazard)

파이프라인 위험
데이터 위험 (data hazard)데이터 의존성에 의해 발생
제어 위험 (control hazard)분기 등으로 인한 프로그램 카운터(PC)의 갑작스러운 변화에 의해 발생 ➡ 이를 위해 분기 예측(branch prediction)이라는 기술을 사용함
구조적 위험 (construc)서로 다른 명령어가 동시에 ALU,레지스터 등과 같은 CPU부품을 사용하려고 할 때 발생 ➡ 자원 위험 (resource hazard)

🔗 슈퍼스칼라 (Superscalar)

CPU내부에 여러 개의 명령어 파이프라인을 포함한 구조

◼ 슈퍼스칼라 CPU (슈퍼스칼라 프로세서)

슈퍼스칼라 구조로 명령어 처리가 가능한 CPU

멀티스레드 프로세서는 한 번에 여러 명령어를 인출하고, 해석하고, 실행할 수 있으므로 슈퍼스칼라 구조를 사용할 수 있다.

이론적으로 슈퍼스칼라 프로세서파이프라인 개수에 비례하여 프로그램 처리 속도가 빨라지지만 파이프라인 위험 등의 예상치 못한 문제가 있어 실제로는 파이프라인 개수에 비례하여 빨라지지 않음

🔗 비순차적 명령어 처리 (OoOE: Out-of-Order Execution)

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

데이터 의존성이 없는 명령어들의 순서를 바꿔 파이프라인멈추는 것을 방지하는 것이 목적이다.

🎇 CISC와 RISC

◼ CPU가 파이프라이닝슈퍼스칼라 기법을 효과적으로 사용하려면 명령어파이프라이닝 하기 쉬워야한다.

◼ 파이프라이닝 하기 쉬운 명령어란 무엇인가?

🔗 명령어 집합 구조(ISA:Instruction Set Architecture)

CPU가 이해할 수 있는 명령어들의 모음. 즉 CPU마다 ISA가 다를 수 있음

명령어가 달라지면 어셈블리어 또한 달라짐

  • 어셈블리어 : 명령어를 읽기 편하게 표현한 언어
  • 컴파일러에 따라서도 어셈블리어가 달라질 수 있음

➡ ISA가 같은 CPU끼리는 서로의 명령어를 이해할 수 있지만, ISA가 다르면 서로의 명령어를 이해하지 못 함. 이러한 이유로 ISACPU언어라고 함

➡ ISA가 달라지면 명령어의 생김새 외에도 여러 가지가 달라짐

  • 제어장치가 명령어를 해석하는 방식
  • 사용되는 레지스터의 종류와 개수
  • 메모리 관리 방법 등

➡ ISA는 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속

◼ 명령어 병령처리 기법을 적용하기에 용이한 ISA가 있고 그렇지 못한 ISA도 있다.

🔗 CISC (Complex Instruction Set Computer)

복잡하고 다양한 명령어들을 활용하는 CPU 설계방식

CISC는 다양하고 강력한 기능의 명령어 집합을 활용하기 때문에 명령어의 형태와 크기가 다양한 가변 길이 명령어를 활용함

CISC
장점상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있다. ➡ 메모리 공간 절약 가능
단점명령어가 복잡하고 다양한 기능을 제공하기 때문에 명령어의 크기와 실행되기까지의 시간이 일정하지 않다. 또한 복잡한 명령어 때문에 명령어 하나를 실행하는 데에 여러 클럭 주기가 필요하다.

➡ CISC의 단점은 명령어 파이프라인을 구현하는 데에 큰 걸림돌

  • 규격화 되지 않은 명령어가 파이프라이닝을 어렵게 만듦

➡ CISC가 복잡하고 다양한 명령어를 활용할 수 있다고 하지만, 실제로는 자주 사용되는 명령어만 쓰임

∴ CISC 기반 CPU는 성장에 한계가 있음

🔗 RISC (Reduced Instruction Set Computer)

단순하고 적은 수의 명령어를 사용하는 CPU 설계방식

RISC고정 길이 명령어를 활용한다.

RISC는 명령어가 규격화 되어 있고, 하나의 명령어가 1클럭 내외로 실행되기 때문에 파이프라이닝에 최적화

RISC는 메모리 접근을 단순화, 최소화하는 대신 레지스터를 적극적으로 활용한다.

  • 따라서 RISCCISC보다 레지스터를 이용하는 연산이 많고, 일반적인 경우보다 범용 레지스터 개수도 많다.

RISC는 메모리에 직접 접근하는 명령어를 load,store 두 개로 제한할 만큼 메모리 접근을 단순화하고 최소화를 추구한다.

  • 따라서 CISC보다 주소 지정 방식의 종류가 적은 경우가 많음

⚪ 정리하자면

CISCRISC
복잡하고 다양한 명령어단순하고 적은 명령어
가변 길이 명령어고정 길이 명령어
다양한 주소 지정 방식적은 주소 지정 방식
프로그램을 이루는 명령어의 수가 적음프로그램을 이루는 명령어의 수가 많음
여러 클럭에 걸쳐 명령어 수행1클럭 내외로 명령어 수행
파이프라이닝하기 어려움파이프라이닝하기 쉬움

0개의 댓글