LINUX.ORG.RU

максимальное число нитей

 


1

2

Экспериментирую. Что за значение возвращает omp_get_max_threads? И почему его можно превысить?

int p=omp_get_num_procs();
printf("Число процессоров = %d\n",p);
int m=omp_get_max_threads();
printf("Максимальное число потоков = %d\n",m);
#pragma omp parallel num_threads(10)
{
  printf("abc\n");
}
результат запуска:
Число процессоров = 2
Максимальное число потоков = 4
abc
abc
abc
abc
abc
abc
abc
abc
abc
abc

omp_get_num_procs();

Ух ты! А я лепил велосипед, чтобы cmake по информации в /proc/cpuinfo выставлял оптимальное количество потоков для openmp (и не только: когда openmp не справляется, приходится pthreads вручную использовать).

omp_get_max_threads()

А эта штука, наверное, возвращает оптимальное количество потоков с точки зрения openmp.

Странно, что оно в 2 раза больше количества ядер. Как я уже говорил, у меня цифра 1.5 получилась. Думаю, что на сильно многопроцессорных системах коэффициент будет чуть повыше, но вряд ли 2.

Anon
()
Ответ на: комментарий от Boy_from_Jungle

Стыдно, что не прочитал, а додумал, что это максимально возможное вообще )

eiler13
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.