Организация параллельных потоков. Часть 2. Учебное пособие - стр. 2
Поскольку листов в отчёте будет много, названия листов (на вкладках) содержат только номера страниц. Подробные названия нужны в верхней части листа и в оглавлении.
Задание. Создайте файл отчёта и заполните титульный лист.
2. Технология OpenMP
В данной работе мы знакомимся с технологией автоматического распараллеливания программ OpenMP.
Название расшифровывается следующим образом:
Open Multi-Processing.
Распараллеливание программ поддерживается для двух языков программирования
– Fortran;
– С/С++.
2.1. Ключевые понятия
В результате использования данной технологии компилятор автоматически генерирует многопоточные программы. Такие программы дают эффект ускорения при запуске на многоядерных системах с общей памятью.
Многоядерные компьютеры – это так называемые «системы с общей памятью». Другое название – разделяемая память. Английское название: SHARED MEMORY.
Имеется в виду совместное использование оперативной памяти: любой поток имеет доступ к общим глобальным переменным процесса. Более красивая официальная формулировка звучит так: «общий доступ параллельных потоков к виртуальному адресному пространству текущего процесса».
Задание. Изучите в Википедии следующие статьи и выясните, что означают эти термины:
– «Multiprocessing» или «Многопроцессорность»;
– «Multithreading (computer architecture)» или «Многопоточность»;
– «Многоядерный процессор» или «Multi-core processor»;
– «OpenMP».
Задание. Изучите историю разработки технологии и версии спецификаций для обоих языков программирования:
https://www.openmp.org/specifications/.
OpenMP использует наиболее распространённую модель параллелизма:
Single Instruction Multiple Data (SIMD).
В этом случае параллельная часть программы состоит из нескольких одинаковых потоков, которые обрабатывают разные наборы данных.
Задание. Изучите в Википедии статьи «SIMD» и «Таксономия Флинна». Выясните, что такое SIMD.
2.2. Многопоточность
Использование OpenMP проще всего изучать на компьютере с одним многоядерным процессором.
Чтобы сделать из последовательной программы параллельную, разработчику нужно добавить всего несколько строк. Компилятор может игнорировать директивы распараллеливания. В этом случае мы получаем исходную последовательную программу. Если настроить компилятор на использование OpenMP, он автоматически сгенерирует и скомпилирует параллельную программу.
В технологии OpenMP происходит динамическое создание потоков. В процессе работы программа может создавать и уничтожать дополнительные потоки (рис. 2.1). Такая модель условно называется «fork-join». Это означаетразделение программына несколько параллельных веток, выполнение работы параллельном режиме и последующее слияние в одну последовательную ветку.