김기현
Chapter05

CPU 성능 향상 기법

빠른 CPU를 위한 설계 기법

클럭

컴퓨터 부품들은 클럭 신호에 맞춰 움직인다 ➡️ 클럭 속도가 높아지면 명령어 사이클을 더 빠르게 반복,
다른 부품들도 명령어 사이클에 맞춰 빠르게 작동

∴ 클럭 속도 = CPU 속도 단위, 보통 헤르츠(Hz)로 측정 ex: 클럭이 1초에 100번 반복 = 100Hz

코어와 멀티코어

클럭 속도 외 CPU의 성능을 높이는 다른 방법

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

과거엔 CPU 안에 코어가 하나만 존재했는데, 현재는 여러개가 존재 가능 = 멀티코어 프로세서

싱글코어 ➡️ 듀얼코어 ➡️ 트리플코어 ➡️ 쿼드코어 ➡️ 헥사코어 등

스레드와 멀티스레드

실행 흐름의 단위 = 스레드 스레드의 종류에는 CPU에서 사용되는 하드웨어적 스레드
프로그램에서 사용되는 소프트웨어적 스레드 2가지가 존재

하나의 코어가 동시에 처리하는 명령어 단위
= 하드웨어적 스레드
하나의 코어로 여러 명령어를 처리하는 CPU
= 멀티스레드 프로세서

ex: 8코어 16스레드 = 코어 하나당 2개의 하드웨어 스레드 처리

인텔의 멀티스레드 기술 = 하이퍼스레딩

하나의 프로그램에서 여러 기능을 각각 스레드로 만들어
동시에 실행 가능하게 하는 독립적으로 실행되는 단위
= 소프트웨어적 스레드

명령어 병렬 처리 기법

명령어 파이프라인

공장 생산 라인같이 CPU가 명령어를 처리하는 과정을 여러 단계로 나눔 = 명령어 파이프라인

명령어 인출 ➡️ 명령어 해석 ➡️ 명령어 실행 ➡️ 결과 저장

같은 단계가 겹치는것이 아니면 각 단계를 동시에 실행 가능

명령어 파이프라인에서 동시에 명령어를 실행하는 기법 = 명령어 파이프라이닝

명령어 파이프라이닝이 높은 성능을 가져오기는 하지만 특정 상황에서 성능 향상에 실패하는 경우가 발생 = 파이프라인 위험

파이프라인 위험은 데이터 위험, 제어 위험, 구조적 위험 총 3가지 위험이 존재

명령어 1을 수행해야만 명령어 2가 수행 가능한 명령어 1에 의존적인 상태에서 무작정 동시 실행 하려고 하면 발생하는 오류 = 데이터 위험

프로그램 카운터 값에 갑작스러운 변화로 생기는 오류 = 제어 위험

제어 위험을 대비해 변화할 분기를 미리 예측한후 그 주소를 인출하는 기술 = 분기 예측

명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 CPU 부품을 사용하려 할때 발생하는 오류 = 구조적 위험

슈퍼스칼라

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

슈퍼스칼라 구조로 명령어 처리가 가능한 구조 = 슈퍼스칼라 프로세서

비순차적 명령어 처리

명령어들을 순차적으로 실행하지 않는 기법 = 비순차적 명령어 처리(OoOE)

이유? 데이터 의존성이 전혀 없는 순서를 바꿔 처리해도 수행 결과에 영향을 미치지 않는 명령어들을 재배치하여 더 효율적으로 처리하기 위함

CISC와 RISC

명령어 집합

CPU가 이해할수 있는 명령어들의 모음 = 명령어 집합, 명령어 집합 구조(ISA)

CPU가 어떤 명령어를 이해하는지에 따라 컴퓨터 구조 및 설계 방식, CPU가 이해할수 있는 명령어도 어셈블리어도 달라짐

CISC

메모리 접근하는 주소 지정 방식이 다양한 복잡하고 다양한 수의 가변 길이 명령어 집합 = CISC

장점: 적은 수의 명령어 만으로도 프로그램을 동작 시켜 메모리 공간을 절약 가능

단점: 활용하는 명령어가 워낙 복잡하고 다양한 기능을 제공하는 탓에 명령어의 크기와 실행되는 시간이 일정하지 않고,
복잡한 탓에 명령어 하나 실행하는데에 여러 클럭 주기가 필요함

∴ 파이프라인을 효율적으로 사용하기 힘듬

RISC

메모리 접근 지정 방식이 적은 짧고 규격화된 고정길이 명령어 집합 = RISC

장점: 명령어가 규격화 되어있고 명령어가 1클럭 내외로 실행되기 때문에 파이프라이닝에 최적화 되어있음
메모리에 접근하는 명령어를 load, store 두개로 제한해 메모리 접근을 단순화하고 최소화하여
CISC보다 많은 명령으로 프로그램을 작동시킴