Cute Running Puppy

cs/[OS] 혼자 공부하는 컴퓨터 구조 + 운영체제

[혼공 컴운] chapter 05. CPU 성능 향상 기법

R.silver 2024. 1. 12. 12:03
반응형

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

 

클럭

 

컴퓨터 부품들을 움직이는 신호
-> 클럭 신호가 빠르게 반복되면 CPU를 비롯한 컴퓨터 부품들은 더 빠른 박자에 맞추어 움직임

>  클럭 속도

  • Hz 단위로 측정
  • CPU로 속도 단위
  • 클럭 속도가 높을수록 CPU의 성능이 좋음
  • 클럭 속도는 일정하지 않다. 유연하게 속도를 변화시킬 수 있다.
  • 오버클럭킹: 최대 클럭 속도를 강제로 끌어올리는 기법
  • 클럭 속도를 무작정 높이면 발열 문제가 심각해짐
  • 클럭 속도만으로 CPU의 성능을 높이는 것은 한계가 있음

 

코어와 멀티코어

 

클럭 속도를 높이는 방식 외에 CPU의 성능을 높이는 방법
-> CPU의 코어, 스레드 수 늘리기

>  코어

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

>  멀티코어 CPU

(== 멀티코어 프로세서)
CPU 내에 명령어를 처리하는 일꾼이 여러 명 있는 것

CPU 안에 코어가 몇 개 포함되어 있는지에 따라 싱글코어, 듀얼 코어 등으로 나뉨
그러나 CPU 코어수와 연산 속도는 비례하지 않음
처리할 연산이 적절하게 분배되어야만 한다.

=> 코어마다 처리할 명령어들을 얼마나 적절하게 분배하느냐가 연산 속도에 큰 영향을 미친다

 

스레드와 멀티스레드

  • 스레드: 실행 흐름의 단위
    • 하드웨어적 스레드
    • 소프트웨어적 스레드

> 하드웨어적 스레드

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

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

1코어 1 스레드 CPU는 여러 스레드로 만들어진 프로그램을 실행할 수 있다.
-> 1코어 1 스레드 : 하드웨어적 스레드
-> 여러 스레드로 만들어진 프로그램: 소프트웨어적 스레드

> 멀티스레드 프로세서

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

하나의 명령어를 처리하기 위해 꼭 필요한 레지스터를 여러 개 가지고 있으면 된다
(프로그램 카운터, 스택 포인터, 데이터 버퍼 레지스터, 데어터 주소 레지스터)

  • 논리프로세서
    (== 하드웨어 스레드)
    프로그램 입장에서 하드웨어 스레드는 '한 번에 하나의 명령어를 처리하는 CPU'와 다름없음
    2 코어 4 스레드는 한 번에 4개의 명령어를 처리할 수 있지만, 프로그램 입장에서는 한 번에 하나의 명령어를 처리하는 CPU가 4개인 것처럼 보임
  • 코어: 명령어를 실행할 수 있는 하드웨어 부품
  • 스레드: 명령어를 실행하는 단위
  • 멀티코어 프로세서: 명령어를 실행할 수 있는 하드웨어 부품이 CPU 안에 2개 이상 있는 CPU
  • 멀티스레드 프로세서: 하나의 코어로 여러 개의 명령어를 동시에 실행할 수 있는 CPU

 

05-2. 명령어 병렬 처리 기법

  • 명령어 병렬 처리 기법(ILP)
    명령어를 동시에 처리하여 CPU를 쉬지 않고 작동시키는 기법
  • 대표적인 병렬 처리 기법
    명령어 파이프라이닝, 슈퍼스칼라, 비순차적 명령어 처리

 

명령어 파이프라인

 

명령어 처리 과정

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

같은 단계가 겹치지만 않으면 CPU는 각 단계를 동시에 실행할 수 있다.
-> 한 명령어를 인출하는 동안 다른 명령어를 실행, 저장할 수 있음

  • 명령어 파이프라이닝
    명령어들을 명령어 파이프라인에 넣고 동시에 처리하는 기법
  • 파이프라인 위험
    파이프라이닝에서 특정 상황에서 성능 향상에 실패하는 경우
    • 데이터 위험
    • 제어 위험
    • 구조적 위험

> 데이터 위험

명령어 간 '데이터 의존성'에 의해 발생
명령어 간 순서가 있는 경우 발생

예) A = B + C, D = A + E 일 경우 두 번째 명령어를 실행하기 위해서는 첫 번째 명령어가 반드시 수행되어야 한다. -> 명령어 1과 2는 의존적이다

데이터 의존적인 두 명령어를 동시에 실행하려 할 때 파이프라인이 제대로 작동하지 않는 상황 => 데이터 위험

> 제어 위험

분기 등으로 인한 '프로그램 카운터의 갑작스러운 변화'에 의해 발생

기본적으로 프로그램 카운터는 현재 실행 중인 명령어의 다음 주소로 갱신된다.
프로그램 카운터 값에 갑작스러운 변화가 생길 때 명령어 파이프라인에 미리 처리 중이던 명령어가 쓸모 없어진다. => 제어 위험

해결 기술
분기 예측
프로그램이 어디로 분기할지 미리 예측한 후 해당 주소를 인출하는 기술

> 구조적 위험

(== 자원 위험)
명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 CPU 부품을 사용하려 할 때 발생

 

슈퍼 스칼라

 

CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조
공장 생산 라인을 여러 개 두는 것과 같음

  • 슈퍼스칼라 프로세서 (슈퍼스칼라 CPU)
    슈퍼스칼라 구조로 명령어 처리가 가능한 CPU

이론적으로는 파이프라인 개수와 프로그램 처리 속도가 비례함
그러나 파이프라인 위험 등의 예상치 못한 문제가 있어 반드시 비례하지는 않음
이 때문에 슈퍼스칼라 방식을 사용한 CPU는 파이프라인 위험을 방지하기 이해 고도로 설계되어야 함

 

비순차적 명령어 처리 (OoOE)

  • OoOE
    Out-if-order execution
    파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법

명령어를 순차적으로만 실행하지 않고
데이터 의존성이 전혀 없어 순서를 바꾸어도 수행 결과에 영향이 없는 명령어들을 먼저 실행하는 명령어 방식

 

05-3. CISC와 RISC

 

파이프라이닝과 슈퍼스칼라 기법을 효과적으로 사용하려면 명령어가 파이프라이닝에 최적화되어 있어야 한다.
파이프라이닝에 유리한 명령어가 있다면 효율적으로 파이프라이닝 기법을 사용할 수 있다.

  • ISA
    일종의 CPU 언어
    하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속
  • CISC, RISC
    ISA를 기반으로 설계된 명령어 (파이프라이닝에 유리하게 설계)

명령어 집합

 

(== 명령어 집합 구조 (ISA))
CPU가 이해할 수 있는 명령어들의 모임
CPU마다 ISA가 다를 수 있다
명령어들이 달라지면 어셈블리어도 달라진다

 

CISC

 

Complex Instruction Set Computer
복잡하고 다양한 수의 가변 명령어 집합을 활용하는 컴퓨터(CPU)

예) x86, x86-64 등

다양하고 강력한 기능의 명령어 집합을 활용하기 때문에 가변 길이 명령어를 활용
다양하고 강력한 명령어 활용 -> 적은 수의 명령어로도 프로그램 실행 가능
(명령어 수가 적다 == 컴파일된 프로그램의 크기가 작다. 같은 소스코드를 컴파일해도 CPU마다 생성되는 실행 파일의 크기가 다르다)

> 장점

  • 적은 수의 명령어로도 프로그램 실행 가능
  • 메모리 공간 절약 가능
  • > 치명적인 단점
  • 명령어의 규격화가 어려워 파이프라이닝이 어려움
    명령어의 크기와 실행되기까지의 시간이 일정하지 않음 (명령어가 복잡, 다양해서)
    명령어 하나를 실행하는 데에 여러 클럭 주기가 필요함 (명령어가 복잡해서)
  • 명령어 파이프라인 활용을 위한 이상적인 명령어는 각 단계에 소요되는 시간이 동일해야 함
    그래야 공장의 생산 라인처럼 결과를 낼 수 있다
    그러나 CISC는 명령어 수행 시간이 길고 다르기에 파이프라인이 효율적으로 명령어를 처리하기 어려움
  • 대다수의 복잡한 명령어들은 사용 빈도가 낮음
    실제로 자주 사용되는 명령어만 사용됨

=> 파이프라이닝을 위해 명령어 길이와 수행 시간이 짧고 규격화되어 있어야 한다.
=> 자주 쓰이는 기본적인 명령어를 작고 빠르게 만들어야 한다.

 

RISC

 

Reduced Instruction Set Computer
단순하고 적은 수의 고정 길이 명령어 집합을 사용하는 컴퓨터

CISC에 비해

  • 적은 명령어 수
  • 짧은 명령어
  • 규격화된 명령어 (되도록 1 클럭 내외로 실행 -> 파이프라이닝에 최적화)

=> 고정 길이 명령어 사용

메모리 접근을 단순화, 최소화하는 대신 레지스터 적극 활용
일반적인 경우보다 범용 레지스터 개수도 많음
하지만 명령어 개수가 적기에 CISC보다 많은 명령어로 프로그램을 작동시킴

 

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