Мне кажется, что иметь критическую секцию с параллельным блоком в OpenMP бессмысленно!Я мог бы просто написать простой последовательный цикл do, верно?
В следующем (тривиальном) примере вместо
1.
!$omp critical
!$ thread_num = omp_get_thread_num()
print *, "Hello world from thread number ", thread_num
!$omp end critical
!$omp end parallel
2.
do i=1,num_threads
print *, "Hello world from thread number ", thread_num
end do
При этом я понимаюРазница: 1. использует разные темы, а 2. нет.
Существует ли нетривиальный контекст, в котором первый может фактически обеспечить преимущество в скорости перед вторым?