멀티스레딩
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
멀티스레딩은 단일 프로세서 내에서 여러 스레드를 동시에 실행하여 응답성을 높이고 자원을 효율적으로 활용하는 기술이다. 멀티스레딩은 응답성 향상, 자원 공유, 경제성, 멀티프로세서 활용 등의 장점을 가지지만, 캐시 간섭, 실행 시간 지연 가능성, 구현 복잡성 등의 단점도 존재한다. 멀티스레딩은 블록 멀티스레딩, 세분화된 멀티스레딩, 동시 멀티스레딩(SMT) 등 다양한 유형으로 분류되며, 스레드 스케줄러, 스레드 전환 이벤트, 가상 머신과의 관계 등 구현과 관련된 여러 과제를 가지고 있다.
더 읽어볼만한 페이지
- 스레드 - 동시 멀티스레딩
동시 멀티스레딩(SMT)은 슈퍼스칼라 구조 기반으로 한 클럭 사이클 내에 여러 스레드의 명령어를 동시에 실행하여 CPU 자원 활용률을 높이는 기술이지만, 자원 경합, 성능 저하, 보안 취약점 등의 단점도 있으며, 인텔 하이퍼 스레딩이 대표적이다. - 스레드 - 스레드 (컴퓨팅)
스레드는 프로세스 내에서 실행되는 독립적인 제어 흐름을 가진 실행 단위로, 자원을 공유하며 멀티태스킹 운영체제에서 병행성을 구현하고 프로그램 응답성 및 성능을 향상시키지만 동기화 문제를 야기할 수 있다. - 명령어 처리 - 마이크로아키텍처
마이크로아키텍처는 명령어 집합 아키텍처를 구현하는 프로세서의 구성 요소, 상호 연결, 작동 방식을 포괄하는 개념으로, 동일 ISA에서 반도체 기술 발전과 새로운 구조 및 회로를 통해 성능 향상을 가능하게 한다. - 명령어 처리 - VLIW
VLIW는 여러 연산을 하나의 명령어에 묶어 병렬로 실행하는 컴퓨터 아키텍처이며, 컴파일러가 연산 실행 순서를 결정하여 하드웨어 복잡성을 줄이는 특징을 가지고, 임베디드 미디어 프로세서 등에 사용된다. - 중앙 처리 장치 - 마이크로컨트롤러
마이크로컨트롤러는 프로세서, 메모리, 입출력 기능을 단일 칩에 통합하여 임베디드 시스템의 핵심이 되는 부품으로, 프로그램 내장 방식을 통해 소프트웨어만으로 제어 기능 변경이 가능하며, 현재는 32비트 ARM, MIPS 아키텍처 기반 제품이 주를 이루고, 저전력 소모, 소형화, 다양한 기능 통합을 특징으로 다양한 분야에서 활용된다. - 중앙 처리 장치 - NX 비트
NX 비트는 하드웨어 기반 보안 기능으로, 메모리 페이지의 실행 권한을 제어하여 특정 영역에서 코드 실행을 막아 버퍼 오버플로 공격과 같은 보안 위협을 줄이는 데 사용되며, AMD에서 처음 도입 후 다양한 프로세서와 운영체제에서 DEP 등의 이름으로 구현되었다.
멀티스레딩 | |
---|---|
하드웨어 멀티스레딩 | |
유형 | 동시적 멀티스레딩(SMT) |
구현 | 인텔 하이퍼스레딩 기술(HTT) AMD 불도저 마이크로아키텍처 POWER8 후지쯔 SPARC64 |
개요 | |
장점 | 시스템 처리량 증가 리소스 활용도 향상 반응성 향상 |
단점 | 복잡성 증가 전력 소비 증가 소프트웨어 지원 필요 |
역사 | |
구현 | |
예시 | |
소프트웨어 지원 |
2. 멀티스레딩의 장단점
멀티스레딩은 처리량 컴퓨팅을 위한 주요 기술 중 하나로, 1990년대 후반부터 명령어 수준 병렬 처리의 한계를 극복하기 위해 널리 사용되기 시작했다. 이를 통해 트랜잭션 처리와 같은 분야에서 처리량 컴퓨팅 개념이 다시 부상하게 되었다.
멀티스레딩은 장점도 있지만, 몇 가지 비판적인 시각도 존재한다.
- 여러 스레드가 캐시나 변환 색인 버퍼(TLB) 등의 하드웨어를 공유할 때 서로 간섭하여 스래싱을 유발할 수 있다.
- 단일 스레드의 실행 시간은 향상되지 않고, 오히려 감소할 수 있다.
- 멀티스레딩을 위한 하드웨어 지원은 멀티 프로세싱과 비교하여 애플리케이션 프로그램이나 운영 체제에 더 많은 변경을 요구한다.
- 두 프로세스에서 데이터를 병합하는 것은 동일한 데이터를 단일 스레드에서 처리하는 것보다 훨씬 더 높은 비용이 발생할 수 있으며, 프로세스 간 통신 및 동기화와 같은 오버헤드로 인해 잠재적으로 두 배 이상 증가할 수 있다.[2][3][4]
2. 1. 장점
멀티스레딩의 주요 장점은 다음과 같다.[1]장점 | 설명 |
---|---|
응답성 향상 | 대화형 프로그램에서 일부분이 중단되거나 긴 작업을 수행해도 프로그램 수행이 계속되어 사용자 응답성이 증가한다. |
자원 공유 | 프로세스 자원과 메모리를 공유하여 효율적이다. |
경제성 | 스레드 생성 및 문맥 교환이 프로세스 생성보다 경제적이다. |
멀티프로세서 활용 | 다중 CPU에서 병렬성이 증가한다. |
1990년대 후반부터 명령어 수준 병렬 처리를 더 이상 활용하기 어려워지면서 멀티스레딩 패러다임이 더욱 널리 사용되게 되었다. 이를 통해 처리량 컴퓨팅 개념이 트랜잭션 처리와 같은 보다 전문적인 분야에서 다시 부상했다. 단일 스레드 또는 단일 프로그램의 속도를 높이는 것은 매우 어렵지만, 대부분의 컴퓨터 시스템은 여러 스레드 또는 프로그램 간에 멀티태스킹을 수행한다. 따라서 모든 작업의 처리량을 향상시키는 기술은 전체적인 성능 향상으로 이어진다.
처리량 컴퓨팅을 위한 두 가지 주요 기술은 멀티스레딩과 멀티프로세싱이다. 스레드에서 캐시 미스가 많이 발생하면, 다른 스레드는 사용되지 않는 컴퓨팅 자원을 계속 활용할 수 있어 전체적인 실행 속도가 빨라질 수 있다. 이는 단일 스레드만 실행되었을 경우 이러한 자원이 유휴 상태로 남을 수 있기 때문이다. 또한, 스레드가 CPU의 모든 컴퓨팅 자원을 사용할 수 없는 경우, 다른 스레드를 실행하면 해당 자원이 유휴 상태가 되는 것을 방지할 수 있다.
2. 1. 1. 응답성 향상
대화형 프로그램을 멀티스레드화하면, 프로그램의 일부분(스레드)이 중단되거나 긴 작업을 수행하더라도 프로그램의 수행이 계속되어 사용자에 대한 응답성이 증가된다. 예를 들어, 멀티스레드가 적용된 웹 브라우저 프로그램에서 하나의 스레드가 이미지 파일을 로드하고 있는 동안, 다른 스레드는 사용자와의 상호 작용이 가능하다.[1]2. 1. 2. 자원 공유
스레드는 자동적으로 그들이 속한 프로세스의 자원과 메모리를 공유한다.[1] 코드 공유의 이점은, 한 응용 프로그램이 같은 주소 공간 내에 여러 개의 다른 활동성 스레드를 가질 수 있다는 점이다.[1]2. 1. 3. 경제성
스레드는 자신이 속한 프로세스의 자원을 공유하기 때문에, 스레드를 생성하고 문맥 교환을 하는 편이 보다 경제적이다. 프로세스 생성에는 메모리와 자원을 할당하는 비용이 많이 든다.[1]2. 1. 4. 멀티프로세서 활용
멀티프로세서 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있다. 단일 스레드 프로세스는 CPU가 많아도 CPU 한 개에서만 실행된다. 즉, 다중 스레드화를 하면 다중 CPU에서 병렬성이 증가된다.[1]스레드에서 캐시 미스가 많이 발생하면, 다른 스레드는 사용되지 않는 컴퓨팅 자원을 계속 활용할 수 있어 전체적인 실행 속도가 빨라질 수 있다. 이는 단일 스레드만 실행되었을 경우 이러한 자원이 유휴 상태로 남을 수 있기 때문이다. 또한, 스레드가 CPU의 모든 컴퓨팅 자원을 사용할 수 없는 경우(명령어가 서로의 결과에 의존하기 때문에), 다른 스레드를 실행하면 해당 자원이 유휴 상태가 되는 것을 방지할 수 있다.[1]
2. 2. 단점
멀티스레딩에는 몇 가지 비판적인 시각도 존재한다.
- 여러 스레드가 캐시나 변환 색인 버퍼(TLB) 등의 하드웨어를 공유할 때 서로 간섭하여 스래싱을 유발할 수 있다.
- 단일 스레드의 실행 시간은 향상되지 않고, 오히려 감소할 수 있다.
- 멀티스레딩을 위한 하드웨어 지원은 멀티 프로세싱과 비교하여 애플리케이션 프로그램이나 운영 체제에 더 많은 변경을 요구한다.
- 두 프로세스에서 데이터를 병합하는 것은 동일한 데이터를 단일 스레드에서 처리하는 것보다 훨씬 더 높은 비용이 발생할 수 있으며, 프로세스 간 통신 및 동기화와 같은 오버헤드로 인해 잠재적으로 두 배 이상 증가할 수 있다.[2][3][4]
2. 2. 1. 캐시 간섭
여러 스레드는 캐시나 변환 색인 버퍼(TLB)와 같은 하드웨어 리소스를 공유할 때 서로 간섭할 수 있다. 결과적으로 단일 스레드가 실행될 때조차도, 스레드 전환 하드웨어를 수용하기 위해 필요한 더 낮은 주파수 또는 추가 파이프라인 단계로 인해 단일 스레드의 실행 시간이 개선되지 않고 저하될 수 있다.[1]전반적인 효율성은 다양하다. 인텔은 하이퍼 스레딩 기술로 최대 30% 개선을 주장하는 반면,[1] 비최적화된 종속 부동 소수점 연산의 루프를 수행하는 합성 프로그램은 병렬로 실행될 때 실제로 100% 속도 향상을 얻는다. 반면에, MMX(명령 집합) 또는 알티벡 확장을 사용하고 데이터 프리페치를 수행하는(좋은 비디오 인코더가 그럴 수 있듯이) 수동으로 조정된 어셈블리 언어 프로그램은 캐시 미스나 유휴 컴퓨팅 리소스의 영향을 받지 않는다. 따라서 이러한 프로그램은 하드웨어 멀티스레딩의 이점을 얻지 못하며, 공유 리소스에 대한 경합으로 인해 실제로 성능이 저하될 수 있다.
2. 2. 2. 실행 시간 지연 가능성
하나의 스레드만 실행 중인 경우, 싱글 스레드의 실행 시간이 개선되지 않고 오히려 지연될 수 있다. 여러 스레드는 캐시 또는 변환 색인 버퍼(TLB)와 같은 하드웨어 리소스를 공유할 때 서로 간섭할 수 있으며, 이로 인해 스레드 전환 하드웨어를 수용하기 위해 필요한 더 낮은 주파수 또는 추가 파이프라인 단계 때문에 단일 스레드의 실행 시간이 저하될 수 있다.[1]전반적인 효율성은 다양하다. 인텔은 하이퍼 스레딩 기술로 최대 30% 개선을 주장하는 반면,[1] 비최적화된 종속 부동 소수점 연산의 루프를 수행하는 합성 프로그램은 병렬로 실행될 때 실제로 100% 속도 향상을 얻는다. 반면에, MMX(명령 집합) 또는 알티벡 확장을 사용하고 데이터 프리페치를 수행하는(좋은 비디오 인코더가 그럴 수 있듯이) 수동으로 조정된 어셈블리 언어 프로그램은 캐시 미스나 유휴 컴퓨팅 리소스의 영향을 받지 않으므로, 하드웨어 멀티스레딩의 이점을 얻지 못하며 공유 리소스에 대한 경합으로 인해 실제로 성능이 저하될 수 있다.
2. 2. 3. 구현 복잡성
- 다중 스레드는 캐시나 변환 색인 버퍼(TLB)와 같은 하드웨어 리소스를 공유할 때 서로 간섭할 수 있다.
- 하나의 스레드만 실행 중인 경우 싱글 스레드의 실행 시간이 개선되지 않고 오히려 지연될 수 있다.
- 멀티스레딩 하드웨어 지원을 위해서는 응용 프로그램과 운영 체제 모두 충분한 변화가 필요하다.
- 스레드 스케줄링은 멀티스레딩의 주요 문제이기도 하다.[1]
- 여러 스레드는 캐시 또는 TLB와 같은 하드웨어 리소스를 공유할 때 서로 간섭할 수 있다. 단일 스레드가 실행될 때조차도, 스레드 전환 하드웨어를 수용하기 위해 필요한 더 낮은 주파수 또는 추가 파이프라인 단계로 인해 단일 스레드의 실행 시간이 개선되지 않고 저하될 수 있다.
- 소프트웨어 측면에서 하드웨어 멀티스레딩 지원은 소프트웨어에 더 많이 노출되어, 멀티 프로세싱보다 응용 프로그램과 운영 체제 모두에 더 많은 변경을 요구한다.[2][3][4] 스레드(컴퓨터 과학)(thread)를 지원하기 위해 사용되는 하드웨어 기술은 컴퓨터 프로그램의 멀티태스킹(computer multitasking)에 사용되는 소프트웨어 기술과 유사하며, 스레드 스케줄링 또한 멀티스레딩에서 주요 문제이다.
3. 멀티스레딩 모델
멀티스레딩 모델에는 다대일 모델, 일대일 모델, 다대다 모델이 있다. 다대일 모델은 여러 사용자 스레드를 하나의 커널 스레드에 연결하고, 일대일 모델은 각 사용자 스레드를 각각 하나의 커널 스레드에 연결한다. 다대다 모델은 여러 사용자 스레드를 여러 커널 스레드에 연결하는 방식이다.
3. 1. 다대일 (Many-to-One) 모델
여러 개의 사용자 수준 스레드들이 하나의 커널 스레드(프로세스)로 매핑되는 방식이다. 사용자 수준에서 스레드 관리가 이루어진다. 주로 커널 스레드를 지원하지 않는 시스템에서 사용하며, 한 번에 하나의 스레드만이 커널에 접근할 수 있다는 단점이 있다. 하나의 스레드가 커널에 시스템 호출을 하면 나머지 스레드들은 대기해야 하기 때문에 진정한 의미의 동시성을 지원하지 못한다. 다시 말해, 여러 개의 스레드가 동시에 시스템 호출을 사용할 수 없다. 또한 커널 입장에서는 프로세스 내부의 스레드들을 인식할 수 없고 하나의 프로세스로만 보이기 때문에 다중처리기 환경이라도 여러 개의 프로세서에 분산하여 수행할 수 없다.3. 2. 일대일 (One-to-One) 모델
사용자 스레드들을 각각 하나의 커널 스레드로 매핑시키는 방식이다. 사용자 스레드가 생성되면 그에 따른 커널 스레드가 생성된다. 이렇게 하면 다-대-일 방식에서 시스템 호출 시 다른 스레드들이 중단되는 문제를 해결할 수 있으며 여러 개의 스레드를 다중처리기에 분산하여 동시에 수행할 수 있는 장점이 있다.[1] 그러나 커널 스레드도 한정된 자원을 사용하므로 무한정 생성할 수는 없기 때문에, 스레드를 생성할 때 그 개수를 염두에 두어야 한다.[1]3. 3. 다대다 (Many-to-Many) 모델
여러 개의 사용자 스레드를 여러 개의 커널 스레드로 매핑시키는 모델이다. 다대일 방식과 일대일 방식의 문제점을 해결하기 위해 고안되었다. 커널 스레드는 생성된 사용자 스레드와 같은 수 또는 그 이하로 생성되어 스케줄링한다. 다대일 방식에서 스레드가 시스템 호출 시 다른 스레드가 중단되는 현상과 일대일 방식에서 사용할 스레드의 수에 대해 고민하지 않아도 된다. 커널이 사용자 스레드와 커널 스레드의 매핑을 적절하게 조절한다.4. 멀티스레딩의 유형
멀티스레딩은 1990년대 후반부터 명령어 수준 병렬 처리의 활용이 어려워지면서 더욱 널리 사용되기 시작했다. 이는 처리량 컴퓨팅 개념을 트랜잭션 처리와 같은 특수 분야에서 다시 주목받게 했다. 단일 스레드나 프로그램의 속도를 높이는 것은 어렵지만, 대부분의 컴퓨터 시스템은 여러 스레드나 프로그램 간에 멀티태스킹을 수행한다. 따라서 모든 작업의 처리량을 향상시키는 기술은 전체적인 성능 향상으로 이어진다.[1]
처리량 컴퓨팅을 위한 두 가지 주요 기술은 멀티프로세싱과 멀티스레딩이다.[1]
하지만 멀티스레딩에는 몇 가지 비판도 존재한다.[1]
- 캐시나 TLB 등의 하드웨어를 공유하면 여러 스레드가 서로 간섭하여 스래싱을 유발할 수 있다.
- 단일 스레드의 실행 시간은 향상되지 않고 오히려 감소할 수 있다.
- 멀티스레딩을 위한 하드웨어 지원은 소프트웨어에 영향을 주며, 멀티프로세싱에 비해 애플리케이션 프로그램이나 운영 체제에 더 많은 변경이 필요하다.
멀티스레드를 지원하는 하드웨어 기술은 컴퓨터 프로그램의 멀티태스킹을 위한 소프트웨어 기술과 유사하다.[1]
4. 1. 조립 세분 멀티스레딩 (Coarse-grained Multithreading)
조립 세분 멀티스레딩(Coarse-grained Multithreading)은 블록 멀티스레딩 또는 협력적 멀티스레딩이라고도 불리며, 긴 지연 시간을 가진 이벤트가 발생할 때 스레드 전환이 일어나는 방식이다.4. 1. 1. 개념
가장 단순한 형태의 멀티스레딩은 일반적으로 긴 지연 시간을 발생시키는 이벤트 때문에 한 스레드가 블록될 때 발생한다. 이러한 지연은 칩 외부 메모리에 접근해야 하는 캐시 미스일 수 있으며, 데이터가 반환되기까지 수백 사이클의 CPU 시간이 걸릴 수 있다. 스레드 프로세서는 지연이 해결되기를 기다리는 대신, 실행 준비가 된 다른 스레드로 실행을 전환한다. 이전 스레드의 데이터가 도착해야만 이전 스레드가 실행 가능 스레드 목록에 다시 배치된다.예를 들어:
- 사이클 i: 스레드 A의 명령어 j가 실행된다.
- 사이클 i + 1: 스레드 A의 명령어 j + 1이 실행된다.
- 사이클 i + 2: 스레드 A의 명령어 j + 2가 실행되는데, 이는 모든 캐시에서 미스되는 로드 명령어이다.
- 사이클 i + 3: 스레드 스케줄러가 호출되어, 스레드 B로 전환한다.
- 사이클 i + 4: 스레드 B의 명령어 k가 실행된다.
- 사이클 i + 5: 스레드 B의 명령어 k + 1이 실행된다.
개념적으로, 이는 작업이 특정 유형의 이벤트를 기다려야 할 때 자발적으로 실행 시간을 포기하는 실시간 운영체제에서 사용되는 협력적 멀티태스킹과 유사하다. 이러한 유형의 멀티스레딩은 블록, 협력적 또는 조립된(coarse-grained) 멀티스레딩으로 알려져 있다.
멀티스레딩 하드웨어 지원의 목표는 블록된 스레드와 실행 준비가 된 다른 스레드 간의 빠른 전환을 허용하는 것이다. 한 스레드에서 다른 스레드로 전환하는 것은 하드웨어가 한 레지스터 세트에서 다른 레지스터 세트로 전환하는 것을 의미한다. 이 목표를 달성하기 위해 프로그램에서 볼 수 있는 레지스터뿐만 아니라 일부 프로세서 제어 레지스터(예: 프로그램 카운터)에 대한 하드웨어가 복제된다. 예를 들어, 두 스레드 간에 빠르게 전환하기 위해 프로세서는 두 세트의 레지스터로 구축된다.
멀티스레딩에 대한 추가 하드웨어 지원을 통해 스레드 전환을 하나의 CPU 사이클 내에 수행할 수 있어 성능이 향상된다. 또한, 추가 하드웨어를 통해 각 스레드는 다른 스레드와 하드웨어 리소스를 공유하지 않고 단독으로 실행되는 것처럼 작동하여 멀티스레딩을 지원하기 위해 애플리케이션 및 운영 체제 내에서 필요한 소프트웨어 변경의 양을 최소화한다.
많은 종류의 마이크로컨트롤러 및 임베디드 프로세서에는 인터럽트에 대한 빠른 컨텍스트 스위칭을 허용하기 위해 여러 레지스터 뱅크가 있다. 이러한 방식은 사용자 프로그램 스레드와 인터럽트 스레드 간의 일종의 블록 멀티스레딩으로 간주될 수 있다.
4. 1. 2. 하드웨어 비용
멀티스레딩 하드웨어 지원의 목표는 블록된 스레드와 실행 준비가 된 다른 스레드 간의 빠른 전환을 허용하는 것이다. 한 스레드에서 다른 스레드로 전환한다는 것은 하드웨어가 한 레지스터 세트에서 다른 레지스터 세트로 전환하는 것을 의미한다. 이 목표를 달성하기 위해 프로그램에서 볼 수 있는 레지스터뿐만 아니라 프로그램 카운터와 같은 일부 프로세서 제어 레지스터에 대한 하드웨어가 복제된다. 예를 들어, 두 스레드 간에 빠르게 전환하기 위해 프로세서는 두 세트의 레지스터로 구축된다.[1]이러한 하드웨어 추가는 다음과 같은 이점을 제공한다.[1]
- 스레드 전환이 하나의 CPU 사이클 내에 완료된다.
- 각 스레드는 다른 스레드와 하드웨어 자원을 공유하지 않고 단독으로 실행되는 것처럼 작동하여, 멀티스레딩을 지원하기 위해 애플리케이션 및 운영 체제 내에서 필요한 소프트웨어 변경의 양을 최소화한다.
많은 종류의 마이크로컨트롤러 및 임베디드 프로세서에는 인터럽트에 대한 빠른 컨텍스트 스위칭을 허용하기 위해 여러 레지스터 뱅크가 있다. 이러한 방식은 사용자 프로그램 스레드와 인터럽트 스레드 간의 일종의 블록 멀티스레딩으로 간주될 수 있다.[1]
4. 2. 세분화된 멀티스레딩 (Fine-grained Multithreading)
세분화된 멀티스레딩은 배럴 프로세서라고도 불리며, 매 사이클마다 스레드를 전환하는 방식이다. 이 방식은 실행 파이프라인에서 모든 데이터 종속성 스톨을 제거하는 것을 목표로 한다. 한 스레드의 명령어는 다른 스레드와 독립적이기 때문에, 파이프라인의 한 단계에 있는 명령어가 이전 명령어의 출력에 의존할 가능성이 적다.개념적으로, 세분화된 멀티스레딩은 운영 체제에서 사용되는 선점형 멀티태스킹과 유사하다. 각 활성 스레드에 1 CPU 사이클이라는 시간 조각이 주어지는 것으로 비유할 수 있다.
이러한 유형의 멀티스레딩은 처음에는 배럴 프로세싱이라고 불렸는데, 배럴의 살이 파이프라인 단계와 실행 스레드를 나타내기 때문이다. 인터리브드, 선점형, 세분화된 또는 시간 분할 멀티스레딩은 보다 현대적인 용어이다.
세분화된 멀티스레딩은 각 파이프라인 단계가 처리 중인 명령어의 스레드 ID를 추적해야 하는 추가 비용이 발생한다. 또한, 파이프라인에서 더 많은 스레드가 동시에 실행되므로 캐시 및 TLB와 같은 공유 리소스는 서로 다른 스레드 간의 스래싱을 방지하기 위해 더 커야 한다.[1]
4. 2. 1. 개념
세분화된 멀티스레딩은 사이클마다 실행 스레드를 전환하는 방식이다. 실행 스레드의 전환은 여러 스레드의 명령 실행을 인터리브(동적 할당에 의한 성능 향상)하기 위해, 대개 라운드 로빈 방식으로 이루어지며, 중지된 스레드는 건너뛴다.[5]예:
- 사이클 i: 스레드 A의 명령이 발행된다
- 사이클 i+1: 스레드 B의 명령이 발행된다
- 사이클 i+2: 스레드 C의 명령이 발행된다
이러한 유형의 멀티스레딩의 목적은 실행 파이프라인에서 데이터 종속성에 의한 스톨을 모두 제거하는 것이다. 하나의 스레드가 상대적으로 다른 스레드로부터 독립되어 있기 때문에, 하나의 파이프의 스테이지 내의 하나의 명령이 파이프라인의 이전 명령의 출력 결과를 필요로 할 가능성은 낮다.
개념적으로는 운영 체제에서 사용되는 선점형 멀티태스킹과 비슷하다. 각 활성 스레드에 주어진 타임 슬라이스를 1 CPU 사이클로 비유할 수 있을 것이다.
4. 2. 2. 장점
세분화된 멀티스레딩의 주요 장점 중 하나는 스레드가 짧은 시간 또는 긴 시간 동안 중단되어 발생하는 처리량 감소를 숨길 수 있다는 것이다. 이는 하나의 스레드가 중단될 때 (몇 사이클의 중단이라도) 사이클마다 실행 스레드를 전환하여 다른 스레드의 명령을 실행하기 때문이다.[5]4. 2. 3. 단점
세분화된 멀티스레딩의 주요 단점은 개별 스레드의 실행 속도가 느려진다는 것이다. 사이클마다 실행 스레드를 전환하므로 중단 없이 실행 가능한 스레드가 다른 스레드의 명령에 의해 지연되기 때문이다. 그 대가로 단일 스레드의 성능(레이턴시로 측정)이 저하되므로, 멀티스레딩의 처리량도 향상되지 않는다.[5]4. 2. 4. 하드웨어 비용
블록 유형의 멀티스레딩에서 논의된 하드웨어 비용 외에도, 세분화된 멀티스레딩은 각 파이프라인 단계가 처리 중인 명령어의 스레드 ID를 추적해야 하는 추가 비용이 발생한다.[1] 또한, 파이프라인에서 더 많은 스레드가 동시에 실행되므로 캐시 및 TLB와 같은 공유 리소스는 서로 다른 스레드 간의 스래싱을 방지하기 위해 더 커야 한다.[1]4. 3. 동시 멀티스레딩 (Simultaneous Multithreading, SMT)
동시 멀티스레딩(Simultaneous Multithreading, SMT)은 수퍼스칼라 프로세서에서 여러 스레드의 명령을 동시에 실행하여 프로세서의 효율성을 높이는 기술이다.SMT의 구현 예시는 다음과 같다.
- DEC(컴팩) EV8(미완성)
- 인텔 하이퍼스레딩 기술
- IBM POWER5/POWER6/POWER7/POWER8/POWER9
- IBM z13/z14/z15
- 썬 마이크로시스템즈 UltraSPARC T2
- 크레이 XMT
- AMD 불도저 및 젠 마이크로아키텍처
4. 3. 1. 개념
가장 진보된 형태의 멀티스레딩은 수퍼스칼라 프로세서에 적용된다. 일반적인 수퍼스칼라 프로세서는 매 CPU 사이클마다 단일 스레드에서 여러 개의 명령을 실행하는 반면, 동시 멀티스레딩(SMT)에서는 수퍼스칼라 프로세서가 매 CPU 사이클마다 여러 스레드에서 명령을 실행할 수 있다. 단일 스레드는 제한된 양의 명령 수준 병렬 처리를 가지고 있다는 것을 인식하여, 이러한 유형의 멀티스레딩은 사용되지 않는 실행 슬롯과 관련된 낭비를 줄이기 위해 여러 스레드에서 사용할 수 있는 병렬 처리를 활용하려고 시도한다.[1]예를 들어,[1]
- 사이클 i: 스레드 A의 명령 j 및 j+1과 스레드 B의 명령 k가 동시에 실행된다.
- 사이클 i+1: 스레드 A의 명령 j+2, 스레드 B의 명령 k+1, 스레드 C의 명령 m이 모두 동시에 실행된다.
- 사이클 i+2: 스레드 A의 명령 j+3과 스레드 C의 명령 m+1 및 m+2가 모두 동시에 실행된다.
SMT와 다른 유형의 멀티스레딩을 구별하기 위해, 한 번에 하나의 스레드에서만 명령을 실행할 수 있는 경우 "시간적 멀티스레딩"이라는 용어를 사용한다.[1]
4. 3. 2. 하드웨어 비용
인터리브드 멀티스레딩에서 논의된 하드웨어 비용 외에도, SMT는 각 파이프라인 단계에서 처리되는 각 명령의 스레드 ID를 추적해야 하는 추가 비용이 발생한다.[1] 또한, 캐시 및 TLB와 같은 공유 리소스는 처리되는 많은 수의 활성 스레드에 맞게 크기를 조정해야 한다.[1]5. 구현 관련 과제
멀티스레딩 구현 관련 주요 연구 분야는 다음에 실행할 스레드를 빠르게 선택하고, 실행 준비가 완료된 스레드와 중단된 스레드 목록을 유지 관리해야 하는 스레드 스케줄러이다. 스레드 스케줄러는 소프트웨어, 하드웨어, 또는 이 둘을 조합한 형태로 구현될 수 있다.
특권 제어 레지스터 및 TLB를 포함한 모든 소프트웨어에서 볼 수 있는 상태를 복제하는 멀티스레딩 방식을 사용하면 각 스레드에 대해 가상 머신을 생성할 수 있다. 이를 통해 각 스레드는 동일한 프로세서에서 자체 운영 체제를 실행할 수 있다. 반면에 사용자 모드 상태만 저장하면 하드웨어가 덜 필요하므로, 동일한 다이 면적 또는 비용으로 더 많은 스레드를 한 번에 활성화할 수 있다.
5. 1. 스레드 스케줄러
스레드 스케줄러는 실행 준비가 된 스레드 목록에서 다음에 실행할 스레드를 빠르게 선택하고, 실행 준비가 된 스레드와 중단된 스레드 목록을 유지 관리하는 중요한 역할을 담당한다. 스레드 스케줄러는 소프트웨어, 하드웨어, 또는 이 둘을 혼합한 방식으로 구현될 수 있다. 스케줄러에서 사용할 수 있는 다양한 스레드 우선순위 체계 또한 중요한 연구 주제이다.어떤 유형의 이벤트(예: 캐시 미스, 스레드 간 통신, DMA 완료 등)가 스레드 전환을 유발해야 하는지도 연구 분야 중 하나이다.
5. 2. 스레드 전환 이벤트
스레드 전환을 유발하는 이벤트에는 캐시 미스, 스레드 간 통신, DMA 완료 등이 있다.[1]5. 3. 가상 머신과의 관계
멀티스레딩 방식으로 특권 제어 레지스터 및 TLB를 포함한 모든 소프트웨어에서 볼 수 있는 상태를 복제하면, 각 스레드에 대해 가상 머신을 생성할 수 있다.[1] 이를 통해 각 스레드는 동일한 프로세서에서 자체 운영 체제를 실행할 수 있다.[1] 반면에 사용자 모드 상태만 저장되는 경우에는 하드웨어가 덜 필요하므로, 동일한 다이 면적 또는 비용으로 더 많은 스레드를 한 번에 활성화할 수 있다.[1]참조
[1]
웹사이트
Intel Hyper-Threading Technology, Technical User's Guide
http://cache-www.int[...]
[2]
서적
Operating System Concepts
[3]
서적
Computer Organization and Design MIPS Edition: The Hardware/Software Interface (The Morgan Kaufmann Series in Computer Architecture and Design)
Morgan Kaufmann
[4]
서적
Parallel Programming: Techniques and Applications Using Networked Workstations and Parallel Computers
Pearson
[5]
서적
Computer Architecture
Elsevier Inc.
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com