Как 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),

Другие вопросы по тегам