Критический раздел внутри параллельного блока в OpenMP - PullRequest
0 голосов
/ 06 февраля 2019

Мне кажется, что иметь критическую секцию с параллельным блоком в 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. нет.

Существует ли нетривиальный контекст, в котором первый может фактически обеспечить преимущество в скорости перед вторым?

1 Ответ

0 голосов
/ 06 февраля 2019

$omp critical указывает, что код выполняется одним потоком за раз.Таким образом, оба ваших примера работают не параллельно, а последовательно.Смысл использования критической секции четко описан в wiki , поэтому ищите подробности (типичная ситуация, когда всем потокам нужно ждать некоторого общего значения (вычисленного ранее параллельным способом, например, некоторого вида суммы элементов)продолжить расчеты)

...