Примеры. Программа демонстрирует выполнение различных блоков разными нитями. C / C++ - пример директивы sections #include <omp.h> #define N 1000

Программа демонстрирует выполнение различных блоков разными нитями.

C / C++ - пример директивы sections #include <omp.h> #define N 1000 main () { int i; float a[N], b[N], c[N], d[N]; /* Some initializations */ for (i=0; i < N; i++) a[i] = i * 1.5; b[i] = i + 22.35; #pragma omp parallel shared(a,b,c,d) private(i) { #pragma omp sections nowait { #pragma omp section for (i=0; i < N; i++) c[i] = a[i] + b[i]; #pragma omp section for (i=0; i < N; i++) d[i] = a[i] * b[i]; } /* end of sections */ } /* end of parallel section */ }


SINGLE Directive

Purpose:

  • Директива определяет, что содержимое секции должно быть выполнено лишь один раз нитью, первой дошедшей до данной точки программы (такая ситуация иногда возникает, например, при работе с общими переменными).
  • Используется в секциях где код не является безопасным по отношению к множеству потоков (thread safe). Например, ввод-вывод данных.

Format:

#pragma omp single [clause...] newline private (list) firstprivate (list) nowait structured_block

Restrictions:

  • Нельзя использовать операторы перехода из и в блока SINGLE.

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: