К счастью, невозможно заранее узнать количество потоков. Среда выполнения OpenMP не просто запускает произвольное количество потоков без какого-либо контроля со стороны программиста и пользователя программы. Напротив, он следует четко определенному механизму для определения этого числа, которое подробно описано в спецификации OpenMP . В частности, если вы не указали большее число потоков с num_threads
, количество потоков, запускаемых OpenMP, ограничено значением специальной внутренней управляющей переменной (сокращенно ICV), которая называется * 1006. * nthreads-вар . Способ установки этого ICV - через переменную окружения OMP_NUM_THREADS
или через вызов omp_set_num_threads()
(последний переопределяет первый). Значение nthreads-var доступно при вызове omp_get_max_threads()
. Для других ICV смотрите спецификацию .
Все, что вам нужно сделать, это вызвать omp_get_max_threads()
и использовать возвращаемое значение в качестве размера вашего массива, поскольку число потоков не будет превышать это значение, учитывая, что впоследствии вы не вызываете omp_set_num_threads()
с большим значением и не применяете предложение num_threads
к конструкции parallel
.