Лекция: Директивы flush, ordered, threadprivate.

Директива flush

Поскольку в современных параллельных вычислительных системах может использоваться сложная структура и иерархия памяти, пользователь должен иметь гарантии того, что в необходимые ему моменты времени каждая нить будет видеть единый согласованный образ памяти. Для этих целей и предназначена директива flush.

#pragma omp flush [<список>]

Указывается в параллельной секции. Поток, обратившийся к директиве переписывает в основную память из своего кэша все переменные, либо переменные, указанные в списке.

Все переменные, которые требуют синхронизации, должны быть перечислены в списке директивы. Если в этом списке присутствует указатель, то осуществляется сброс самого указателя, а не числового значения объекта, на который он указывает.

Директива flush без списка синхронизирует все разделяемые переменные (такой способ синхронизации будет иметь значительные накладные расходы по сравнению с директивой flush со списком).

Директиву flush нельзя использовать, если присутствует оператор nowait(т.е. выполнение без синхронизации).

Аналогично barrier,директива flushне является оператором (в формальном синтаксисе), поэтому в некоторых конструкциях он должен оформляться как блок, т.е. {…}.

Директива ordered

Директива ordered должна находиться внутри конструкций for или parallel for.Программный блок, непосредственно следующий за директивой ordered, выполняется в порядке, в котором итерации цикла выполнялись бы в последовательном режиме.

Синтаксис директивыordered:

#pragma omp ordered

{…}

В параллельном цикле должна быть задана опция ordered. Нить, выполняющая первую итерацию цикла, выполняет операции данного блока. Нить, выполняющая любую следующую итерацию, должна сначала дождаться выполнения всех операций блока всеми нитями, выполняющими предыдущие итерации. Может использоваться, например, для упорядочения вывода от параллельных нитей.

Директива threadprivate

#pragma omp threadprivate (<список переменных>)

Указание класса переменной в последовательной секции.

Указывается в последовательной секции после описания переменных.

При входе в параллельную секцию переменные, указанные в списке становятся локальными.

Директива не влияет на работу с переменными в последовательной секции.

При открытии параллельной секции обязательно должен быть указан параметр copyin с этим же списком переменных

еще рефераты
Еще работы по информатике