Entry tags:
Линуксовое
У линукса есть несколько механизмов ограничить процесс в доступных процессорных ядрах. Как минимум, cgroup и taskset. Если процессу важно знать, сколько у него ядер (чтобы сконфигурировать thread pool или ещё зачем-нибудь), то наивный способ -- прочитать /proc/cpuinfo. Он неправильный. Менее наивный -- позвать sysconf(_SC_NPROCESSORS_ONLN). Он тоже неправильный. Правильный -- вот:
long num_processor_configured = sysconf (_SC_NPROCESSORS_CONF); /* list the number of processors configured */
long num_processor_available;
cpu_set_t mask;
if (sched_getaffinity(0, sizeof(cpu_set_t), &mask) == 0) {
num_processor_available = CPU_COUNT(&mask);
} else {
num_processor_available = sysconf(_SC_NPROCESSORS_ONLN);
}
no subject
no subject
Запускать нитей больше, чем доступное количество ядер не имеет смысла. Поэтому getaffinity и запуск нитей на все доступные ядра.
Как в этом случае переписать, чтобы учитывать изменение количества ядер? Постоянно дергать getaffinity?
no subject
no subject
no subject
no subject
no subject
пороть на конюшне
no subject
no subject
no subject
no subject
я про pthread_getaffinity_np, например
no subject
no subject
no subject
IMHO, если задача переносимости не ставится, то лучше использовать родной API.
no subject
а апи эти поди похожи как близнецы-братья, разница только в инклюдах и префиксах, т.е. все бесплатно, если сразу.
no subject
no subject
no subject
no subject
no subject
no subject
Мне нужно знать N для make -jN.
no subject