Задание. Создайте файл отчёта и заполните титульный лист.
В данной работе мы знакомимся с технологией автоматического распараллеливания программ OpenMP.
Название расшифровывается следующим образом:
Open Multi-Processing.
Распараллеливание программ поддерживается для двух языков программирования
— Fortran;
— С/С++.
В результате использования данной технологии компилятор автоматически генерирует многопоточные программы. Такие программы дают эффект ускорения при запуске на многоядерных системах с общей памятью.
Многоядерные компьютеры — это так называемые «системы с общей памятью». Другое название — разделяемая память. Английское название: SHARED MEMORY.
Имеется в виду совместное использование оперативной памяти: любой поток имеет доступ к общим глобальным переменным процесса. Более красивая официальная формулировка звучит так: «общий доступ параллельных потоков к виртуальному адресному пространству текущего процесса».
Задание. Изучите в Википедии следующие статьи и выясните, что означают эти термины:
— «Multiprocessing» или «Многопроцессорность»;
— «Multithreading (computer architecture)» или «Многопоточность»;
— «Многоядерный процессор» или «Multi-core processor»;
— «OpenMP».
Задание. Изучите историю разработки технологии и версии спецификаций для обоих языков программирования:
https://www.openmp.org/specifications/.
OpenMP использует наиболее распространённую модель параллелизма:
Single Instruction Multiple Data (SIMD).
В этом случае параллельная часть программы состоит из нескольких одинаковых потоков, которые обрабатывают разные наборы данных.
Задание. Изучите в Википедии статьи «SIMD» и «Таксономия Флинна». Выясните, что такое SIMD.
Использование OpenMP проще всего изучать на компьютере с одним многоядерным процессором.
Чтобы сделать из последовательной программы параллельную, разработчику нужно добавить всего несколько строк. Компилятор может игнорировать директивы распараллеливания. В этом случае мы получаем исходную последовательную программу. Если настроить компилятор на использование OpenMP, он автоматически сгенерирует и скомпилирует параллельную программу.
В технологии OpenMP происходит динамическое создание потоков. В процессе работы программа может создавать и уничтожать дополнительные потоки (рис. 2.1). Такая модель условно называется «fork-join». Это означаетразделение программына несколько параллельных веток, выполнение работы параллельном режиме и последующее слияние в одну последовательную ветку.
Рис. 2.1. Модель распараллеливания fork-join
Задание. Изучите в Википедии статью «Fork join».
В технологии OpenMP используют следующие понятия и термины.
Construct — Конструкция — директива и следующий за ней структурный блок команд (часть программы, ограниченная фигурными скобками).
Directive — Директива — строка, начинающаяся как #pragma ompи определяющая поведение программы.
Thread — Поток — часть программы, которая может выполняться последовательно на одном ядре.
Master thread — Главный поток — поток, который существует на протяжении всего времени выполнения процесса и который создаёт группу параллельных потоков ( Team) при входе в параллельную область.
Team — Группа параллельных потоков — один или несколько потоков, которые участвуют в выполнении какой-либо конструкции языка.
Параллельная программа состоит из параллельных и последовательных областей.
Parallel region — Параллельная область — часть программы, которая может выполняться несколькими потоками.
Serial region — Последовательная область — часть программы, которая выполняется только главным потоком.
Переменные делятся на два вида — в зависимости от способа доступа:
Private — уникальная переменная, доступная только внутри потока.
Shared — общая переменная, доступная всем параллельным потокам в рамках одной группы.
2.4. Ответственность разработчика
Лёгкость распараллеливания оборачивается повышением ответственности программиста.
Конкретная реализация OpenMP (среда разработки, компилятор и библиотека) не обязательно проверяет корректность распараллеливания и возникновение следующих нежелательных ситуаций:
Читать дальше
Конец ознакомительного отрывка
Купить книгу