0. 스레딩(Threading)
- 하나의 프로그램(=process)을 독립적인 실행 흐름(스레드, Thread)으로 분할하는 개념
- 여러 스레드를 활용하면 시간적으로 겹쳐(concurrent) 실행하거나, 자원이 충분할 경우 실제 병렬(parallel) 실행 가능.
- 1개의 core에서 동시에 복수의 명령어 수행하는 실행 단위: H/W Thread (Inter의 Hyperthreading)
- S/W thread는 concurrency(동시성)과 관련되어 Context Switch가 일어나는 하나의 프로그램에서 독립적으로 실행되는 단위임.
- 스레드를 통해 프로세서 활용도를 극대화하고 다양한 작업을 동시에 처리 가능
2023.12.27 - [개발환경] - [CE] Process versus Thread: OS의 Thread (S/W Thread)
2024.05.28 - [분류 전체보기] - [CE] Concurrency (동시성)과 Parallelism (병렬성)
2. 하드웨어 스레딩(Hardware Threading)
- 단일 core(코어) 내에서 하드웨어적으로 복수의 스레드를 지원하는 기술:
- 프로그램 관점에서는 동시에 여러 명령어가 동시에 수행되는 것으로 느껴지므로 멀티프로세서와 구분되기 어려움.
- 때문에 logcal processor라고도 불림: intel hyper threading의 경우 물리적 1개의 코어가 2개로 보임.
- 스레드 간 context changing(문맥 전환) 없이 instruction issue slots(명령어 발행 슬롯)을 공유하며
- 파이프라인 유휴 시간 최소화: 2개의 haredare thread가 하나의 실행 pipeline을 공유
- 메모리 지연(latency) 또는 데이터 의존성으로 인해 한 스레드가 실행을 멈출 경우, 다른 스레드의 명령어가 파이프라인을 채워 병렬 처리 성능을 향상
- 각 스레드가 독립적인 레지스터 집합 또는 상태 정보를 유지
2-1. SMT(Simultaneous Multithreading):
대표적인 하드웨어 스레딩 기술로, 단일 코어가 두 개 이상의 논리 스레드를 동일한 사이클 내에 처리하여 동시성(concurrency)을 극대화
- 인텔(Intel): SMT 구현을 “하이퍼 스레딩(Hyper-Threading)”이라는 브랜드명으로 제공: Hyper-Threading은 1core당 2개의 hardware threads를 지원하며 이 때문에 OS 입장에서는 물리적인 1개의 Core를 2개의 Core로 인식하게 됨.
- AMD: 별도 브랜드명 없이 SMT라는 용어를 그대로 사용
Note: IPC (Instructions Per Cycle)
- 단일 코어 기준 한 클록 사이클(Clock Cycle) 동안 처리 가능한 명령어의 평균 개수
- 1 IPC = 한 사이클에 1개 명령어 처리
- 2 IPC = 한 사이클에 2개 명령어 처리
- IPC는 주로 단일 코어 성능 지표이며,
멀티코어 환경에서는 모든 코어의 IPC를 합산한 전체 처리량(total throughput)을 논할 수 있음
3. 스칼라(Scalar) 프로세서
- 단일 코어 기준 한 사이클에 한 개 명령어(1 IPC)만 처리하는 구조
- 직렬적 파이프라인 실행 기반으로, 멀티코어 구성을 통해 총 처리량은 늘릴 수 있으나 개별 코어는 여전히 1 IPC에 머무름
interleaved multithreading 이 이루어짐:
- 하나의 core를 여러 threads가 공유하고 물리적으로는 한번에 하나씩 수행되며
- context switching이 발생.
4. 슈퍼스칼라(Superscalar) 프로세서
- 단일 코어 기준 한 사이클에 복수의 명령어(>1 IPC)를 병렬 처리하는 구조
- 다중 실행 유닛을 갖추고 있기 때문에,
- 단일 스레드에서도 병렬 처리가 가능하고,
- 멀티스레드 환경에서도 자원을 최대한 활용.
- 명령어 수준 병렬성(ILP) 활용으로 동시에 다수 명령어 발행 및 실행:
- 단일 코어 성능(IPC)과 처리량을 크게 향상.
ILP (Instruction-Level Parallelism)
• 정의: 프로세서가 프로그램 내 Instructions의 독립성을 활용하여
여러 명령어를 동시에 실행(1개의 core에서)할 수 있는 능력을 의미.
• 목적: 단일 스레드에서의 성능 향상으로, 실행 유닛의 활용도를 극대화하고 처리량(throughput)을 증가시키는 데 중점.
https://dsaint31.tistory.com/721
5. 벡터프로세서(Vector Processor)
- 단일 명령어로 벡터 형태(여러 데이터 요소로 구성된 집합)에 대해 동시 연산을 수행하는 구조
- 전통적 벡터 프로세서는 대용량 벡터 레지스터를 활용해 단일 스레드 내 데이터 병렬성(DLP) 극대화
- 현대 CPU는
- 전통적 벡터 프로세서 대신
- SSE, AVX 등의 SIMD(Single Instruction, Multiple Data) 명령어 확장을 통해 벡터 연산 가속
- GPU는
- SIMT(Single Instruction, Multiple Threads) 아키텍처를 사용해 유사한 대규모 데이터 병렬 처리 구현
ILP(Instruction-Level Parallelism): 여러 명령어를 병렬로 처리하는 능력; Super Scalar
DLP(Data-Level Parallelism): 동일한 명령어를 여러 데이터에 병렬로 적용하는 능력; GPGPU
참고: Scalar and Vector
- “Scalar”라는 명칭은 수학에서 한 개의 크기(스칼라) 값만 가지는 양(예: 단일 숫자)에서 유래되었으며, 프로세서가 한 번에 하나의 연산 대상(스칼라 값)만 처리한다는 점을 반영한 명칭
- “Vector”라는 명칭은 수학에서 여러 차원의 요소를 가진 벡터(순서 있는 수열) 개념에서 유래되었으며, 프로세서가 한 번에 다수의 데이터 요소(벡터) 연산을 처리하는 특성을 반영한 명칭
6. 현대 CPU와 GPGPU에서의 활용
6-1. 현대 CPU:
- 슈퍼스칼라 아키텍처 및 SIMD 명령어를 통해 단일 코어 성능(IPC) 향상
- 멀티코어 구성과 SMT(인텔 하이퍼 스레딩, AMD SMT)를 통해 전체 처리량 증대
- 범용적 워크로드에 최적화된 균형 잡힌 성능 제공
6-2. 현대 GPGPU(General-Purpose GPU):
- SIMT 기반 아키텍처를 통해 대규모 병렬 연산 수행
- 다수의 경량 스레드를 동시에 처리하여 데이터 병렬성, 스레드 병렬성 극대화
- 벡터 연산과 유사한 원리를 수많은 스레드로 확장,
- HPC(High-Performance Computing), 머신러닝, 그래픽 연산에 특화된 성능 구현
같이보면 좋은 자료들
https://dsaint31.me/mkdocs_site/CE/ch04/ce04_50/
https://product.kyobobook.co.kr/detail/S000211776141: 5장 컴퓨터아키텍처