pthread 를 특정 cpu의 특정 코어에 할당할수 있을까요?

bily의 이미지


pthread 프로그래밍에서 특정 cpu, 특정 코어에 할당해서 돌리는 방법이 있을까요?

cpu를 지정해서 돌리는것은 sched_setaffinity 나 다른 함수가 있던데, 이들은 cpu만 지정할수 있는듯 보입니다.

해당하는 시피유가 4개의 코어를 가진다면, 해당 코어를 지정해서 돌릴수 있는 방법이 있을까요?

아니면, 몇번 cpu의 몇번 코어에 할당 됐다는 정보라도 어디서 볼수 있을까요?

분명히 리눅스 코드 어딘가에 어느 코어에 뭐가 할당 됐다는 정보가 있을법도 한데, 찾기가 어렵네요.

답변 부탁드려요.

headbang의 이미지

아래 함수부터 조사해보시죠. 사용해본적은 없으나 찾으시는게 맞을 겁니다.
cpu (package)내 core나 심지어 hyper-thread까지 logical cpu id를 받는 걸로 알고 있습니다.
그리고 cpuset이 그 logical id를 다루는 것 같습니다.

#define _GNU_SOURCE
#include <pthread.h>
int pthread_setaffinity_np(pthread_t th,size_t size,const cpu_set_t *cpuset);
int pthread_getaffinity_np(pthread_t th,size_t size,cpu_set_t *cpuset);
int pthread_attr_setaffinity_np(pthread_attr_t *at,size_t size,const cpu_set_t *cpuset);
int pthread_attr_getaffinity_np(pthread_attr_t *at,size_t size,cpu_set_t *cpuset);
bily의 이미지

답변 감사드립니다.