В моей основной функции я поставил:HTOP и OpenMP нитей
omp_set_num_threads(20);
, который говорит OpenMP использовать 20 потоков (есть 40 темы, доступные).
я затем выполнить свой код, который содержит директиву:
#pragma omp parallel for shared(x,y,z)
для основной цикл, и мониторинг использования процессора через Htop (возможно, не лучший способ, но все же). Есть 50 «задач», которые должен выполнить цикл for, и каждый из них занимает довольно много времени. То, что я наблюдаю через htop, заключается в том, что после завершения задач количество потоков падает. В частности, используя 20 потоков, я ожидаю, что ed увидит 2000% использования процессора, пока не останется меньше 20 задач, после чего потоки должны «освободиться». Однако то, что я вижу, - это первые 2000%, и после завершения n задач я вижу производительность 2000% - (n * 100%). Таким образом, кажется, что по мере завершения задач потоки закрываются, а не поднимают новые задачи.
Можно ли это ожидать или это звучит странно?
Итак, после 20 задач загрузка процессора падает до нуля, а ваш параллельный цикл никогда не заканчивается? –
Нет, он заканчивается. Мой вопрос в том, почему потоки, кажется, умирают, когда есть еще задачи, требующие обработки. – user1938803
Поскольку 50 разделенных на 20 составляет 2,5, а планирование циклов по умолчанию с большинством компиляторов является «статическим», поэтому половина потоков обрабатывает две итерации, а другая половина - три итерации. –