[컴퓨터 공학 기초] 5. CPU 성능 향상 기법

이재환·2023년 2월 14일
0

CS 공부

목록 보기
5/5

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

  1. 컴퓨터의 부품들은 '클럭 신호'에 맞춰 일사불란하게 움직인다.

  2. CPU는 '명령어 사이클'이라는 정해진 흐름에 맞춰 명령어들을 실행한다.

클럭 신호가 빠르게 반복되면 CPU를 비롯한 컴퓨터 부품들은 그만큼 빠르게 움직이는가??
\rightarrow 일반적으로는 YES

클럭 속도

Hz 단위로 측정함.

위의 예시를 보면 1초에 기본적으로 클럭이 3.0×1093.0\times 10^9 번, 그리고 순간적으로 최대 4.6×1094.6\times 10^9 번 반복한다는 뜻.

하지만, 필요이상으로 클럭을 높인다면 발열이 심해진다.

코어와 멀티 코어

CPU 내에서 명령어를 실행하는 부품으로 여러 개가 존재할 수 있다.

전통적인 관점에서 말하는 CPU는 코어 1개를 의미하고, 오늘날에는 여러개의 코어로 구성된 멀티 코어 CPU를 사용한다

코어의 수에 비례하여 속도가 반드시 증가하지는 않는다.

스레드

하드웨어적 스레드

코어의 개수 ×\times 하나의 코어에서 동시에 처리할 수 있는 명령어의 개수 = 스레드

즉, 위의 예시인 18 코어 CPU에서는 하나의 코어가 한번에 두개의 명령어를 처리할 수 있어서, 최종적으로는 CPU가 동시에 36개의 명령어를 처리할 수 있으므로 36 스레드가 된다.

  • 멀티 스레드 프로세서를 실제로 설계하는 일은 매우 복잡하지만, 핵심은 레지스터이다.

  • 하드웨어 스레드 : 논리 프로세서라고도 부른다.

스포트웨어적 스레드

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

싱글 스레드 : 프로그램이 하나의 영역에서만 실행됨

멀티 스레드 : 프로그램이 두 개 이상의 영역에서 실행됨

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

명령어 파이프 라인

하나의 명령어가 처리되는 과정을 비슷한 시간 간격으로 나눈 것

명령어 파이프라이닝은 동시에 여러개의 명령어를 겹쳐 실행하는 기법이다.

  1. 명령어 인출

  2. 명렁어 해석

  3. 명령어 실행

  4. 결과 저장

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

  • 파이프라인 위험
    • 데이터 위험 : 명령어 간의 의존성에 의해 야기

      Ex) 이전 명령어를 끝까지 실행해야지 비로소 실행할 수 있는 경우

    • 제어 위험 : 프로그램 카운터의 갑작스러운 변화

      Ex) 실행의 흐름을 바꾸는 JUMP와 같은 명령어

      Branch prediction - (분기 예측) 프로그램 카운터가 어디로 바뀔 것인지 미라 예측하는 기술

    • 구조적 위험 : 서로 다른 명령어가 같은 CPU 부품(ALU, 레지스터)을 쓰려고 할 때 발생


슈퍼 스칼라

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

이론적으로는 파이프라인의 개수에 비례해서 처리속도가 증가하지만, 파이프라인 위험의 증가로 인해 실제로는 그렇지 않음


비순차적 명령어 처리 (OOOE : Out Of Order Execution)

위에서 본 방식은 모두 순차적으로 명령어를 처리하는 방식.

파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법이다.

의존성이 없는 명령어의 순서를 바꿔서 최대한 파이프라인을 중단시키지 않고 활용하는 방식


05-3. 명령어 집합 구조, CISC와 RISC

명령어 파이프라이닝을 하기 유리한 명령어의 구조는 어떨까?

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

  • CPU가 이해할 수 있는 명령어들의 모음

  • CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 것임

  • ARM-CPU와 x86-64-CPU가 어떠한 소스코드를 보고 compile해서 저급 언어로 변환해줄 때 각각 사용하는 명령어가 다르다는 것임

  • 명령어가 달라지면, 해석 방식, 레지스터의 종류와 개수, 파이프라이닝의 용이성 등이 달라지게 된다.

명령어 집합의 두 축 : CISC, RISC

CISC(Complex Instructon Set Computer)

복잡한 명령어 집합을 활용하는 컴퓨터(CPU)

x86, x86-64는 CISC 기반 명령어 집합 구조이다.

명령어의 형태와 크기가 다양한 가변 길이 명령어를 활용한다

명령어가 복잡한 만큼 다양한 기능을 수행할 수 있으므로, 상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있다.

명령어 파이프라이닝에 불리하다라는 단점이 있다.

  • 명령어가 복잡하고 다양한 기능을 제공하는 탓에, 명령어의 크기와 실행되기까지의 시간이 일정하지 않음

  • 명령어 하나를 실행하는 데에 여러 클럭 주기가 필요함

대다수의 복잡한 명령어는 사용 빈도가 낮다

RISC (Reduced -)

명령어의 종류가 적고, 짧고 규격화된(고정된 길이의) 명령어를 사용한다.

명령어 파이프라이닝에 유용하고, 메모리 접근을 최소화하고, 레지스터를 매우 잘 활용한다.

하지만 명령어의 종류가 CISC 보다 적기때문에 비교적 많은 명령어로 프로그램을 실행해야 한다.

profile
사람

0개의 댓글