스레드
독립적인 패치/디코드/실행 루프를 가짐
OS에서 처리하는 가장 작은 처리 단위
논리적으로 하나의 스레드는 다음을 포함
- 코드, 레지스터, 스택, 스레드별 데이터
사용자 레벨 스레드 vs 커널 레벨 스레드
일반적으로 스레드는 프로세스에 속함
하나의 프로세스는 여러 개의 스레드를 포함할 수 있음
스레드간 공유 자원은 다른 스레드와 공유 가능
코드, 데이터, OS 자원(열린 파일, 시그널 등)
스레드간 통신
한 프로세스 내 스레드들은 기본적으로 프로세스의 가상 주소 공간의 일부(코드와 데이터 섹션)을 공유
한 프로세스 내 스레드간 통신은 공유 주소 공간에 읽기/쓰기를 통해 이루어짐
한 스레드가 특정 주소에 값을 쓰면 그 값은 다른 스레드에 의해 읽힐 수 있음
멀티프로드 프로세서
여러 스레드의 명령어를 파이프라인에서 실행
파이프라인 내 명령어 간 의존 관계가 없어야 함
다수의 스레드를 동시에 실행하여 ILP(Instruction Level Parallelism)를 높임
단일 스레드로는 ILP에 한계가 있음
스레드 수준 병렬성(Thread Level Parallelism)
한 번에 몇 개의 thread를 실행할 수 있는지
TLP는 다수의 스레드를 사용하여 명시적을 표현됨(처리량 증가를 위해)
ILP보다 비용 효율이 좋음
칼라 프로세서와 Issue Width
- 파이프라인의 목표
- 매 클럭 사이클마다 명령어를 issue(Decoder -> ALU) 하는 것
- 인스트럭션을 issue 하는 것
- 일반적으로 인스트럭션을 execution unit으로 전달하는 것
- Issue Width는 한 프로세서가 issue 가능한 명령의 최대 수
- 하드웨어가 사이클마다 n개의 인스트럭션을 issue 가능할 때
- 프로세서는 n개의 issue slot을 가짐
- 프로세서는 n-issue 프로세서
- 비효율성(branch, 의존성 등)
- 수직적 및 수평적 낭비
멀티쓰레딩
- 긴 지연시간을 숨기기 위해 스레드를 스케줄링하여 수직적 낭비를 줄임
- 매 사이클마다 스레드 문맥 교환
- 긴 지연시간을 가진 동작을 용인할 수 있음(수직적 낭비 제거)
- 여전히 상용되지 않는 이유(많은 슬롯이 낭비되고 있음 : 수평적 낭비)
- 스케줄링
- FIne-grained 멀티스레딩
- 매 사이클마다 스레드간 문맥 교환
- Coarse-grained 멀티스레딩
- 데이터 해저드나 캐시 미스와 같은 상황마다 스레드간 문맥 교환
SMT(Simultaneous Multitreading)
- 매 사이클마다 모든 스레드에서 인스트럭션을 선택
- 수평적 및 수직적 낭비를 모두 막음
- issue width를 최대한 활용
- Hyper-threading
반응형
'멀티코어 프로그래밍 > Basic' 카테고리의 다른 글
캐시 일관성과 거짓 공유 (17) | 2022.04.07 |
---|---|
프로세스와 스레드 (21) | 2022.04.04 |
스레드 스케줄링 (29) | 2022.03.31 |
Make / Makefile (41) | 2022.03.30 |
gcc 컴파일러 (13) | 2022.03.29 |
댓글