hardware thread, software thread

Choooose·2023년 5월 14일
2

운영체제

목록 보기
8/8

일반적으로 운영체제에서 다루는 스레드는 CPU를 할당 받을 수 있는 작업의 단위이다.

그렇다면

흔히 PC를 구매할때 CPU의 스펙에 나오는 8코어 / 16스레드 와는 어떻게 다른 것일까 ?



하드웨어 스레드와 소프트웨어 스레드

우리가 흔히 운영체제에서 공부하는 프로세스 내의 작업 단위를 소프트웨어 스레드 라고한다.

소프트웨어 스레드는 프로세스의 작업을 병렬적으로 나누기 위해 사용된다.

흔히 리눅스에서는 LWP (Light Weight Process)를 스레드 라고 하지만 운영체제에 따라서 스레드의 정의가 다를 수 있다.

소프트웨어 스레드는 프로그램을 만드는 개발자가 직접 스레드의 수를 정의할 수 있으며 이에 따라 10개, 100개 등의 스레드 개수가 나올 수 있다.

하드웨어 스레드는 CPU의 사양에 나오는 코어와 연관이 있다.
즉 물리적인 스레드라고 볼 수 있다.

요즘 CPU의 경우 8코어, 16코어 등의 코어갯수가 증가하는데 이때 코어는 CPU 내부의 계산을 해주는 단위라고 볼 수 있다.

그렇다면 코어와 같이 있는 하드웨어 스레드는 무엇일까?

하드웨어 스레드는 코어에서 동시에 할 수 있는 작업의 갯수를 의미한다.

예를 들어 8코어 16스레드라면

위와 같이 하나의 코어에 두개의 스레드가 들어가서 한번에 16개의 작업을 수행할 수 있는 것 이다.



하드웨어 스레드와 소프트웨어 스레드의 관계

위의 하드웨어 스레드의 갯수와 소프트웨어 스레드의 수가 서로간에 미치는 영향은 아래와 같다.

먼저 상황을 가정을 해보자

  1. 단일/다중 프로세스 - 다중 소프트웨어 스레드 1코어 1하드웨어 스레드
  2. 단일 프로세스 - 다중 소프트웨어 스레드 2코어 2 하드웨어 스레드
  3. 단일 프로세스 - 다중 소프트웨어 스레드 2코어 4 하드웨어 스레드

1 의 경우

단일/다중 프로세스이고 다중 스레드 일때, 하드웨어가 하나의 코어에 하나의 하드웨어 스레드라면 병행 처리로 멀티스레드를 구현한다.

여기서 병행처리란

1코어 1하드웨어 스레드로 구성된 CPU 인 경우 프로세스의 A스레드와 B스레드가 동시에 수행될 수 없다.

따라서 하나의 하드웨어 스레드에서 A와 B를 번갈아가며 수행한다.

이때 A와 B가 교체되는 시기는 스케줄러의 알고리즘에 따라 다르다.

2의 경우

단일 프로세스이고 다중 스레드일때, 하드웨어가 두개의 코어에 각 하나의 하드웨어 스레드라면 병렬처리로 멀티스레드를 구현한다.

A,B 스레드로 구성된 프로세스에서 코어와 하드웨어 스레드가 각 2개 이므로 각각의 코어에 A,B 스레드를 수행할 수 있다.

3의 경우

단일 프로세스이고 다중 스레드 일때, 하드웨어가 두개의 코어에 각각 두개의 하드웨어 스레드(1코어 / 2스레드)라면 병렬 처리로 멀티스레드를 구현하고 동시에 4개의 소프트웨어 스레드의 처리가 가능하다.

A1, A2, B1, B2 소프트웨어 스레드로 구성된 프로세스에서 코어가 2개이지만 스레드가 4개이기 때문에 모든 소프트웨어 스레드의 수행이 병렬적으로 일어날 수 있다.

정리하면

여러개의 하드웨어 스레드는 병렬적으로 몇개의 소프트웨어 스레드를 수행할 수 있을지를 결정한다.

이때 여러개의 하드웨어 스레드로 구성되어 하나의 코어에서 여러 작업을 수행하는 일을 다중 스레딩 이라고 하고
하나의 프로그램에서 여러 소프트웨어 스레드를 통해 작업을 분산 시켜 수행함으로써 성능을 향상시키는 것을 멀티 스레딩 이라고 한다.

또한 1의 예시처럼 다중 스레딩을 지원하지 않는 경우 병행처리를 통해서 병렬이 아니더라도 여러 소프트웨어 스레드를 멀티 스레딩으로 수행할 수 있고
이 과정에서 소프트웨어 스레드 간의 CPU 교환이 매우 빠르게 일어나기 때문에 사용자 입장에서는 눈치채기 어렵다.



기타

하드웨어 스레드에 대해 공부하게된 계기는 스터디원들과 애플의 M1 칩에 대한 논의였다.

요즘 나오는 CPU들은 모두 8코어 / 16스레드와 같이 하나의 코어에 두개의 스레드가 들어가는 경우가 대부분이지만

M1 칩의 경우에는 8코어 / 8스레드로 구성되어있기 때문에 의문점이 생겼다.

‘당연히 코어 하나당 다수의 스레드가 있어야 한번에 여러개의 작업을 수행할 수 있고 좋은 게 아닐까?’

라고 생각했지만 실제로는 그렇지 않았다.

그 이유는 아래와 같다.

  1. 애플은 싱글 사용자를 위한 기기를 만든다.
  2. 애초에 하나의 코어가 다양한 일을 ( 하나의 코어에 다수의 하드웨어 스레드 )할 정도의 데스크탑 애플리케이션이 존재하지않는다. ( 보통 8코어 정도에서 돌아간다. )

따라서 코어 하나가 다수의 스레드를 가지고 병렬적으로 작업을 처리하는 것 보다는
성능이 좋은 코어가 낫다.

  1. 따라서 애플은 고성능 코어 4개와 고효율 코어 4개를 통해서 싱글 사용자가 만족할만한 성능을 낼 수 있도록 했다.
  • M1은 물리적으로 메모리와 CPU 사이의 공간을 축소시켜 속도를 향상 시켰다.

하드웨어 스레드와 소프트웨어 스레드의 차이, M1에서의 8코어/8스레드의 이유에 대해 알아보면서 한번에 여러 작업을 수행시키기 위한 다수의 코어와 스레드가 아니어도 코어의 성능, CPU의 목적에 따라서 결정할 수 있고 이점이 있을 수 있는 것을 알 수 있었다.



참고

멀티코어 개발자를 위한 애플의 선물 GCD - Grand Central Dispatch

하드웨어 스레드와 소프트웨어 스레드

애플 M1 맥이 그렇게 빠른 이유

하드웨어 스레드와 소프트웨어 스레드 차이

Apple M1칩은 왜 그렇게 빠를까? | GeekNews

0개의 댓글