Синхронизация типа atomic

 

Отв. за выпуск Е.Н. Григорьева

 

Подписано в печать 17.09.07. Формат 60´84/16. Бумага газетная. Печать офсетная. Гарнитура Times New Roman. Усл. печ. л. 3,0. Уч.-изд.л. 2,32. Тираж 150 экз. Заказ №657.

 

Чувашский государственный университет

Типография университета

428015 Чебоксары, Московский просп., 15

Лабораторная работа №2

Синхронизация процессов.

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

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

 

В OpenMP существует шесть типов синхронизации[1]:

  • critical,
  • atomic,
  • barrier,
  • master,
  • ordered,
  • flush.

Синхронизация типа atomic

Определяет, что определенная переменная должна быть изменена атомарно – то есть исключить возможность записи значения от нескольких процессов-нитей – избежать проблемы «состояния гонок» (race conditions).

Данная директива относится к идущему непосредственно за ней оператору, гарантируя корректную работу с общей переменной, стоящей в левой части оператора присваивания.

#pragma omp atomic <statement>

where statement is an expression statement of scalar type that takes one of the forms that follow:

statement Conditions
x bin_op = expr where: bin_op is one of: + * - / & ^ | << >> expr is an expression of scalar type that does not reference x.

Атомарные операции могут использоваться в качестве одной из основных форм:

x++ ++x
x-- --x
x += expr x -= expr
x *= expr x /= expr
x <<= expr x >>= expr
x &= expr x ^=expr
x |= expr  

Notes

Load and store operations are atomic only for object x. Evaluation of expr is not atomic.

All atomic references to a given object in your program must have a compatible type.

Objects that can be updated in parallel and may be subject to race conditions should be protected with the omp atomic directive.








Дата добавления: 2015-02-03; просмотров: 868;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.