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 |
댓글