5. CPU 성능 향상 기법

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

클럭

  • 클럭 속도가 빠르게 반복되면 CPU 를 비롯한 컴퓨터 부품들은 그만큼 빠른 박자에 맞춰 움직이게 된다. 즉, 클럭 속도가 높아지면 CPU 는 명령어 사이클을 더 빠르게 반복할 것이고 다른 부품도 그에 맞추어 더 빠르게 작동하게 된다.

  • 실제로 클럭 속도가 높은 CPU 의 성능이 일반적으로 좋다.

  • 하지만, 클럭 속도만 빠르다고 CPU 가 무조건적으로 빨라지는 것은 아니다. -> 클록 속도를 무작정 높이면 발열 문제가 더 심각해 진다. 이처럼 클럭 속도를 높이는 것은 CPU 를 빠르게 만들지만 클럭 속도 만으로 CPU 의 성능을 높이는데 한계가 있다.

코어와 멀티코어

  • CPU 의 의미인 '명령어를 실행하는 부품' 은 오늘날 '코어' 라는 용어로 사용된다.

  • 코어는 명령어를 실행하는 부품(ALU, 제어장치, 레지스터) 을 모두 포함하고 있다.

  • 코어를 여러개 포함하고 있는 CPU 를 멀티코어 CPU, 멀티코어 프로세서 라고 부른다.

  • 코어의 수에 비례해서 CPU 가 무조건적으로 빨라지는 것은 아니다. -> 코어마다 처리할 연산이 적절하게 분배되지 않는다면, 코어 수에 비례하여 연산 속도가 증가하지 않는다. -> 또한 처리하고자 하는 작업량에 비해 코어 수가 지나치게 많아도 성능에는 크게 영향이 없다.

스레드와 멀티스레드

  • 하드웨어 스레드 : 하나의 코어가 동시에 처리하는 명령어 단위 -> 하나의 코어로 여러개의 명령어를 동시에 처리하는 CPU 를 멀티스레드 CPU, 멀티스레드 프로세서 라고 부른다. -> 멀티스레드 CPU 는 ALU 와 제어장치가 두 개의 레지스터 세트에 저장된 명령어를 해석하고 실행한다.

  • 소프트웨어 스레드 : 하나의 프로그램에서 독립적으로 실행되는 단위

멀티스레드 프로세서

  • 멀티스레드 프로세서를 설계하는 일은 매우 복잡하지만, 가장 큰 핵심은 레지스터이다. -> 가령 프로그램 카운터를 2개 가지고 있다면, 메모리에 가져올 주소를 2개 저장할 수 있다.

  • 코어 내에 하나의 레지스터 세트를 하드웨어 스레드라고 부른다.

  • 하드웨어 스레드를 이용해 하나의 코어로도 여러 명령어를 동시에 처리할 수 있다고 했다. -> 메모리 속 프로그램 입장에서 하나의 하드웨어 스레드는 '한번에 하나의 명령어를 저장하는 스레드' 와 차이가 없다.

  • 때문에, 하드웨어 스레드를 논리 프로세서 라고 부르기도 한다.

2. 명령어 병렬 처리 기법

순차적 명령어 처리 기법

명령어 파이프라인

  • 명령어 처리 과정을 클럭 단위로 나누어 보면 다음과 같이 나눌 수 있다.

    • 명령어 인출

    • 명령어 해석

    • 명령어 실행

    • 결과 저장

  • 중요한 점은 같은 단계가 겹치지 않는다면, CPU 는 각 단계를 동시에 처리할 수 있다는 것이다.

  • 이처럼 마치 공장 생산 라인과 같은 명령어들을 명령어 파이프라인 이라고 한다.

명령어 파이프라인의 위험

  • 데이터 위험 : 데이터에 의존적인 서로 다른 명령어를 동시에 실행하려고 하면, 데이터가 꼬이게 되는 케이스

  • 제어 위험 : 주로 분기로 인한 프로그램 카운터의 갑작스러운 변화 -> 프로그램 카운터가 변하게 되면, 기존에 명령어 파이프라인에서 처리중이던 명령어들이 쓸모 없어진다.

  • 구조적 위험 : 명령어들이 겹쳐 실행하는 과정에서 ALU, 레지스터 등과 같은 CPU 부품을 사용하려 할 때

슈퍼스칼라

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

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

  • 슈퍼스칼라 프로세서는 이론적으로는 파이프라인의 갯수와 비례해 성능이 증가하지만 그만큼 복잡도가 높아져, 고도로 설계되어야 한다.

비순차적 명령어 처리

  • 순차적 처리 기법은 이전 명령어 실행이 끝나기 전까지 기다려야만 한다.

  • 반대로 비순차적 명령어 처리 방법은 비동기로 처리해 파이프라인이 멈추는 것을 방지한 기법이다.

3. CISC, RISC

명령어 집합

  • CPU 가 이해할 수 있는 명령어들의 모음을 명령어 집합, 명령어 집합 구조(ISA) 라고 말한다. -> CPU 마다 ISA 가 다를 수 있다. -> ISA 는 CPU 의 언어이다. -> 동시에 CPU 를 비롯한 하드웨어가 소프트웨어를 어떻게 이해 할지에 대한 약속

  • 명령어(ISA) 가 달라지면 어셈블리어(CPU 와 1:1 로 대응하는 저급언어) 도 달라진다.

  • ISA 가 달라지면 나비효과 처럼 많은 것이 달라진다. -> 명령어 해석 방식, 사용되는 레지스터의 종류와 갯수, 메모리 관리 방법 등..

CISC

  • CISC 는 복잡하고 다양한 명령어들을 활용하는 CPU 설계 방식으로, 가변 길이 명령어를 사용한다.

  • 장점 : 어셈블리어 코드가 짧아서 메모리를 최대한 아끼며 개발해야 했던 시기에 유행했다.

  • 단점 : 명령어가 워낙 다양하고, 복잡해 명령어의 크기와 실행되기까지의 시간이 일정하지 않다. -> 명령어 처리 시간은 가급적 1클럭으로 일정해야 한다. -> 클럭이 일정하지 않다는 것은 파이프라인이 효율적으로 작동하지 않는다는 것을 의미한다.

RISC

CISC 의 한계점

  • 빠른 처리를 위해서, 명령어 파이프라인을 십분 활용해야 하고, 원활한 파이프라이닝을 위해 '명령어의 길이와 수행 시간이 짧고 규격화' 되어 있어야 한다.

  • 어차피 자주 쓰이는 명령어만 줄 곧 사용되기 때문에, 복잡한 기능을 지원하는 명령어를 추가하기보다 '자주 쓰이는 기본적인 명령어를 작고 빠르게 만드는 것' 이 중요하다.

RISC

  • RISC 는 CISC 에 비해 명령어의 종류가 적고, 짧고 규격화 된 명령어(되도록 1클럭 내외)를 지향한다.

  • 고정 길이 명령어를 활용한다.

  • RISC 는 메모리 접근을 단순화, 최소화하는 대신 레지스터를 적극 활용한다. -> 그렇기에 CISC 보다 레지스터를 이용하는 연산이 많고, 일반적인 경우보다 범용 레지스터의 경우도 많다. -> 반대로 사용 가능한 명령어 개수가 CISC 보다 적기 때문에, RISC 는 CISC 보다 많은 명령으로 프로그램을 작동시킨다.

Last updated