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

Pthread Affinity

by 기리의 개발로그 2022. 5. 12.

Pthread Affinity

동종 멀티코어 CPU 구조

  • 여러 개의 코어가 하나의 칩을 구성
  • 한 시스템에 여러 개의 칩이 장착될 수도 있음
  • 각 코어마다 개별로 캐시가 있고(L1) 한 칩의 코어가 공유하는 캐시가 있음(L2, L3)

SMT

  • 코어 하나가 두 개 이상의 스레드를 동시에 실행
    • 수평적 낭비와 수직적 낭비를 모두 막음
    • issue width를 최대한 활용
  • Hiyper-threading
    • 한 코어에서 두 스레드를 동시에 실행 가능

스레드가 데이터를 공유하는 경우

  • T1, T2가 데이터 A를 공유하고 T3, T4가 데이터 B를 공유하는 경우

Thread Affinity

  • 스레드가 지정된 코어에서만 실행되도록 함
    • 코어를 하나만 지정할 수도 있고("여기서 실행해라")
    • 여러 개 지정할 수도 있고("이 중 한 군데서 실행해라")
  • Affinity를 설정하는 두 가지 방법
int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize, const cpu_set_t *cpuset 
  • 현재 만들어져 실행 중인 스레드의 affinity 설정
int pthread_attr_setaffinity_np(pthread_attr_t *attr, size_t cpusetsize, const cpu_set_t *cpuset) 
  • 스레드 속성에 affinity 추가
    • 나중에 스레드를 만들 때 해당 속성을 지정

코어 번호는 어떻게 매겨지는가?

  • 각 논리 코어(logical core)마다 번호가 매겨짐
    • 0부터 (논리 코어 수) -1 까지
  • 코어가 동시 멀티쓰레딩(SMT)을 지원할 경우, 동시에 실행 가능한 스레드 수만큼 논리 코어가 생김
    • Hyper-threading을 지원하는 CPU의 경우, 논리 코어 수 = 실제 코어(physical core)수 * 2
  • /proc/cpuinfo 파일
    • 현재 시스템에 장착된 논리 코어들의 정보를 담고 있음
반응형

'멀티코어 프로그래밍 > Pthread' 카테고리의 다른 글

Pthread 동기화(1)  (7) 2022.05.15
Pthread를 이용한 병렬화  (13) 2022.05.13
Pthread 프로그래밍(3)  (5) 2022.05.11
Pthread 반환 값  (3) 2022.05.10
Pthread 아규먼트(2)  (2) 2022.05.09

댓글