Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Топ:
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Устройство и оснащение процедурного кабинета: Решающая роль в обеспечении правильного лечения пациентов отводится процедурной медсестре...
Интересное:
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Дисциплины:
2017-11-16 | 414 |
5.00
из
|
Заказать работу |
|
|
Простая блокировка OpenMP | Рекурсивная блокировка OpenMP | Win32-функция |
omp_lock_t | omp_nest_lock_t | CRITICAL_SECTION |
omp_init_lock | omp_init_nest_lock | InitializeCriticalSection |
omp_destroy_lock | omp_destroy_nest_lock | DeleteCriticalSection |
omp_set_lock | omp_set_nest_lock | EnterCriticalSection |
omp_unset_lock | omp_unset_nest_lock | LeaveCriticalSection |
omp_test_lock | omp_test_nest_lock | TryEnterCriticalSection |
При одновременном выполнении нескольких потоков часто возникает необходимость их синхронизации. OpenMP поддерживает несколько типов синхронизации, помогающих во многих ситуациях. Один из типов - неявная барьерная синхронизация, которая выполняется в конце каждого параллельного региона для всех сопоставленных с ним потоков. Механизм барьерной синхронизации таков, что, пока все потоки не достигнут конца параллельного региона, ни один поток не сможет перейти его границу. Неявная барьерная синхронизация выполняется также в конце каждого блока #pragma omp for, #pragma omp single и #pragma omp sections. Чтобы отключить неявную барьерную синхронизацию в каком-либо из этих трех блоков разделения работы, укажите раздел nowait.
#pragma omp parallel
{
#pragma omp for nowait
for(int i = 1; i < size; ++i)
x[i] = (y[i-1] + y[i+1])/2;
}
Синхронизация потоков в конце цикла for не будет выполняться, хотя в конце параллельного региона они все же будут синхронизированы.
Типы явной синхронизации:
· atomic
Директива atomic может быть применена только для простых выражений, но является наиболее эффективным средством организации взаимоисключения.
Позволяет выполнить операцию в атомарном режиме (неделимая операция). В этом случае происходит предотвращение прерывания доступа, чтения и записи данных, находящихся в общей памяти, со стороны других потоков.
#pragma omp atomic
<операторы программы>
· critical
|
Для создания критических секций в OpenMP применяется директива #pragma omp critical [имя]. Она имеет такую же семантику, что и критическая секция Win32.
Вы можете использовать именованную критическую секцию, и тогда доступ к блоку кода является взаимоисключающим только для других критических секций с тем же именем (это справедливо для всего процесса).
Если имя не указано, директива ставится в соответствие некоему имени, выбираемому системой. Доступ ко всем неименованным критическим секциям является взаимоисключающим.
#pragma omp critical [ name ]
<структурный блок программы>
· barrier
Для включения в код явной барьерной синхронизации используйте директиву barrier.
#pragma omp barrier
· master
В ряде случаев требуется, чтобы блок кода был выполнен основным потоком.
В этом случае применяется директива #pragma omp master. В отличие от директивы singl e при входе в блок master и выходе из него нет никакого неявного барьера.
· ordered
Директивы ordered определяют блок внутри тела цикла, который должен выполняться в том порядке, в котором итерации идут в последовательном цикле.
#pragma omp ordered
<структурный блок>
· flush
В OpenMP реализована слабая модель памяти.
Директива flush позволяет определить точку синхронизации, в которой системой должно быть обеспечено единое для всех потоков состояние памяти (т.е. если потоком какое-либо значение извлекалось из памяти для модификации, измененное значение обязательно должно быть записано в общую память).
Как показывает формат, директива содержит список list с перечнем переменных, для которых выполняется синхронизация. При отсутствии списка синхронизация выполняется для всех переменных потока.
#pragma omp flush [(list)]
Неявный барьер памяти.
· В директиве barrier.
· При входе и выходе из параллельной секции директив parallel, critical, ordered.
· При выходе из параллельной секции директив for, sections, single.
· При входе и выходе из параллельной секции директив parallel for, parallel sections.
Отказ от неявного барьера памяти
|
· При входе в параллельную секцию директивы for.
· При входе и выходе из секции директивы master.
· При входе в параллельную секцию директивы sections.
· При входе в секцию директивы single.
· При выходе из секции директив for, single или sections, если к директиве применено выражение nowait.
|
|
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!