Программа демонстрирует выполнение различных блоков разными нитями.
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_blockRestrictions:
- Нельзя использовать операторы перехода из и в блока SINGLE.