Вперед: 3.2.13. Директива THREADPRIVATE
Назад: 3.2.11. Синхронизация нитей. Директива BARRIER
К содержанию: Оглавление


3.2.12. Синхронизация нитей. Директива FLUSH

В современных компьютерах оперативная память имеет сложную иерархическую структуру, в которую, помимо собственно чипов памяти, входят несколько уровней кэш-памяти, множество регистров, буферы ввода-вывода. Директива FLUSH определяет точку, в которой должна быть гарантирована синхронизация содержимого всех видов памяти для всех нитей.

C/C++:

#pragma omp flush(list)

Fortran:

!$OMP FLUSH(list)

Эта директива является затратной, поэтому не обязательный параметр list позволяет ограничить список переменных, для которых будет применена операция. Кроме того, поскольку на выполнение операции затрачивается значительное время, то OpenMP не гарантирует, что значения переменных будут одними и теми же во всех нитях сразу после выполнения директивы. Неявно FLUSH присутствует во множестве директив: BARRIER, CRITICAL, END CRITICAL, END DO, END PARALLEL, END SECTIONS, END SINGLE, ORDERED, END ORDERED.



Вперед: 3.2.13. Директива THREADPRIVATE
Назад: 3.2.11. Синхронизация нитей. Директива BARRIER
К содержанию: Оглавление