# 동시 멀티스레딩 작동 원리

> Clean Markdown view of GeekNews topic #16071. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16071](https://news.hada.io/topic?id=16071)
- GeekNews Markdown: [https://news.hada.io/topic/16071.md](https://news.hada.io/topic/16071.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-07-29T11:33:14+09:00
- Updated: 2024-07-29T11:33:14+09:00
- Original source: [blog.codingconfessions.com](https://blog.codingconfessions.com/p/simultaneous-multithreading)
- Points: 3
- Comments: 0

## Topic Body

##### 두 개의 스레드, 하나의 코어: 동시 멀티스레딩의 작동 원리

###### 배경 및 동기
- **SMT 도입 배경**: 프로세서 자원 활용도를 높이기 위해 도입됨. 프로세서에는 수백 개의 레지스터, 여러 로드/스토어 유닛 및 산술 유닛이 있음. 이를 더 잘 활용하기 위해 명령어 수준 병렬 처리(ILP) 기술 사용.
- **명령어 파이프라이닝**: 명령어 실행을 여러 단계로 나누어 각 사이클마다 새로운 명령어를 추가 처리. 파이프라인 깊이가 깊을수록 더 많은 명령어를 병렬로 처리 가능.
- **슈퍼스칼라 아키텍처**: 각 사이클마다 여러 명령어를 발행할 수 있음. 예를 들어, 최신 Intel Core i7 프로세서는 각 사이클마다 4개의 명령어를 발행할 수 있음.
- **수평 및 수직 낭비**: 독립적인 명령어를 충분히 찾지 못할 때 발생하는 자원 낭비. 수평 낭비는 프로세서가 충분한 독립 명령어를 찾지 못할 때 발생하고, 수직 낭비는 모든 명령어가 현재 실행 중인 명령어에 의존할 때 발생함.

###### Intel 프로세서의 SMT 구현
- **아키텍처 상태 복제**: 두 개의 스레드를 동시에 실행하기 위해 프로세서의 아키텍처 상태를 복제. 이를 통해 하나의 물리적 프로세서가 운영 체제에 두 개의 논리적 프로세서로 나타남.
- **자원 공유 및 복제**: 일부 자원은 복제되고, 일부는 공유됨. 복제 여부는 전력 소비 및 칩의 실제 공간 등 여러 요인에 따라 결정됨.

##### 프로세서 마이크로아키텍처
- **프론트엔드, 백엔드, 리타이어먼트 유닛**: 프로세서 마이크로아키텍처는 세 부분으로 나뉨. 프론트엔드는 명령어를 가져오고 디코딩하며, 백엔드는 실행 자원을 할당하고 명령어를 실행함. 리타이어먼트 유닛은 실행된 명령어의 결과를 아키텍처 상태에 커밋함.

###### SMT 구현 세부 사항
- **프론트엔드**: 명령어 포인터, 트레이스 캐시, ITLB 캐시, uop 큐 등 여러 구성 요소로 이루어짐. 각 구성 요소는 두 개의 논리적 프로세서를 지원하기 위해 복제되거나 공유됨.
- **백엔드**: 자원 할당기, 레지스터 리네이밍, 명령어 준비 큐, 명령어 스케줄러 등으로 구성됨. 자원 할당기는 각 사이클마다 논리적 프로세서 간에 전환됨.
- **리타이어먼트 유닛**: 명령어가 아키텍처 상태에 커밋될 준비가 되면 이를 추적하고 올바른 순서로 커밋함.

##### 메모리 서브시스템
- **TLB**: 가상 주소를 물리 주소로 변환하는 작은 캐시. 두 논리적 프로세서 간에 동적으로 공유됨.
- **L1, L2, L3 캐시**: 각 CPU 코어는 자체 L1 캐시를 가짐. L2 캐시는 마이크로아키텍처에 따라 다를 수 있으며, L3 캐시는 코어 간에 공유됨.

##### SMT의 성능 영향
- **단일 스레드 실행**: SMT가 활성화된 코어에서 단일 스레드를 실행할 때 자원이 공유되므로 성능이 저하될 수 있음.
- **두 개의 스레드 실행**: 캐시 접근 패턴에 따라 성능이 달라질 수 있음. 협력적인 스레드는 성능을 향상시킬 수 있지만, 경쟁적인 스레드는 성능을 저하시킬 수 있음.
- **보안 취약점**: 최근 몇 년간 SMT와 관련된 보안 문제가 발견됨. 자원 공유와 명령어의 추측 실행으로 인해 민감한 데이터가 유출될 가능성이 있음.

##### 결론
- **SMT 사용 여부 결정**: SMT는 CPU 자원 활용도를 높이고 명령어 처리량을 증가시키기 위해 설계되었지만, 성능 및 보안 측면에서 trade-off가 있음. 워크로드에 따라 SMT를 사용할지 여부를 결정하는 것이 중요함.

##### GN⁺의 정리
- **SMT의 이해**: SMT는 CPU 자원 활용도를 높이고 명령어 처리량을 증가시키기 위해 설계됨.
- **성능 및 보안**: SMT는 성능 향상에 도움이 될 수 있지만, 자원 경쟁 및 보안 취약점으로 인해 성능 저하 및 보안 문제가 발생할 수 있음.
- **사용 여부 결정**: 워크로드에 따라 SMT를 사용할지 여부를 신중하게 결정해야 함. 고성능이 필요한 경우 SMT를 비활성화하는 것이 좋음.
- **관련 프로젝트**: AMD의 SMT 구현 및 ARM 프로세서의 SMT 성능 분석 프로젝트도 참고할 만함.

## Comments



_No public comments on this page._
