본문 바로가기
취준

[컴퓨터 구조] 빠른 CPU를 위한 설계 기법

by 박매트 2024. 5. 1.

이 글은 혼자 공부하는 컴퓨터 구조+운영체제 - 강민철 저자의 책을 정리한 글입니다.

 

빠른 CPU를 위한 설계 기법

클럭과 코어, 스레드라는 개념을 학습하고, 빠른 CPU를 만드는 설계 기법인 멀티 코어와 멀티스레드란 무엇인지 이해합니다. 

 

클럭

조금이라도 더 빠른 CPU를 만들려면 어떻게 설계해야 할까요?

 

1. 컴퓨터 부품들은 '클럭 신호'에 맞춰 일사분란하게 움직인다.

2. CPU는 '명령어 사이클'이라는 정해진 흐름에 맞춰 명령어들을 실행한다.

 

클럭 신호가 빠르게 반복되면 CPU를 비롯한 컴퓨터 부품들은 빠른 박자에 맞춰 움직일 것이다. 

즉, 클럭 속도가 높아지면 CPU는 명령어 사이클을 더 빠르게 반복할 것이고, 다른 부품들도 그에 발맞춰 더 빠르게 작동할 것이다.

 

실제로 클럭 속도가 높은 CPU는 일반적으로 성능이 좋다. 그래서 클럭 속도는 CPU 속도 단위로 간주되기도 합니다.

 

클럭 속도

헤르츠 단위로 측정합니다. 1초에 클럭이 몇 번 반복되는지를 나타냅니다. 1초에 한 번 반복되면 CPU 클럭 속도는 1Hz 인것이고, 1초에 100번 반복되면 100Hz인 셈입니다.

 

잠깐 ! 클럭 속도는 일정하지 않다.

클럭이라는 단어만 보고 매번 일정하게 유지된다고 생각할 수 있지만, 실제로는 그렇지 않습니다. CPU는 계속 일정한 클럭 속도를 유지하기 보다는 고성능을 요하는 순간에는 순간적으로 클럭 속도를 높이고, 그렇지 않을 때는 클럭 속도를 낮추기도 합니다. 강제로 최대 클럭 속도를 끌어올리는 기법은 오버클럭킹이라고 합니다.

 

그렇다고 클럭 속도를 무지막지하게 높이면 CPU가 빨라질까요?

- 그렇지는 않습니다. 게임이나 영상 편집과 같이 CPU에 무리가 가는 작업을 장시간 하면 발열 문제가 발생합니다. 무작정 높이면 발열 문제가 심각해집니다. 

- 클럭 속도를 높이는 것은 분명 CPU를 빠르게 만들지만, 클럭 속도만으로 CPU의 성능을 올리는 것에는 한계가 있습니다.

 

코어와 멀티코어

클럭 속도를 높이는 방법 외에 CPU의 성능을 높이는 방법에는 어떤 것들이 있나요? 대표적인 해결책으로 CPU의 코어와 스레드 수를 늘리는 방법이 있습니다. 먼저 코어를 늘리는 방법에 대해 알아봅시다.

 

코어를 이해하려면 현대적인 관점에서 CPU라는 용어를 재해석해야 합니다.

앞서 CPU를 '명령어를 실행하는 부품' 이라고 소개햇습니다.오늘날 CPU는 많은 기술적 발전을 거듭하였고, 그 결과 CPU 내부에는 '명령어를 실행하는 부품'을 얼마든지 만들 수 있게 되었습니다. 

 

'명령어를 실행하는 부품' -> 코어 라는 용어로 사용됩니다.

오늘날의 CPU는 단순히 '명령어를 실행하는 부품'에서 '명령어를 실행하는 부품을 여러 개 포함하는 부품'으로 명칭의 범위가 확장되었습니다.

 

코어를 여러 개 포함하고 있는 CPU를 멀티코어 CPU 또는 멀티코어 프로세서 라고 부릅니다. 이는 CPU 내에 명령어를 처리하는 일꾼이 있는 것과 같습니다. 

 

2.4GHz인 단일 코어 CPU <<<< 1.9GHz인 멀티코어 CPU

 

CPU의 연산 속도가 꼭 코어 수에 비례하여 증가하지는 않습니다. 코어마다 처리할 연산이 적절하게 분배되지 않는다면 코어 수에 비례하여 연산 속도가 증가하지 않습니다.

 

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

 

스레드와 멀티스레드

CPU와 멀티스레드 기술을 이해하려면 우선 '스레드'라는 용어를 이해해야 합니다.

 

스레드의 사전적 의미는 '실행 흐름의 단위'입니다. 

CPU에서 사용되는 하드웨어적 스레드가 있고, 프로그램에서 사용되는 소프트웨어적 스레드가 있습니다.

 

하드웨어적 스레드

스레드를 하드웨어적으로 정의하면  '하나의 코어가 동시에 처리하는 명령어 단위'를 의미합니다. 여러분이 CPU에서 사용하는 스레드라는 용어는 보통 CPU 입장에서 정의된 하드웨어적 스레드를 의미합니다. 우리가 지금까지 배운 CPU는 1코어 1스레드 CPU였습니다. 즉, 명령어를 실행하는 부품이 하나 있고, 한 번에 명령어를 실행하는 CPU를 가정한 것입니다.

 

반면, 여러 스레드를 지원하는 CPU는 하나의 코어로도 여러 개의 명령어를 동시에 실행할 수 있습니다. 

2코어 4스레드 : 명령어를 실행하는 부품을 두 개 포함하고, 한 번에 네 개의 명령어를 처리할 수 있는 CPU를 의미합니다.

 

하나의 코어로 여러 명령어를 동시에 처리하는 CPU를 멀티스레드 프로세서 또는 멀티스레드 CPU라고 합니다.

8코어 16스레드 -> 코어 하나 당 두 개의 하드웨어 스레드를 처리한다.

 

멀티스레드 프로세서 란 여러 개의 하드웨어적 스레드를 지원하는 CPU를 말합니다.

멀티스레드와 함께 여러분들이 자주 접하게 될 용어로 하이퍼스레딩 이라는 용어도 있습니다.

 

소프트웨어적 스레드

소프트웨어적으로 정의된 스레드는 '하나의 프로그램'에서 독립적으로 실행하는 단위'를 의미합니다. 여러분이 프로그래밍 언어나 운영체제를 학습할 때 접하는 스레드는 보통 소프트웨어적으로 정의된 스레드를 의미합니다.

 

하나의 프로그램은 실행되는 과정에서 한 부분만 실행될 수도 있지만, 프로그램의 여러 부분이 동시에 실행될 수도 있습니다.

 

멀티스레드 프로세서

여러 명령어를 동시에 처리하는 기술인 하드웨어적 스레드 입니다. 

소프트웨어적으로 정의도니 스레드는 스레드, CPU에서 사용되는 스레드는 하드웨어 스레드 라고 지칭하겠습니다.

 

실제로 설게하는 일은 매우 복잡하지만, 가장 큰 핵심은 레지스터입니다. 하나의 코어로 여러 명령어를 처리하도록 만들려면 하나의 명령어를 처리하기 위해 필요한 레지스터를 여러개 가지고 있으면 됩니다. 

 

ex. 프로그램 카운터가 두 개 있다면 '메모리에서 가져올 명령어 주소' 를 두 개 지정할 수 있고,

스택 포인터가 두 개 있다면 두 개의 스택을 관리할 수 있을 것입니다.

 

레지스터 세트가 한 개인 CPU는  한 개의 명령어를 처리하기 위한 정보들을 기억할 뿐이지만, 레지스터 세트가 두 개인 CPU는 두 개의 명령어를 처리하기 위한 정보들을 기억할 수 있습니다.

 

2코어 4스레드 CPU는 한 번에 네 개의 명령어를 처리할 수 있는데, 프로그램 입장에서 봤을 땐 한 번에 하나의 명령어를 처리하는 CPU가 4개 있는 것처럼 보입니다. 그래서 하드웨어 스레드를 논리 프로세서 라고 부릅니다.

 

코어는 명령어를 실행할 수 있는 '하드웨어 부품'

스레드는 '명령어를 실행하는 단위'

멀티코어 프로세서는 명령어를 실행할 수 있는 하드웨어 부품이 CPU안에 두 개 이상 있는 CPU

멀티스레드 프로세서는 하나의 코어로 여러 개의 명령어를 동시에 실행할 수 있는 CPU

 

마무리

  • 클럭 속도가 높은 CPU는 빠르게 동작합니다.
  • 코어란 CPU 내에서 명령어를 실행하는 부품입니다.
  • 멀티코어 프로세서란 여러 개의 코어를 포함하는 CPU를 말합니다.
  • 스레드에는 하드웨어적 스레드와 소프트웨어적 스레드가 있습니다.
  • 멀티스레드 프로세서란 하나의 코어로 여러 개의 명령어를 동시에 실행할 수 있는 CPU를 말합니다.