본문 바로가기
멀티코어 프로그래밍/Basic

스레드

by 기리의 개발로그 2022. 4. 6.

스레드

  • 독립적인 패치/디코드/실행 루프를 가짐

  • 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

댓글