Распределить функции по нескольким задачам - PullRequest
0 голосов
/ 19 марта 2020

Я хочу распространять подпрограммы для различных задач с 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, работающих параллельно.

Насколько я понимаю, создается один поток, который создает различные задачи.

...