[CS] 컴퓨터 구조 - CPU 성능 향상

이상혁·2023년 9월 13일
0

Computer science

목록 보기
5/15
혼자 공부하는 컴퓨터 구조 + 운영체제를 읽고 공부한 내용입니다.

컴퓨터의 성능을 높히기 위해서는 CPU의 성능을 높히는 것이 중요하다.
성능을 높히기 위한 방법이 여러가지 있다.

빠은 CPU를 위한 설계 기법

클럭

컴퓨터는 클럭이라는 신호에 맞춰서 움직인다.
이 클럭 속도가 높아지면 CPU가 더 빠르게 움직일 것이다.
그래서 클럭의 속도는 CPU의 속도단위이다.

클럭 속도의 단위는 Hz(헤르츠)이다.
이 Hz가 높을 수록 속도가 빠르다.
그래서 CPU의 속도를 높히기 위해서 클럭의 속도를 높힌다.
하지만 클럭의 속도를 계속 높히면 발열의 문제가 생긴다.

코어와 멀티코어

코어는 CPU에서 명령어를 실행하는 부품이다.
본래 전통적인 CPU는 CPU자체가 명령어를 처리하는 역할을 했다.
현대에서는 코어가 생기면 CPU안에 코어를 여러 개 만들 수 있게 되었다.
즉, 일을 할 수 있는 부품이 여러 개 생기는 것이다.

이러한 코어가 여러 개 있는 CPU를 멀티코어 혹은 멀티코어 프로세서 라고 한다.
이러한 코어의 갯수가 많으면 많은 일을 빨리 처리할 수 있지만
꼭 코어의 개수에 비례해서 속도가 올라가지는 않는다.

만약, 4명이 할 일을 충분한 일을 8명이 한다면 4명은 일을 하고 4명은 붕 뜨게 될 것이다.
이렇게 코어에 명령어를 어떻게 적절하게 배분할 것인가 매우 종요하다.

스레드와 멀티스레드

스레드는 하드웨어적 스레드소프트웨어적 스레드가 있다.
여기서는 하드웨어적 스레드를 보겠다.

하드웨어적 스레드는 하나의 코어가 여러 명령어를 동시에 처리하는 것을 말한다.
이를 멀티스레드 혹은 멀티스레드 CPU라고 한다.

멀티스레드 프로세서

멀티스레드 프로세서의 핵심은 레지스터이다.
명령어를 실행하도록 해주는 프로그램 카운터, 메모리 주소 레지스터, 메모리 버퍼 레지스터, 명령어 레지스터와 같은 레지스터들이 여러개가 필요하다.
만약에, 이 레지스터들이 하나의 세트로 2개가 있다면 ALU와 제어장치가 이 두개의 세트의 명령어를 실행하면 두 개의 명령어가 실행이 된다.

이를, 프로그램 입장에서 보면 한 코어에서 2개의 명령어가 실행이 되는 것이 아니라 2개의 CPU가 있는 것처럼 보인다.
그래서 하드웨어적 스레드를 논리 프로세서라고 하기도 한다.

명령어 병렬 처리 기법

명령어 병렬 처리 기법은 CPU를 한시도 쉬지 않고 작동하는 기법을 말한다.
이 기법에는 명령어 파이프라인, 슈퍼스칼라, 비순차적 명령어 처리가 있다.

명령어 파이프라인

명령어 파이프라인은 명령어를 처리하는 과정을 클럭 단위에 맞춰 나눌 수 있다.
과정 중에 각 단계가 겹치지 않으면 명령어를 동시에 실행하는 것이 가능하다는 것이 핵심이다.
공장의 생산 라인처럼 명령어들을 동시에 넣고 처리하는 기법을 명령어 파이프라이닝이라고 한다.

명령어 파이프라이닝이 실패하는 경우도 있는데
이러한 상황을 파이프라인 위험이라고 한다.
파이프라인 위험에는 데이터 위험, 제어 위험, 구조적 위험이 있다.

데이터 위험은 명령어 간의 데이터 의존성에 의해 발생한다.
만약 명령어 A와 명령어 B가 같은 데이터를 의존하고 있으면 두 명령어를 동시에 실행하려고 하면 제대로 작동을 하지 않을 수 있다.

제어 위험은 분기등으로 인한 프로그램 카운터의 갑작스러운 변화에 의해서 발생한다.
예를 들어, 1번 명령어를 실행을 하고 파이프라인에 따라 2번 명령어를 단계적으로 실행을 하고 있는데
분기로 인해서 10번 명령어를 실행을 해야 한다면,
2번 명령어를 실행하는 과정은 헛수고가 되는 것이다.

이를 막기 위해서 프로그램이 어디로 분기할지 미리 예측하는 프로그램인 분기 예측을 통해서 예방할 수 있다.

구조적 위험은 명령어가 겹쳐 실행하면서 다른 명령어끼리 같은 부품, ALU, 레지스터 등 CPU내에 부품을 동시에 사용을 하려고 할 때 발생한다.

슈퍼스칼라

슈퍼스칼라는 명령어 파이프라인을 여러 개 포함한 구조이다.
슈퍼 스칼라는 파이프라인이 여러 개 있는 것으로 명령어 파이프라인의 위험이 여러 군데 발생을 할 수 있다.
그래서 설계하기가 더욱 까다롭다.

비순차적 명령어 처리

위에 명령어 파이프라이닝과 슈퍼스칼라는 순차적으로 실행을 하는 방법이다.
비순차적 명령어 처리는 명령어 순서를 바꾸어 실행해도 되는 상관없는 명령어를 먼저 실행해서 파이프라인이 멈추지 않게 해주는 기법입니다.
예를 들어
1번 명령어의 값이 2번 명령어에 필요해서 1번 명령어가 끝날 때 까지 기다려야 한다면
1번과 2번 명령어와 관계가 없는 3번 명령어를 실행하고 후에 1번 명령어가 끝나면 2번 명령어를 실행하는 것이다.

CISC와 RISC

CPU가 이해할 수 있는 명령어들의 모음이 있다.
이 명령어 모음을 ISA라고 한다.
이 ISA가 다르면 CPU가 이해할 수 있는 어셈블리어도 달라진다.
ISA에는 CISCRISC가 있다.

CISC

CISC는 복잡하고 다양한 명령어를 사용한다.
그래서 명령어의 크기나 형태가 다양하다.
CISC를 가변 길이 명령어라고 부른다.
다양하고 복잡한 명령어가 있기 때문에 명령어 몇 개로도 프로그램을 사용할 수 있어서 차지하는 메모리의 크기가 작다.

하지만 길이 일정하지 하지 않아 실행되는 시간이 일정하지 않다.
그래서 파이프라인에 적용을 하는데 어려움이 있다.
그리고 실제로 사용되는 명령어들은 몇개 되지 않는다는 것이다.

RISC

RISC는 CISC의 단점을 매우기 위해 나왔다.
RISC는 규격화된 명령어로 고정 길이 명령어이다.
그래서 파이프라인에 적용하기가 좋다.
그리고 필요한 명령어만을 사용한다.

하지만 반대로 프로그램을 실행할 때 명령어를 상대적으로 많이 사용해서 차지하는 메모리가 크다.

profile
개발 공부 하기 위해 만든 블로그

0개의 댓글