[컴퓨터 구조/운영체제] 빠른 CPU를 위한 설계 기법

myungji·2024년 5월 1일

이 글은 한빛미디어 출판사의 '혼자 공부하는 컴퓨터 구조+운영체제(강민철 저)'를 정리한 내용입니다.

1. 클럭

클럭 속도가 높아지면 CPU는 명령어 사이클을 더 빠르게 반복한다. 실제로 클럭 속도가 높은 CPU는 일반적으로 성능이 좋다.

클럭 속도

1초에 클럭이 몇 번 반복되는지, Hz(헤르츠)단위로 측정한다. 어떤 CPU의 기본 속도가 2.5GHz이고 최대 속도가 4.9GHz라면, 기본적으로 클럭이 1초에 25억번, 순간적으로 49억번 반복된다는 뜻이다.

그렇다면, 클럭 속도를 무지막지하게 높이면 무조건 CPU가 빠르게 동작하는 것일까?

노노. 그렇지 않다. 클럭 속도를 무작정 높이면 발열 문제가 심각해진다. 따라서 클럭 속도만으로 CPU의 성능을 올리는 것에는 한계가 있다.

2. 코어와 멀티 코어

CPU의 성능을 높이는 방법 중에는 CPU의 코어와 스레드 수를 늘리는 방법도 있다.

코어란?

코어를 이해하려면 현대적인 관점에서 CPU를 재해석해야 한다.

전통적인 관점에서 '명령어를 실행하는 부품'인 CPU는 원칙적으로 하나만 존재했으나, 기술의 발전에 따라 CPU 내부에 '명령어를 실행하는 부품'은 얼마든지 만들 수 있게 되었다.

그래서 오늘날의 CPU는 '명령어를 실행하는 우리가 지금까지 CPU의 정의로 알고 있었던 '명령어를 실행하는 부품'은 오늘날 코어라는 용어로 사용된다.

즉, 코어는 CPU 내에서 명령어를 실행하는 부품으로 여러 개가 있을 수 있다.
8코어(Core)는 CPU 내에 명령어를 실행하는 부품이 8개 있는 것이다.

멀티코어?

코어를 여러 개 포함하고 있는 CPU를 멀티코어 CPU 또는 멀티코어 프로세서라고 부른다. 당연히 멀티코어는 단일코어보다 빠르다.

하지만 그렇다고 해서 코어를 100개로 늘리면 연산 처리 속도가 100배로 빨라지는 것은 아니다. CPU의 연산 속도가 꼭 코어 수에 비례하여 증가하지는 않는다. 코어마다 처리할 연산이 적절히 분배되지 않는다면 코어 수에 비례하여 연산 속도가 증가하지 않는다.

또한 처리하고자 하는 작업량보다 코어 수가 지나치게 많아도 성능에 크게 영향이 없다.

중요한 것은 코어마다 처리할 명령어들을 얼마나 적절하게 분배하느냐 이고 이에 따라 연산 속도는 크게 달라진다.

3. 스레드와 멀티스레드

스레드?

사전적 의미는 '실행 흐름의 단위'이지만 CPU에서 사용되는 스레드와 프로그래밍에서 사용되는 스레드는 용례가 다르다.

CPU에서 사용되는 스레드 == 하드웨어적 스레드
프로그램에서 사용되는 스레드 == 소프트웨어적 스레드

하드웨어적 스레드

하나의 코어가 동시에 처리하는 명령어 단위.
지금까지 예시로 든 CPU는 1코어 1스레드 CPU, 즉 한 번에 하나씩 명령어를 실행하는 CPU였지만, 여러 스레드를 지원하는 CPU는 하나의 코어로도 여러 개의 명령어를 동시에 실행할 수 있다. 2코어 4스레드 CPU의 경우 한 번에 4개의 명령어를 처리할 수 있고, 8코어 16스레드 CPU의 경우 한 번에 16개의 명령어를 처리할 수 있다.

이처럼 하나의 코어로 여러 명령어를 동시에 처리하는 CPU를 멀티스레드 프로세서 혹은 멀티스레드 CPU라고 한다.

참고로, 인텔의 멀티스레드 기술은 '하이퍼스레딩'이라고 하는데 인텔이 자신들의 멀티스레드 기술에 명칭을 부여한 것이다.

소프트웨어적 스레드

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

하나의 프로그램은 실행되는 과정에서 한 부분만 실행할 수도 있지만 여러 부분이 동시에 실행될 수도 있다. 여러 기능들을 작동시키는 코드를 각각의 스레드로 만들면 동시에 실행할 수 있다.
한 번에 1개의 명령어를 처리하는 1코어 1스레드 CPU도 하드웨어적 스레드를 수십 개 실행해 프로그램의 여러 부분을 동시에 실행할 수 있다.

멀티스레드 프로세서

멀티스레드 프로세서는 1개의 코어로 여러 개의 명령어를 동시에 처리하는 CPU.

이런 CPU를 만들려면 프로그램 카운터, 스택 포인터, 메모리 버퍼 레지스터, 메모리 주소 레지스터와 같이 하나의 명령어를 처리하기 위해 꼭 필요한 레지스터를 여러 개 가지고 있으면 된다.

CPU 입장에서 멀티스레드 프로세서는 하나의 코어로 여러 개의 명령어를 동시에 처리하는 것이지만, 메모리 속 프로그램 입장에서는 한 번에 하나의 명령어를 처리하는 CPU나 다름없다.

왜?
예를 들어 2코어 4스레드 CPU는 한 번에 4개의 명령어를 처리할 수 있지만, 프로그램 입장에서는 한 번에 하나의 명령어를 처리하는 CPU가 4개 있는 것처럼 보인다. 그래서 하드웨어 스레드를 논리 프로세서라고도 부른다.

예를 들어 4코어 8스레드 CPU의 경우, 실제로 명령어를 처리하는 부품인 코어는 4개이지만, 메모리 속 프로그램이 보기에는 한 번에 하나의 명령어를 처리하는 부품이 마치 8개 있는 것처럼 보이는 것이다.

코어 - 명령어를 실행할 수 있는 하드웨어 부품
스레드 - 명령어를 실행하는 단위
멀티코어 프로세서 - 코어가 2개 이상 있는 CPU
멀티스레드 프로세서 - 코어 1개에 스레드 여러 개인 CPU


출처 - '혼자 공부하는 컴퓨터 구조+운영체제(한빛미디어, 강민철 저)'

profile
iOS 초보바리

0개의 댓글