컴퓨터 프로그래밍 공부/컴퓨터 구조 + 운영체제

코어와 멀티코어, 스레드와 멀티스레드

게임 개발 2024. 4. 9. 13:47
코어와 멀티코어

 

 

 클럭 속도를 높이는 방법 외에 CPU의 성능을 높이는 방법으로

대표적인 해결책으로는 CPU의 코어와 스레드 수를 늘리는 방법이 있다.

 

전통적인 CPU에는 코어가 하나였지만,

오늘날에는 코어를 여러 개 포함하고 있는 CPU를 멀티코어 CPU 또는

멀티코어 프로세서라고 부른다.

이는 CPU 내에 명령어를 처리하는 일꾼이 여러 명 있는 것과 같다.

 

당연히 멀티코어의 처리 속도는 단일코어보다 빠르며,

가령 클럭 속도가 2.4GHz인 단일 코어 CPU와 클럭 속도가 1.9GHz인 멀티코어 CPU를 비교하면

일반적으로 후자의 성능이 더 좋다.

 

CPU 종류는 CPU 안에 코어가 몇 개 포함되어 있는지에 따라

싱글코어, 듀얼코어, 트리플코어 드응로 나뉜다.

 

즉 멀티코어 프로세서란 여러 개의 코어를 포함하고 있는 CPU를 말한다.

유의해야할 것은 코어의 수에 비례해서 연산 속도가 증가하는 것은 아니다.

 

 

스레드와 멀티스레드

 

 

 CPU의 멀티스레드 기술을 이해하려면 우선 '스레드'라는 용어를 정확히 이해해야 한다.

스레드는 프로그래밍 언어를 학습할 때도 등장하고, 운영체제를 학습할 때도 등장한다.

 

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

하지만 이 정의를 활자 그대로 받아들이기 보다는 더욱 엄밀하게 이해해보자.

CPU에서 사용되는 스레드와 프로그래밍에서 사용되는 스레드의 용례가 다르기 때문이다.

 

이렇게 기억하면 편하다.

스레드에는 CPU에서 사용되는 하드웨어적 스레드가 있고,

프로그램에서 사용되는 소프트웨어 스레드가 있다.

 

 

 

 

하드웨어적 스레드

 

 

스레드를 하드웨어적으로 정의하면 하나의 코어가 동시에 처리하는 명령어 단위를 의미한다.

CPU에서 사용하는 스레드라는 용어는 보통 CPU 입장에서 정의된 하드웨어적 스레드를 의미한다.

CPU는 1코어 1스레드 CPU였다.

즉, 명령어를 실행하는 부품이 하나 있고,

한 번에 하나씩 명령어를 실행하는 CPU를 가정했다.

 

반면 여러 스레드를 지원하는 CPU는 하나의 코어로도

여러 개의 명령어를 동시에 실행할 수 있다.

예를 들어 2코어 4스레드 CPU는 위 그림처럼 명령어를 실행하는 부품 두 개를 포함하고

해당 코어 안에 각각 2개씩 스레드를 가져 네 개의 명령어를 처리할 수 있는 CPU를 의미한다.

 

이처럼 하나의 코어로 여러 명령어를 동시에 처리하는 CPU를 멀티스레드 프포세서 또는

멀티스레드 CPU라고 부른다.

 

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

 

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

이는 인텔의 멀티스레드 기술을 의미한다.

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

 

 

소프트웨어적 스레드

 

 소프트웨어적으로 정의된 스레드는 '하나의 프로그램에서 독립적으로 실행되는 단위'를 의미한다.

프로그래밍 언어나 운영체제를 학습할 때 접하는 스레드는 보통 이렇게 소프트웨어적으로 정의된 스레드를 의미한다.

 

하나의 프로그램은 실행되는 과정에서 한 부분만 실행될 수도 있지만,

프로그램의 여러 부분이 동시에 실행될 수도 있다.

 

 

 

가령 워드 프로세서 프로그램을 개발한다고 가정한다면,

아래의 기능이 동시에 수행되길 원한다고 가정해보자.

 

1. 사용자로부터 입력받은 내용을 화면에 보여 주는 기능

2. 사용자가 입력한 내용이 맞춤법에 맞는지 검사하는 기능

3. 사용자가 입력한 내용을 수시로 저장하는 기능

 

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

 

 

 

 

정리하자면,

하드웨어적적 스레드의 정의는 하나의 코어가 동시에 처리하는 명령어 단위를 의미하고,

소프트웨어적 스레드의 정의는 하나의 프로그램에서 독립적으로 실행되는 단위를 의미한다.

 

한 번에 하나씩 명령어를 처리하는

1코어 1스레드 CPU도 소프트웨어적 스레드를 수십 개 실행할 수 있다.

 

 

멀티스레드 프로세서

 멀티스레드 프로세서는 하나의 코어로 여러 명령어를 동시에 처리하는 기술인 하드웨어적 스레드이다.

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

어떻게 이런 일이 가능할까?

 

멀티스레드 프로세서를 실제로 설계하는 일은 매우 복잡하지만,

가장 큰 핵심은 레지스터이다.

하나의 코어로 여러 명령어를 동시에 처리하도록 만들려면

프로그램 카운터, 스택 포인터, 메모리 버퍼 레지스터, 메모리 주소 레지스터와 같이

하나의 명령어를 처리하기 위해 꼭 필요한 레지스터를 여러 개 가지고 있으면 된다.

 

가령 프로그램 카운터가 두 개 있다면,

메모리에서 가져올 명령어 주소를 두 개 지정할 수 있을 것이고,

스택 포인터가 두 개 있다면,

두 개의 스택을 관리할 수 있다는 의미가 된다.

 

때문에 편의랑 레지스터 세트라고 말하겠다.

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

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

여기서 ALU와 제어장치가 두 개의 레지스터 세트에 저장된 명령어를 해석하고

실행하면 하나의 코어에 두 개의 명령어가 동시에 실행이 된다.

 

2코어 4스레드 CPU에 비유하자면 다음과 같은 그림이 된다.

 

 

하드웨어 스레드를 이용해 하나의 코어로도 여러 명령어를 동시에 처리할 수 있다고 했다.

그러나 메모리 속 프로그램 입장에서 봤을 때

하드웨어 스레드는 마치 한 번에 하나의 명령어를 처리하는 CPU나 다름 없디ㅏ.

가령 2코어 4스레드 CPU는 한 번에 네 개의 명령어를 처리할 수 있는데,

프로그램 입장에서 봤을 땐 한 번에 하나의 명령어를 처리하는 CPU가 네 개 있는 것처럼 보인다.

그래서 하드웨어 스레드를 논리 프로세서라고 부르기도 한다.

 

'컴퓨터 프로그래밍 공부 > 컴퓨터 구조 + 운영체제' 카테고리의 다른 글

가상 메모리 - 연속 메모리 할당  (1) 2024.04.18
주소 바인딩  (0) 2024.04.16
프로그래밍 개발 과정  (0) 2024.04.08
컴퓨터 구조  (0) 2024.04.08
레지스터  (1) 2024.01.01