Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Тема 3. Система программирования OpenMP



1. Система программирования OpenMP. Понятие нити. Структура OpenMP-программы. Схема FORK/JOIN. Понятие директивы, клаузы. Классы переменных.

OpenMP(Open Multi-Processing) - стандарт для написания параллельных программ для многопроцессорных вычислительных систем с общей памятью (SMP-систем). Реализуется чередование последовательных и параллельных секций. Программа представляется как набор нитей (threads), объединённых общей памятью.

Подключается #include <omp.h>.

Thread (нить, легковесный процесс) – код, выполняющийся на одном процессоре.

При старте выполняется последовательная секция, которую выполняет master thread(нить-мастер).

В точке fork образуются дополнительные n-1 нити, нить-мастер продолжает работу в параллельной секции и имеет номер 0.

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

Чередований Fork/Join может быть столько, сколько необходимо.

Директивы и клаузы

Значительная часть функциональности OpenMP реализуется при помощи директив компилятору. Они должны быть явно вставлены пользователем, что позволит выполнять программу в параллельном режиме. В C/C++ директивы OpenMP определяются конструкциями #pragma. Использование специальной ключевой директивы “omp” указывает на то, что команды относятся к OpenMP и для того, чтобы исключить случайные совпадения имён директив OpenMP с другими именами. Таким образом директивы #pragma для работы с OpenMP имеют следующий формат:

#pragma omp < директива> [<clause>]

{ …. } //Блок, на который действует директива

Clause (опция) - это необязательный модификатор директивы, влияющий на ее поведение. Списки опций, поддерживаемые каждой директивой, различаются, а пять директив (master, critical, flush, ordered и atomic) вообще не поддерживают опции.

Объектом действия большинства директив является один оператор или блок, перед которым расположена директива в исходном тексте программы.

Классы переменных

В параллельной секции существует 2 класса переменных:

· Общие (shared)

· Локальные (private)

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

Программист сам определяет класс переменной.






Дата публикования: 2015-02-03; Прочитано: 392 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...