관리 메뉴

클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

CPU 성능 향상 기법 1 - 빠른 CPU를 위한 설계 기법 본문

알고리즘 및 자료 관리/컴퓨터 구조 & 운영체제

CPU 성능 향상 기법 1 - 빠른 CPU를 위한 설계 기법

huenuri 2024. 10. 15. 17:08

드디어 5장 학습을 시작해 본다. 4장에 이어 CPU에 대한 내용이 계속 이어진다. 클럭과 코어, 스레드라는 개념을 학습하고, 빠른 CPU를 만드는 설계 기법인 멀티코어와 멀티스레드란 무엇인지 배우게 된다.

 

클럭, 멀티코어, 멀티스레드라는 용어는 컴퓨터를 구매할 때 혹은 프로그램을 개발할 때 심심찮게 들어보았을 것이다. 이번 절에서는 이들이 각각 무엇인지 알아보고, CPU 속도와 어떤 관계가 있는지 학습해 보겠다.

 


 

 

 

 

클럭

우리가 CPU를 설계하는 엔지니어라면 해야 할 일은 조금이라도 더 빠른 CPU를 만드는 일이다. 그렇다면 CPU를 어떻게 설계해야 할까?

 

 

 

클럭 속도가 높아지면 CPU는 명령어 사이클을 더 빠르게 반복할 것이고, 다른 부품들도 그에 발맞춰 더 빠르게 작동할 것이다. 실제로 클럭 속도가 높은 CPU는 일반적으로 성능이 좋다. 그래서 클럭 속도는 CPU 속도 단위로 간주되기도 한다.

 

 

 

 


 

 

 

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

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

최대 클록 속도를 강제로 더 끌어올릴 수도 있는데, 이런 기법을 오버클러킹(overclocking)이라고 한다.

 

 

 

그래픽이 많이 요구되는 게임이나 영상 편집과 같이 CPU에 무리가 가는 작업을 장시간 하면 컴퓨터가 뜨겁게 달아오르는 것을 경험해 본 적이 있을 것이다. 

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


 

 

 

코어와 멀티코어

 

 

이 사진을 보면 8Core라고 나와있다. 그럼 코어는 무엇일까?

 

 

 

 

오늘날의 CPU는 단순히 '명령어를 실행하는 부품'에서 '명령어를 실행하는 부품을 여러 개 포함하는 부품'으로 범위가 확장되었다. 앞서 살펴본 CPU 사진에서 8코어는 명령어를 실행하는 부품을 8개 포함하고 있다고 볼 수 있다.

 

 

 

코어를 여러 개 포학하고 있는 CPU를 멀티코어 CPU 또는 멀티코아 프로세스라고 부른다. 이는 CPU 내에 명령어를 처리하는 일꾼이 여러 명 있는 것과 같다. 멀티코어 속도는 단일코어보다 더 빠르다.

코어의 수에 따라 싱클코어, 듀얼코어, 트리플코어 등으로 나뉜다.

 

 

학교에서 4인 1조로 조별 과제를 한다고 생각해 보자. 모두 똑같이 참여하는 한 사람이 낼 수 있는 생산성의 네 배에 가까운 결과물을 만들어 내는 경우도 있으나 그렇지 않은 경우도 많다. 업무가 균등하게 분배되지 않거나 한 두 사람만 열심히 참여하면 결과적으로 한두 사람만의 생산성만큼 결과물이 나오게 된다. 이처럼 코어마다 처리할 연산이 적절히 분배되지 않는다면 코어 수에 비례하여 연산 속도가 증가하지 않는다.


 

 

 

스레드와 멀티스레드

CPU의 멀리스레드 기술을 이해하려면 우선 '스레드'라는 용어를 정확히 이해해야 한다. 스레드는 프로그래밍 언어를 학습할 때도 등장하고 운영 체제에도 등장한다.

스레드(thread)의 사전적 의미는 '실행 흐름의 단위'이다.


 

 

하드웨어적 스레드

CPU에서 사용하는 스레드라는 용어는 보통 CPU 입장에서 정의된 하드웨어적 스레드를 의미한다. 우리가 지금까지 배운 CPU는 1코어 1스레드 CPU였다. 즉, 명령어를 실행하는 부품이 하나 있고, 한 번에 하나씩 명령어를 실행하는 CPU를 가정했다.

 

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

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

 

 

이처럼 하나의 코어로 여러 명령어를 동시에 처리하는 CPU를 멀티스레드 프로세스 또는 멀티스레드 CPU라고 한다. 이 사진 속 CPU는 8코어 16스레드이다.

멀티스레드와 함께 자주 접하게 될 용어로 하이퍼스레딩이라는 용어도 있다. 이는 인텔의 멀티스테드 기술을 의미한다. 인텔이 자신들의 멀티스레드 기술에 하이퍼스레딩이라는 명칭을 부여한 것이다.


 

 

 

소프트웨어적 스레드

하나의 프로그램은 실행되는 과정에서 한 부분만 실행될 수도 있지만, 프로그램의 여러 부분이 동시에 실행될 수도 있다. 가령 워드 프로세서 프로그램을 개발한다고 가정해 보자. 그리고 아래의 기능이 동시에 수행되기 원한다고 해보자.

이 기능들을 작동시키는 코드를 각각의 스레드로 만들면 동시에 실행할 수 있다.

 

 

 

소프트웨어적 스레드를 수십 개 실행할 수 있는 것이다.


 

 

멀티스레드 프로세서

이번에는 하나의 코어로 여러 명령어를 동시에 처리하는 기술인 하드웨어적 스레드이다. 용어의 혼동을 방지하기 위해 이제부터 소프트웨어적으로 정의된 스레드는 스레드, CPU에서 사용되는 스레드는 하드웨어 스레드라고 지칭하겠다.

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

가령 프로그램 카운터가 2개 있다면 '메모리에서 가져올 명령어 주소'를 2개 지정할 수 있고, 스택 포인터가 2개 있다면 2개의 스택을 관리할 수 있다.

레지스터 세트가 2개인 CPU는 2개의 명령어를 처리하기 위한 정보들을 기억할 수 있다. 여기서 ALU와 제어장치가 2개의 레지스터 세트에 저장된 명령어를 해석하고 실행하면 하나의 코어에서 2개의 명령어가 동시에 실행된다.

 

 

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

 

 

내 노트북에는 6코어 12스레드를 사용하고 있다. 여기 논리 프로세스가 코어이다. 실제 CPU 속에 명령어를 처리하는 부품(코어)은 6개이지만, 메모리 속 프로그램이 보기에는 한 번에 하나의 명령어를 처리하는 부품이 마치 12개 있는 것처럼 보이기 때문에 논리 프로세서가 12개로 나오는 것이다.

코어는 명령어를 실행할 수 있는 '하드웨어 부품'이고, 스레드는 '명령어를 실행하는 단위'이다. 멀티코어 프로세서는 명령어를 실행할 수 있는 하드웨어 부품이 CPU 안에 2개 이상 있는 CPU를 의미하고, 멀리스레드 프로세서는 하나의 코어로 여러 개의 명령어를 동시에 실행할 수 있는 CPU를 의미한다.


 

 

 

 

단원 마무리하기

 

 

 

 

 

 

4번은 답을 한 개만 적는 거였다. 단일코어라는 말은 없고 배우지도 않았다. 코어는 CPU 내에서 명령어를 처리하는 부품이고, CPU는 이 코어를 여러 개 가질 수 있다. 이와 같은 CPU를 멀티코어 CPU라고 부른다. 빈칸에는 코어가 들어가야 한다. 그래야 코어 2개가 되어 멀티코어가 된다.


 

 

 

학습을 마치고

이번 단원은 1시간 만에 학습을 모두 마쳤다. 그리고 문제도 딱 한 문제 빼고는 다 맞았다. 그동안 스레드가 무엇인지 늘 궁금했었다. 동시에 실행되는 건 알겠는데 더 정확한 의미는 알지 못했다. 스레드의 의미와 역할에 대해 그리고 코어에 대해서 배울 수 있는 시간이었다.

아직 암기까지는 하지 못했지만 적어도 이해는 했다.