0

OpenMP에서 정의 된 코어의 수는 어떻게됩니까?이 API는 코어의 존재를 어떻게 알 수 있습니까?OpenMP가 시스템의 코어 수를 어떻게 결정합니까?

+0

@zulan 확인해 보았지만 nthreads-var의 기본값은 1이지만 코어 수가 1보다 큰 것으로 나타났습니다. 따라서 no와 관련이 없습니다. 코어의? –

+0

어디서 그런 말입니까? OpenMP 표준 4.5는 2.3.2에서 기본값이 * 구현 정의 *라고 말합니다. – Zulan

답변

3

OpenMP는 기본적으로 병렬 영역의 스레드 수를 제어하는 ​​내부 제어 변수 (ICV) nthreads-var을 정의합니다.

초기 값 nthreads-var (환경 변수 OMP_NUM_THREADS으로 정의되지 않은 경우)은 구현이 정의됩니다. 코어의 수는 합리적인 기본값처럼 보일 수 있습니다. GCC (libgomp)는 BSD, Linux, mingw32, POSIX, rtems를 gomp_init_num_threads에 구현합니다. libgomp/config/<platform>/proc.c에서 특정 구현을 확인할 수 있습니다.

리눅스는 pthread_getaffinity_np을 통해 스레드 선호도를 확인하고 프로세스가 실행되도록 허용 된 CPU 수로 스레드 수를 설정합니다. 마찬가지로 MinGW는 GetProcessAffinityMask입니다. 나머지 플랫폼은 기본적으로 sysconf(_SC_NPROCESSORS_ONLN)을 사용합니다.

+1

OpenMP에는 OpenMP 4.0 이상의 스레드 배치 API에 코어 개념이 있습니다. Linux에서 GCC 및 Intel OpenMP 런타임은 토폴로지 정보를 찾기 위해'sysfs '의 CPU 항목을 구문 분석합니다. –

+0

@HristoIliev 좋은 지적. 나는 OP가 내가 처리하려고했던 OpenMP 쓰레드에 대해 더 근본적인 오해가 있다고 생각한다. 보다 기술적으로 정답을 편집했습니다. – Zulan