공부/컴퓨터구조

[ 컴퓨터구조 ] CPU 성능 향상 기법

haena02 2023. 2. 5. 21:26
반응형

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

 

1.1 클럭

 

컴퓨터 부품들은 클럭신호에 맞춰 움직인다.

그렇기 때문에 클럭 속도가 높은 CPU는 일반적으로 성능이 좋다. 

 

클럭 속도는 헤르츠(Hz) 단위로 측정한다.

이는 1초에 클럭이 몇 번 반복되는지를 나타난다. 

 

보통 클록의 속도는 일정하지 않고 고성능리 필요할 때는 클럭속도를 높이고 그렇지 않을 때는 유연하게 속도를 낮춘다.

 

1.2 코어와 멀티코어

 

클럭속도를 아무리 올려도 CPU의 성능을 올리기엔 한계가 있다.

이에 대한 해결방법으로 CPU의 코어와 스레드 수를 늘리는 방법이 있다. 

 

지금까지는 한 CPU에 1코어만 있다고 생각했지만, 

요즘에는 '명령어를 실행하는 부품'을 코어라고 부르고 CPU에는 이 코어가 여러개 있기도하다.

이렇게 코어를 여러개 포함하고 있는 CPU를 멀티코어 CPU 혹은 멀티 코어 프로세서라고 부른다.

 

1.3 스레드와 멀티 스레드

 

스레드는 하드웨어적 스레드와 소프트웨어적 스레드로 의미가 나뉜다.

 

하드웨어적 스레드는 하나의 코어가 동시에 처리하는 명령어 단위를 의미한다.

예를 들어 2코어 4스레드하고 하면 한 CPU에 2개의 코어가 들어있고 한 코어당 2개의 스레드를 처리한다고 보면된다. 

이처럼 멀티스레드 프로세서 또는 멀티 스레드 CPU라고 한다. 

특히 인델의 멀티스레드 기술을 하이퍼 스레딩이라고 한다,

 

소프트웨어적 스레드는 하나의 프로그램에서 독립적으로 실행되는 단위를 의미한다. 

여러 스레드가 독립적으로 실행된다면 프로그램이 더욱 유연하게 움직일 수 있다. 

 

멀티스레드 프로세서를 설계하는데에 가장 큰 핵심은 레지스터이다.

하나의 코어로 여러 명령어를 동시에 처리하도록 만들려면 프로그램 카운터, 스택 포인터 등 하나의 명령어를 처리하기 위해 꼭 필요한 레지스터를 여러개 가지고 있으면 된다 

 

 


2. 명령어 병렬 처리 기법 (ILP)

 

좋은 CPU를 만드는 것도 중요하지만 CPU가 놀지 않고 시간을 알뜰하게 쓰며 작동하게 만드는 것도 중요하다.

명령어를 동시에 처리하여 CPU를 한 시도 쉬지 않고 작동시키는 기법인 명령어 병령 처리 기법을 알아보자.

 

2.1 명령어 파이프라인

 

명령어 처리과정을을 클럭 단이로 나누어 보면 일반적으로 아래와 같이 나눌 수 있다. 

1. 명령어 인출

2. 명령어 해석

 

 

3. 명령어 실행

4. 결과저장

 

 

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

명령어 1의 1단계를 실행하고 2단계로 넘어가면 그동안 또 명령어2 의 1단계를 실행하고 

명령어 1이 3단계 명령어2가 2단계로 넘어가면 또 명령어3의 1단계를 실행할 수 있다. 

 

이렇게 하면 공장처럼 효율적으로 실행시킬 수 있지만 특정 상황에서 성능향상에 실패하는 경우도 있다.

이러한 상황을 파이프라인 위험이라고 한다. 

파이프라인 위험에는 데이터 위험, 제어위험, 구조적위험으로 구정되더있다. 

 

데이터 위험

데이터 위험은 데이터 의존성에 의해 발생한다. 

명령어 1이 R1←R2+R3 이고 명령어 2 가 R4←R1+R5 라면 명령어1이 실행되어야 명령어2가 실행될 수 있다.

이렇게 데이터 의존적인 명령어를 무작정 동시에 실행하려고 하면 제대로 동작하지 않는다.

 

제어 위험

제어위험은 주로 분기 등으로 인한 프로그램 카운터의 갑작스러운 변화에 의해 발생한다.  

프로그램 카운터는 현재 실행중인 명령어의 다음주소로 갱신되는데 이때 프로그램 카운터에 갑작스러운 변화가 생긴다면 명령어 파이프 라인에 미리 가지고 와서 처리하고 있던 명령어는 쓸모가 없어진다. 

이를 예방하기 이해 분기 예측 이라는 기술을 사용하기도한다. 

 

구조적 위험 (자원위험)

구조적 이험은 명령어들이 겹쳐 실행되는 과정에서 동시에 CPU부품을 사용하려고 할 때 발생한다. 

 

 

2.2 슈퍼스칼라

 

여러개의 파이프 라인을 이용하는 수조를 슈퍼스칼라라고 한다. 

슈퍼스칼라 구조로 명령어 처리가 가능한 CPU를 슈퍼스칼라 프로세서 또는 슈퍼스칼라 CPU라고 한다.

 

이론적으로 파이프라인 개수에 비례하여 프로그램 처리 속도가 빨라진다. 

하지만 개숙 들어날수록 파이프라인 위험이 증가하여 점점 더 고도의 설계 기술을 요구한다.

 

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

 

비순차적 명령어 처리 기법은 명령어들이 순차적으로 실행하지 않는 기법이다.

지금까지 나왔던 기법들은 모두 순차적인 처리를 상정한 방법이었다.

하지만 순차적으로만 처리한다면 여러 위험을 만났을 때 멈춰버리게 된다. 

이 때 순서를 바꿔도 무방한 명령어들을 먼저 실행하는 방법이 비순차적 명령어 처리라고 한다. 

 

 


 

 

3. CISO 와 RISC

 

위에서 배운 파이프라이닝 기법을 사용하기 위해서는 명령어가 파이프라이닝에 적합하게 생겨야한다.

 

3.1 명령어 집합

 

CPU가 이해할 수 있는 명령어들의 모음을 명령어 집합 도는 명령어 집합구조(ISA)라고 한다. 

CPU마다 ISA는 다를 수 있다. 명령어가 다르면 어셈블리어도 달라진다. 

ISA가 다르면 나비 효과로 레지스터의 종류와 개수, 메모리 관리방법 등 많은 것들이 달라진다.

실제로 CPU 설계에도 큰 영향을 미친다. 

 CISO와 RISC는 ISA의 양대 산맥이라고 한다.

 

3.2 CISO

 

CISO는 complex instruction set computer의 약자이다.

이를 그대로 해석하면 복잡한 명령어 집합을 활용하는 컴퓨터를 의미한다.

x86과  x86-64 는 대표적인  CISC기반의 ISA이다. 

 

복잡한 명령어를 사용하기 때문에 명령어를 많이 사용할 필요는 없다.

하지만 그만큼 명령어의 종류가 많고 명령어의 크기와 실행시간이 일정하지 않다.

 

명령어 파이프라인을 쓰려면 각 단계가 실행되는 시간이 1클럭 이내로 동작해야하는데, CISO가 활용하는 명령어는 수행시간이 매번 달라 파이프라인을 사용하기에 적합하지 않다. 

파이프라인을 사용하지 못한다는것은 매우 큰 약점이고, 이 때문에 CPU의 성장에 한계가 있다.

 

3.3 RISO

 

RISO는 Reducesd Instruction Set Computer의 약자이다.

이름과 같이 CISO에 비해 명령어의 종류가 적다.

또, 짧고 규격과되어있고 1클럭 내외로 실행된다. 

그렇기 때문에 고정 길이 명령어를 활용한다

1클럭 내외로 실행디기 때문에 파이프라인을 사용하기 아주 적합하다. 

 

RISO는 메모리에 접근하는 명령어를 load와 store 두개로 제한할 만큼 메모리 접근을 단순화학 최소화한다.

그렇기에 레지스터를 더욱 적극적으로 활용한다.

 

 

 

 

 

반응형