Как OpenMP определяет количество ядер в системе?
Как определяется количество ядер в OpenMP, как этот API узнает о существовании ядер.
1 ответ
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
,
Linux проверяет соответствие потоков через pthread_getaffinity_np
и устанавливает количество потоков равным количеству процессоров, на которых процессу разрешено работать. MinGW аналогично через GetProcessAffinityMask
, Остальные платформы в основном используют sysconf(_SC_NPROCESSORS_ONLN)
,