Я хочу распространять подпрограммы для различных задач с OpenMP. В моем коде я реализовал это:
!$omp parallel
!$omp single
do thread = 1, omp_get_num_threads()
!$omp task
write(*,*) "Task,", thread, "is computing"
call find_pairs(me, thread, points)
call count_neighbors(me, thread, neighbors(:, thread))
!$omp end task
end do
!$omp end single
!$omp end parallel
Подпрограммы find_neighbors и count_neighbors выполняют некоторые вычисления. Я установил количество потоков в моей программе ранее с помощью:
nr_threads = 4
call omp_set_num_threads(nr_threads)
Компиляция этого с помощью GNU Fortran (Ubuntu 8.3.0-6ubuntu1) 8.3.0 и запуска, дает мне только один поток, работающий почти на 100 % при мониторинге сверху. Тем не менее, он печатает правильное
Задача, 1 - это вычисление
Задача, 2 - это вычисление
Задача, 3 - вычисление
Задача, 4 вычисляет
Я скомпилирую его, используя:
gfortran -fopenmp main.f90 -o program
Я хочу распределить различные вызовы подпрограмм в соответствии с количеством потоков OpenMP, работающих параллельно.
Насколько я понимаю, создается один поток, который создает различные задачи.