Book/혼자 공부하는 컴퓨터구조+운영체제

Chapter 5. CPU 성능 향상 기법

DongHo 2024. 1. 1. 23:14

빠른 CPU를 위한 설계 기법

클럭, 멀티코어, 멀티스레드가 각각 무엇인지 알아보고, 이들이 CPU 속도와 어떤 관계가 있는지 알아보겠습니다.

 

클럭

클럭은 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위입니다.

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

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

Q) 클럭 신호를 마냥 높이면 CPU가 무지막지하게 빨라질까요?
A) 꼭 그런건 아닙니다. 필요 이상으로 클럭을 높이면 발열이 심각해집니다.

코어와 멀티코어

그래서, 클럭 속도를 늘리는 방법 이외에는 뭐가 있을까요?

  • 코어 수를 늘리는 방법('듀얼 코어', '멀티 코어')
  • 스레드 수를 늘리는 방법('멀티 스레드')

 

코어(Core)

  • 현대적인 관점에서 "CPU"라는 용어를 재해석 해야합니다.
  • 명령어를 실행하는 부품
  • 전통적으로 '명령어를 실행하는 부품'은 원칙적으로 하나만 존재합니다.
  • 그러나, 오늘날 CPU에는 '명령어를 실행하는 부품'이 여러 개 존재합니다.
  • '명령어를 실행하는 부품'을 코어라는 용어로 사용합니다.

Q) 그럼 코어를 두 개, 세 개, 100개 늘리면 연산 속도도 그에 비례하여 빨라질까요?
A) 꼭 코어 수에 비례하여 증가하지는 않습니다.

 

스레드와 멀티 스레드

스레드 : '실행 흐름의 단위'

스레드에는 하드웨어적 스레드와 소프트웨어적 스레드가 있습니다.

 

하드웨어적 스레드

하나의 코어가 동시에 처리하는 명령어 단위

멀티 스레드 프로세서(멀티스레드 CPU) : 하나의 코어로 여러 명령어를 동시에 처리하는 CPU
하이퍼스레딩(Hyper-Threading) : 여러 개의 하드웨어적 스레드를 지원하는 CPU

소프트웨어적 스레드

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

Ex)

  1. 사용자로부터 입력받은 내용을 화면에 보여 주는 기능
  2. 사용자가 입력한 내용이 맞춤법에 맞는지 검사하는 기능
  3. 사용자가 입력한 내용을 수시로 저장하는 기능

    이 기능들을 작동시키는 코드를 각각의 스레드로 만들면 동시에 실행할 수 있습니다.

1코어 1스레드 CPU도 여러 소프트웨어적 스레드를 만들 수 있다.

 

 

명령어 병렬 처리 기법

명령어를 동시에 처리하여 CPU를 한시도 쉬지 않고 작동시키는 기법인 명령어 병렬 처리 기법(ILP : Instruction-Level Parallelism)를 알아보고, 명령어 병렬 처리 기법에 있는 명령어 파이프라이닝, 슈퍼스칼라, 비순차적 명령어 처리를 알아보겠습니다.

명령어 파이프라인

명령어가 처리되는 과정을 비슷한 시간 간격으로 나누면 아래와 같습니다.

  1. 명령어 인출(Instruction Fetch)
  2. 명령어 해석(Instruction Decode)
  3. 명령어 실행(Execute Instruction)
  4. 결과 저장(Write Back)

즉, 같은 단계가 겹치지만 않는다면 CPU는 각 단계를 동시에 실행할 수 있습니다.

 

명령어 파이프라인이 성능 향상에 실패하는 경우에는 아래와 같습니다.

 

데이터 위험

명령어 간의 의존성에 의해 발생합니다. 즉, 모든 명령어를 동시에 처리할 수는 없습니다.
(이전 명령어를 끝까지 실행해야만 비로소 실행할 수 있는 경우)

제어 위험

프로그램 카운터의 갑작스러운 변화에 의해 발생합니다.
이를 해결하기 위해 사용하는 기술 중 하나가 분기 예측(Branch Prediction)입니다.

구조적 위험

서로 다른 명령어가 같은 CPU 부품(ALU, 레지스터)르르 쓰려고 할 때 발생합니다.
(자원 위험(Resource Hazard)라고 부르기도 합니다.)

 

슈퍼스칼라

CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조입니다.
즉, 여러개의 명령어 파이프라인을 두는 기법입니다.

이론적으로 파이프라인 개수에 비례하여 처리 속도 증가한지만, 
BUT, 파이프라인 위험도의 증가로 인해 파이프라인 개수에 비례하여 처리 속도가 증가하진 않습니다.

 

비순차적 명령어 처리

명령어의 '합법적 새치기'이며, 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법입니다.
(예시는 아래와 같습니다.)

 

 

CISC와 RISC

파이프라이닝 하기 쉬운 명령어는 무엇일까요? 이와 관련해 CPU의 언어인 ISA와 각기 다른 성격의 ISA를 기반으로 설계된 CISC와 RISC를 알아보겠습니다.

명령어 집합

명령어 집합(구조)(Instruction Set 또는 Instruction Set Architecture) : CPU가 이해할 수 있는 명령어들의 모음

CISC(Complex Instruction Set Computer)

복잡한 명령어 집합을 활용하는 컴퓨터(CPU)
x86, x86-64는 CISC 기반 명령어 집합 구조

복잡하고 다양한 명령어 활용하고, 명령어의 형태와 크기가 다양한 가변 길이 명령어를 활용합니다.
메모리를 최대한 아끼며 개발해야 했던 시절에 인기가 높았으나, 명령어 파이프라이닝이 불리하다는 치명적인 단점이 있습니다.
명령어가 워낙 복잡하고 다양한 기능을 제공하는 탓에 명령어의 크기와 실행되기까지의 시간이 일정하지 않습니다.
복잡한 명령어 때문에, 명령어 하나를 실행하는데에 여러 클럭 주기가 필요합니다.
(게다가, 대다수의 복잡한 명령어는 사용 빈도가 낮습니다.)

 

RISC(Reduced Instruction Set Computer)

명령어의 종류가 적고, 짧고 규격화된 명령어를 사용합니다.
단순하고 적은 수의 고정 길이 명령어 집합을 활용합니다.
메모리 접근 최소화(load, store), 레지스터 십분 활용하는 명령어 집합입니다.
다만, 명령어 종류가 CISC 보다 적기에 더 많은 명령어로 프로그램을 동작시킵니다.

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

 

 

 

Reference
Book<혼자공부하는 컴퓨터구조+운영체제>
IMG(https://www.youtube.com/watch?v=VO0RQAA7KYc&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=14), (https://www.youtube.com/watch?v=Btsa_U-f26k&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=15)

'Book > 혼자 공부하는 컴퓨터구조+운영체제' 카테고리의 다른 글

Chapter 7. 보조기억장치  (0) 2024.01.09
Chapter 6. 메모리와 캐시 메모리  (0) 2024.01.09
Chapter 4. CPU의 작동 원리  (0) 2024.01.01
Chapter3. 명령어  (0) 2023.12.26
Chapter2. 데이터  (0) 2023.12.21