1. 클럭

여러분이 CPU를 설계하는 엔지니어라고 가정해보자. 여러분이 해야 할 일은 조금이라도 더 빠른 CPU를 만드는 일이다. 그렇다면 CPU를 어떻게 설계해야 할까?

우선 4장에서 학습한 내용을 상기해보자. 아래와 같은 내용을 학습했었다.

클럭 신호가 빠르게 반복되면 CPU를 비롯한 컴퓨터 부품들은 그만큼 빠른 박자에 맞춰 움직일 것이다. 즉, 클럭 속도가 높아지면 CPU는 명령어 사이클을 더 빠르게 반복할 것이고, 다른 부품들도 그에 발맞춰 더 빠르게 작동할 것이다. 실제로 클럭 속도가 높은 CPU는 일반적으로 성능이 좋다. 그래서 클럭 속도는 CPU 속도 단위로 간주되기도 한다.

클럭 속도는 헤르츠(Hz) 단위로 측정한다. 이는 1초에 클럭이 몇 번 반복되는지를 나타낸다. 가령 클럭이 ‘똑-딱’ 하고 1초에 한 번 반복되면 CPU 클럭 속도는 1Hz인 것이고, 클럭이 1초에 100번 반복되면 CPU 클럭 속도는 100Hz인 셈이다.

그럼 클럭 속도를 무지막지하게 높이면 무조건 CPU가 빨라질까? 안타깝게도 그렇지는 않다. 그래픽이 많이 요구되는 게임이나 영상편집과 같이 CPU에 무리가 가는 작업을 장시간 하면 컴퓨터가 뜨겁게 달아오르는 것을 경험해 본 적이 있을 것이다. 클럭 속도를 무작정 높이면 이러한 발열 문제가 더 심각해진다.

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

<aside> 🗒️ 클럭의 속도는 일정할까?

클럭이라는 단어만 보고 시계를 떠올려 클럭 속도가 매번 일정하게 유지된다고 생각할 수도 있지만, 실제로는 그렇지 않다. CPU를 보게되면 기본 클럭 속도(Base)와 최대 클럭 속도(Max)로 나뉘어 있다. 이처럼 CPU는 계속 일정한 클럭 속도를 유지하기보다는 고성능을 요하는 순간에는 순간적으로 클럭 속도를 높이고, 그렇지 않을 때는 유연하게 클럭 속도를 낮추기도 한다. 최대 클럭 속도를 강제로 더 끌어올릴 수 있는데, 이런 기법을 오버클럭킹(overclocking)이라고 한다.

</aside>

2. 코어와 멀티코어

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

우선 용어 정리가 필요하다. CPU를 보면 ‘코어(Core)’가 나와있다. 보통 컴퓨터를 구매하기 위해 CPU 사양을 살펴보면 ‘듀얼 코어’, ‘쿼드 코어’와 같은 용어를 심심찮게 접할 수 있다. 그렇다면 코어가 무엇인지 알아보도록 하자.

코어를 이해하려면 현대적인 관점에서 CPU라는 용어를 재해석 해야 된다. 앞서 CPU를 ‘명령어를 실행하는 부품’이라고 소개했다. 많은 전공 서적들의 전통적인 관점에서 ‘명령어를 실행하는 부품’은 원칙적으로 하나만 존재했다. 하지만 오늘날 CPU는 많은 기술적 발전을 거듭하였고, 그 결과 CPU 내부에는 ‘명령어를 실행하는 부품’을 얼마든지 만들 수 있게 되었다.

우리가 지금까지 CPU의 정의로 알고 있었던 ‘명령어를 실행하는 부품’은 오늘날 코어(Core)라는 용어로 사용된다. 다시 말해, 오늘날의 CPU는 단순히 ‘명령어를 실행하는 부품’에서 ‘명령어를 실행하는 부품을 여러 개 포함하는 부품’으로 명칭의 범위가 확장되었다. 예를 들어 8 Core는 ‘명령어를 실행하는 부품’을 여덟 개 포함하고 있다고 보면 된다.

Untitled

코어를 여러 개 포함하고 있는 CPU를 멀티코어(multi-core) CPU 또는 멀티코어 프로세서라고 부른다. 이는 CPU 내에 명령어를 처리하는 일꾼이 여러 명 있는 것과 같다. 당연히 멀티코어의 처리속도는 단일코어보다 빠르다. 가령 클럭 속도가 2.4GHz인 단일 코어 CPU와 클럭 속도가 1.9GHz인 멀티코어 CPU를 비교하면 일반적으로 후자의 성능이 더 좋다.

CPU 종류는 CPU 안에 코어가 몇 개 포함되어 있는지에 따라 아래 표와 같이 싱글코어, 듀얼코어, 트리플코어 등으로 나뉜다.

Untitled

그럼 코어를 두 개, 세 개, 100개로 늘리면 연산 처리 속도도 두 배, 세 배, 100배로 빨라질까? 안타깝게도 CPU의 연산 속도가 꼭 코어 수에 비례하여 증가하지는 않는다. 코어마다 처리할 연산이 적절히 분배되지 않는다면 코어 수에 비례하여 연산 속도가 증가하지 않는다. 또한 처리하고자 하는 작업량보다 코어 수가 지나치게 많아도 성능에는 크게 영향이 없다. 중요한 것은 코어마다 처리할 명령어들을 얼마나 적절하게 분배하느냐이고 그에 따라서 연산 속도는 크게 달라진다.

3. 스레드와 멀티스레드

이번에는 스레드와 멀티스레드에 대하 알아보자. CPU의 멀티스레드 기술을 이해하려면 우선 ‘스레드’라는 용어를 정확이 이해해야 한다.

스레드(thread)의 사전적 의미는 ‘실행 흐름의 단위’이다. 하지만 이 정의를 활자 그대로 받아들이지 말고 더욱 엄밀하게 이해해야 된다. CPU에서 사용되는 스레드와 프로그래밍에서 사용되는 스레드는 용례가 다르기 때문이다.

이렇게 기억하면 된다. 스레드에는 CPU에서 사용되는 하드웨어적 스레드가 있고, 프로그램에서 사용되는 소프트웨어적 스레드가 있다. 지금부터 하드웨어적 스레드와 소프트웨어적 스레드가 어떻게 다른지 알아보도록 하자.

1) 하드웨어적 스레드