멀티스레드 프로세서가 스레드를 실행하는 방식

명시적 멀티스래딩의 구현 방식과 Fine-Grain, Coarse-Grain, SMT, 멀티코어의 자원 활용 특성을 정리한다.

2026-08-14 · 최초 발행 2026-01-02

스레드별 실행 상태를 하드웨어가 유지하는 구조

명시적 멀티스래딩은 하드웨어가 다중 스레드를 지원하는 방식이다. 프로세서는 동시에 다룰 스레드마다 별도의 Program Counter를 두고, 레지스터와 상태 같은 컨텍스트도 스레드별로 유지한다. 이를 바탕으로 여러 스레드를 교대로 실행하거나 병렬로 실행한다.

이 구조에서 필요한 것은 세 가지다. 먼저 각 스레드의 현재 실행 위치를 추적할 다수의 Program Counter가 필요하다. 하드웨어적으로 N개 PC 레지스터를 두면 스레드 전환을 빠르게 수행할 수 있다. 레지스터 세트, 스레드 상태, 스택 포인터를 담는 컨텍스트도 각각 보존해야 한다. 마지막으로 실행할 스레드를 고르는 스케줄링 로직이 필요하며, 이는 하드웨어 또는 마이크로코드와 동적 우선순위에 의해 처리될 수 있다.

구현 방식은 스레드를 바꾸는 시점, 한 시점에 실행할 수 있는 스레드 수, 실행 유닛과 캐시 같은 자원의 공유 수준에 따라 나뉜다.

매 사이클마다 교대하는 Fine-Grain 방식

Interleaved Multithreading은 Fine-Grain Multithreading이라고도 한다. 매 클록 사이클마다 실행 스레드를 바꾸는 방식이며, 가장 짧은 전환 주기를 갖는다.

예를 들어 클록 사이클 N에는 스레드 A의 명령어를 실행하고, N+1에는 스레드 B, N+2에는 스레드 C를 실행하는 식이다. 보통 라운드 로빈 방식으로 순환한다. 프로세서는 2개 이상 스레드를 다루며, 각 스레드에서는 한 번에 하나의 명령어를 발행한다. 파이프라인이 멈추면 즉시 다른 스레드로 넘어갈 수 있다.

짧은 스톨도 다른 스레드 작업으로 덮을 수 있어 CPU 유휴 시간을 줄이고 처리량을 높이는 데 유리하다. 전환 오버헤드가 작고 동작이 예측 가능하다는 점도 특징이다.

대신 개별 스레드는 N개 스레드 가운데 1/N만 실행되므로 단일 스레드의 응답 시간이 늘어난다. 짧은 작업에는 불리할 수 있다. 캐시를 공유하면서 스레드 간 간섭이 생기고 TLB 플러시가 증가할 수 있다는 점도 고려해야 한다.

긴 지연에서만 전환하는 Coarse-Grain 방식

Blocked Multithreading, 또는 Coarse-Grain Multithreading은 긴 지연이 발생할 때에만 다른 스레드로 전환한다. 지연이 없는 동안에는 하나의 스레드가 연속해서 실행된다.

캐시 미스나 메모리 접근처럼 긴 latency가 생기면 다른 스레드로 넘어가고, 지연이 해소된 뒤 원래 스레드를 다시 실행한다. 전환 조건에는 L2 캐시 미스에 따른 수십~수백 사이클 지연, 메모리 접근, I/O 대기, 동기화 대기가 포함된다.

스레드가 지연 없이 연속 실행되므로 단일 스레드 응답 시간과 캐시 지역성을 유지하기 좋다. 전환 횟수도 적어 긴 지연에서만 전환 비용을 상쇄한다.

반대로 몇 사이클 정도의 짧은 지연은 활용하지 못하고 그대로 기다려야 한다. 스레드를 바꿀 때 파이프라인을 비워야 할 수 있어 전환 비용도 발생한다.

실행 유닛을 함께 채우는 SMT

Simultaneous Multithreading(SMT)은 여러 스레드의 명령어를 한 클록 사이클에 동시에 발행한다. 수퍼스칼라 프로세서와 다수의 스레드 컨텍스트를 결합해 실행 유닛의 빈자리를 채우는 방식이다.

한 사이클에 여러 스레드에서 여러 명령어를 issue하며, 특정 파이프라인 스테이지에서 다중 스레드 명령어를 동시에 처리한다. 이를 위해 Superscalar 프로세서가 필요하다. ALU, FPU 같은 실행 유닛은 공유하지만, 여러 스레드가 서로 다른 유닛을 동시에 사용할 수 있다.

Intel Hyper-Threading은 2-way SMT의 사례다. 2개 스레드를 지원해 논리적으로는 2개 코어처럼 보이지만 물리적 코어는 1개다. 구현에는 2개의 Program Counter, 2세트의 아키텍처 상태 레지스터, 공유 실행 유닛이 사용된다.

SMT는 ILP와 TLP를 함께 활용해 자원 활용도를 높인다. 성능은 30-40% 향상될 수 있으며, 이론적 최대는 100%다. 한 스레드가 스톨한 동안 다른 스레드를 실행해 유휴 시간도 줄일 수 있다.

다만 넓은 Superscalar 구조와 복잡한 스케줄링이 필요해 설계가 어렵다. 실행 유닛, 캐시, 메모리 대역폭을 스레드가 공유하므로 경쟁이 심하면 성능이 저하될 수 있다. 스레드 간 정보 유출, Spectre·Meltdown 같은 Side-channel 공격도 함께 검토해야 한다.

독립 코어를 집적하는 CMP

Chip Multiprocessing(CMP)은 멀티코어 구조를 말한다. 하나의 칩 안에 전체 프로세서를 중복해 배치하고, 각 코어가 별도의 스레드를 처리한다.

각 코어는 독립적인 파이프라인과 별도의 L1 캐시를 가진 완전한 프로세서이며, L2/L3 캐시는 공유할 수 있다. OS 스케줄러가 스레드를 코어에 배분하고, 필요에 따라 코어 간 마이그레이션도 가능하다.

듀얼코어, 쿼드코어, 옥타코어 등은 각각 2개, 4개, 8개 코어로 병렬 처리를 수행한다. 이종 코어 구조에서는 big.LITTLE(ARM)이나 성능 코어와 효율 코어를 함께 사용하는 Intel Alder Lake처럼 작업 특성에 따라 코어를 선택한다.

독립 코어에서 진정한 병렬 실행이 가능하므로 스레드 간 간섭이 적고 확장성이 좋다. 코어별 동작이 독립적이어서 성능도 비교적 예측 가능하다. 사용하지 않는 코어를 슬립 상태로 두거나 동적 전력 관리를 적용하고, 이종 코어를 활용해 전력을 최적화할 수도 있다.

코어 수가 늘어날수록 칩 면적과 비용이 증가한다. 모든 코어가 동작하면 전력 소비와 냉각 부담도 커진다. 병렬 프로그래밍을 지원하지 않는 단일 스레드 애플리케이션은 이점을 얻지 못한다.

전환 시점과 병렬성의 차이

방법 전환 주기 동시 실행 개별 성능 처리량 하드웨어 복잡도
Interleaved (Fine) 매 사이클 한 스레드만 낮음 중간 낮음
Blocked (Coarse) 긴 지연 시 한 스레드만 중간 낮음 낮음
SMT 동적 여러 스레드 중간 높음 높음
CMP (Multicore) OS 스케줄링 여러 스레드 (독립) 높음 높음 중간

실제 프로세서는 방식을 조합하기도 한다. 각 코어에 SMT를 적용하면 4코어 × 2-way SMT는 논리적 8코어가 된다. Intel Core i7/i9와 AMD Ryzen이 이 조합의 예다.

Heterogeneous 구조와 SMT를 함께 사용할 때는 성능 코어(SMT)와 효율 코어(단일 스레드)를 조합한다. Intel Alder Lake와 Raptor Lake는 작업 특성에 따라 코어를 선택한다.

명시적 멀티스래딩멀티스레드 프로세서SMT멀티코어컴퓨터구조