Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Технологии параллельного программирования

Покупка
Основная коллекция
Артикул: 697049.02.01
Доступ онлайн
от 248 ₽
В корзину
Рассматриваются современные средства разработки параллельных программ для многопроцессорных и многоядерных систем с общей и распределенной памятью: библиотеки MPI, POSIX Threads, система ОреnМР. Изложение материала построено по принципу постепенного усложнения и базируется на примерах реализации различных вычислительных алгоритмов. Книга предназначена для студентов учреждений среднего профессионального образования, обучающихся по укрупненной группе специальностей 09.02.00 «Информатика и вычислительная техника».
Лупин, С. А. Технологии параллельного программирования : учебное пособие / С.А. Лупин, М.А. Посыпкин. — Москва : ИД «ФОРУМ» : ИНФРА-М, 2021. — 206 с. — (Среднее профессиональное образование). - ISBN 978-5-8199-0853-2. - Текст : электронный. - URL: https://znanium.com/catalog/product/1189950 (дата обращения: 25.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
СРЕДНЕЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАНИЕ

Серия основана в 2001 году

С.А. Лупин, М.А. Посыпкин

ТЕХНОЛОГИИ

ПАРАЛЛЕЛЬНОГО

ПРОГРАММИРОВАНИЯ

УЧЕБНОЕ ПОСОБИЕ

Рекомендовано

Учебно-методическим советом СПО 
в качестве учебного пособия для студентов 
учебных заведений, реализующих программу 
среднего профессионального образования 
по укрупненной группе специальностей 
09.02.00 «Информатика и вычислительная техника»

Элвктронно
znanium.com

Москва

ИД «ФОРУМ» -  ИНФРА-М 
2021

УДК 004.272(075.32) 
ББК 32.973я723 
Л85

Р е ц е н з е н т ы :

Бархоткии В.А. — доктор технических наук, профессор, заместитель 
проректора по научной работе, профессор кафедры вычислительной 
техники, директор Научно-исследовательского института вычислительных средств и систем управления Национального исследовательского университета «Московский институт электронной техники»;

Шабанов Б.М. — кандидат технических наук, врио директора Межведомственного суперкомпьютерного центра Российской академии 
наук — филиала Федерального научного центра Научно-исследовательского института системных исследований Российской академии 
наук

Лупин С.А.

Л85 
Технологии параллельного программирования : учебное пособие /  
С.А. Лупин, М.А. Посыпкин. — Москва : ИД «ФОРУМ» : ИНФРА-М, 
2021. — 206 с. — (Среднее профессиональное образование).

ISBN 978-5-8199-0853-2 (ИД «ФОРУМ»)
ISBN 978-5-16-014618-8 (ИНФРА-М, print)
ISBN 978-5-16-108958-3 (ИНФРА-М, online)

Рассматриваются современные средства разработки параллельных 
программ для многопроцессорных и многоядерных систем с общей и распределенной памятью: библиотеки MPI, POSIX Threads, система ОреnМР. 
Изложение материала построено по принципу постепенного усложнения 
и базируется на примерах реализации различных вычислительных алгоритмов.

Книга предназначена для студентов учреждений среднего профессионального образования, обучающихся по укрупненной группе специальностей 09.02.00 «Информатика и вычислительная техника».

УДК 004.272(075.32) 
ББК 32.973я723

ISBN 978-5-8199-0853-2 (ИД «ФОРУМ»)
ISBN 978-5-16-014618-8 (ИНФРА-М, print) 
© Лупин С А , Посыпкин МА , Ж 9 
ISBN 978-5-16-108958-3 (ИНФРА-М, online) 
© ИД «ФОРУМ», 2019

ОГЛАВЛЕНИЕ

Оглавление....................................................................................................3
Предисловие...................................................................................................5
Введение......................................................................................................... 7

Области применения параллельных вычислений................................... 8
Краткий обзор архитектуры параллельных систем................................ 9
Структура и целевая аудитория пособия................................................10

1. Параллельные программы на основе передачи сообщений......... 12

1.1. Параллельные процессы, взаимодействующие с помощью

передачи сообщений.........................................................................12

1.2. Простейшая МР1-программа.............................................................12
1.3. Пересылка данных между двумя процессами.................................16
1.4. Численное интегрирование: параллельная реализация на

основе MPI.........................................................................................21

1.5. Семантика точечных обменов......................................................... 25
1.6. Организация буферизованных пересылок...................................... 26
1.7. Прием сообщения по шаблону....................................... 
 
29

1.8. Стратегия управляющий—рабочие (master—slave):

адаптивная квадратура..................................................................... 30

1.9. Отложенные пересылки данных...................................................... 38
1.10. Коммуникаторы и группы.............................................................. 42
1.11. Коллективные взаимодействия процессов................................... 54

2. Многопоточное программирование............................ 
 
97

2.1. Процессы и потоки в многозадачной операционной системе.....97
2.2. Создание и завершение потока в интерфейсе POSIX Threads.. 102
2.3. Многопоточная программа численного интегрирования...........106
2.4. Синхронизация.................................................................................111

3. Среда программирования ОрепМР...................................................119

3.1. Общая организация среды ОрепМР и модель выполнения.......120
3.2. Hello World на ОрепМР...................................................................123
3.3. Опции для переменных в ОрепМР-программе.............................128
3.4. Синхронизация в ОрепМР...............................................................132
3.5. Распределение работы между параллельными потоками..........133

Заключение................................................................................................ 146

3

Литература............... 
 
147

Приложение 1. Справочная информация по MPI ............................148

Коды ошибок......................................................................  
 
149

Функции точечных обменов..................................................................150
Работа с типами данных.................................... 
163

Коллективные взаимодействия..............................................................167
Операции с группами и коммуникаторами..........................................176

Приложение 2. Основные функции многопоточного 
программирования................................................................................... 184
Приложение 3. Учебный компьютерный класс, как средство 
реализации параллельных вычислений .............................................194
Приложение 4. Язык параллельного программирования шрС....202

ПРЕДИСЛОВИЕ

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

Чрезвычайно важным является подготовка специалистов в 
данной области. Для этого в программу многих высших учебных 
заведений введен курс «Параллельное программирование». Параллельное программирование является обобщающим термином, 
применяемым для обозначения технологий и методов разработки 
программ для суперкомпьютеров. Преподавание этой дисциплины на высоком уровне требует объединения усилий образовательных учреждений и крупнейших научных центров, в которых 
ведутся исследования в области параллельных вычислений, обладающих необходимыми вычислительными ресурсами мирового 
уровня. Такое сотрудничество было организовано Московским 
институтом электронной техники и крупнейшим российским вычислительным центром —  Межведомственным суперкомпьютерным центром РАН. 
В течение шести последних лет студенты 
МИЭТ проходят обучение на базе МСЦ РАН. Одним из основных курсов программы обучения является курс «Параллельное 
программирование». Студенты посещают лекции специалистов 
МСЦ РАН и выполняют лабораторные работы под их руководством. Участие сотрудников МСЦ РАН дает возможность студентам осваивать передовые технологии параллельного программирования, получать представление о последних достижениях в 
данной области. Исключительно важной является также возмож5

ность апробации полученных знаний на современных образцах 
вычислительной техники, установленных в МСЦ РАН.

Данный учебник написан на основе лекций и практических 
занятий, проводимых в МСЦ РАН для студентов МИЭТ. В него 
вошли наиболее распространенные технологии и методы разработки параллельных приложений, освоение которых является необходимым условием для успешной работы в области создания 
программ для суперкомпьютеров.

Ректор МИЭТ, 
член-корреспондент РАН,
д.т.н., профессор 
Чаплыгин Юрий Александрович

Первый заместитель директора
Межведомственного суперкомпьютерного центра РАН, 
Лауреат государственной премии Российской Федерации, 
к.т.н. 
Шабанов Борис Михайлович

ВВЕДЕНИЕ

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

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

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

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

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

7

Области применения параллельных вычислений

Параллельные вычисления применяются в областях, связанных с проведением больших расчетов:

• системах поддержки проектирования (CAD —  Computer 
Aided Design). В таких системах необходимость осуществлять 
моделирование в реальном масштабе времени предъявляет высокие требования к производительности программного обеспечения. В результате применения параллельных информационных 
технологий удается существенно ускорить процесс проектирования и тем самым заметно снизить временные и трудовые затраты 
на разработку новой модели;

• инженерных приложениях. К этому классу относятся разнообразные задачи из области прочностного моделирования, моделирования аварийных ситуаций и многие другие;

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

• моделировании глобальных процессов в науке о Земле. В 
первую очередь, это —  задачи прогноза изменения климата, 
предсказание природных катаклизмов. Также большой вычислительной сложностью обладают различные геологические проблемы, связанные с анализом строения и процессов в недрах;

• вычислительной химии. Разнообразные задачи этой области 
направлены на изучение свойств вещества в различных состояниях. Широко применяемые методы молекулярной динамики также 
зачастую требуют существенных вычислительных ресурсов, что 
оправдывает применение параллельного программирования. 
К 
данной категории можно также отнести задачи, связанные с оптимальной конфигурацией протеинов, расшифровки ДНК и многие 
другие проблемы смежных с химией областей;

• бизнес-приложениях. К этой категории относятся задачи, 
связанные с анализом финансовых рынков и прогнозированием

8

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

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

Краткий обзор архитектуры параллельных систем

Идея параллельной обработки с целью ускорения процесса 
вычислений появилась достаточно давно, поэтому параллельная 
вычислительная техника развивается уже не один десяток лет. За 
этот период было создано много различных типов архитектур, 
подробное описание которых выходит за рамки нашего пособия. 
Обширная информация по этому вопросу содержится в монографиях [6, 11]. Мы же ограничимся только наиболее общей классификацией.

Общим для различных типов параллельных архитектур является наличие нескольких процессорных устройств. По типу взаимодействия процессорных устройств между собой параллельные 
системы подразделяются на системы с общей и распределенной 
памятью. В системах с общей памятью все процессоры имеют 
доступ к единому пространству памяти. Обмен данными между 
процессорами производится следующим образом: один процессор записывает данные по некоторому адресу, а другой считывает их. К этому классу относятся многопроцессорные рабочие 
станции и сервера, суперкомпьютеры с общей памятью (например HP Superdome), а также получившие широкое распространение в последнее время многоядерные процессоры.

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

9

взаимодействуют с помощью передачи сообщений по сети. К 
этому классу относятся высокопроизводительные вычислительные кластеры, а также локальные сети. Не редки также ЭВМ с 
гибридной архитектурой, в которой узлы с общей памятью соединяются посредством сетевого оборудования.

Различия в архитектуре предопределяют и различия в парадигмах программирования. Для систем с общей памятью основной парадигмой является многопоточное программирование, при 
котором различные потоки управления осуществляют доступ к 
единому пространству памяти. Классическими инструментами 
для таких систем являются библиотека pthreads и пакет ОрепМР.

Наиболее распространенным способом создания параллельных приложений для систем с распределенной памятью является 
организация процессов, взаимодействующих при помощи передачи сообщений. На этой парадигме основаны библиотеки MPI 
(Message Passing Interface), PVM (Parallel Virtual Machine) и многие другие, менее известные средства программирования.

Структура и целевая аудитория пособия

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

Рассматриваются три среды, которые являются основными 
средствами создания параллельного программного обеспечения в 
настоящее время:

• библиотека MPI (гл. 1);
• библиотека POSIX Threads (гл. 2);
• среда программирования ОрепМР (гл. 3).
В пособии есть три приложения, содержащие справочную информацию, полезную при разработке параллельных приложений.

Авторы выражают благодарность руководству Межведомственного суперкомпьютерного центра Российской академии наук, 
директору МСЦ РАН академику РАН Г.И. Савину и первому заместителю директора Б.М. Шабанову за возможность апробации 
курса на базовых кафедрах Московского физико-технического

10

института и Московского института электронной техники и внимание к содержанию лекций и учебника. Авторы благодарны руководителю направления «Распределенные вычисления» в Институте системного анализа РАН, профессору А.П. Афанасьеву за 
плодотворные обсуждения материалов курса по параллельным 
вычислениям, ведущему научному сотруднику вычислительного 
центра РАН профессору И.Х. Сигалу и профессору университета 
г. Дублина А.Л. Ластовецкому.

1. 
ПАРАЛЛЕЛЬНЫЕ ПРОГРАММЫ 
НА ОСНОВЕ ПЕРЕДАЧИ СООБЩЕНИЙ

1.1. Параллельные процессы, взаимодействующие с помощью передачи сообщений

Наиболее распространенной технологией, применяемой для 
программирования многопроцессорных систем с распределенной 
памятью, является использование параллельных процессов, взаимодействующих с помощью передачи сообщений. Такая модель представляется также и наиболее естественной для подобных систем, так 
как передача сообщений по сети —  практически единственный возможный способ взаимодействия процессов, выполняющихся на различных процессорах, не обладающих общей памятью.

Основным средством разработки программ в рассматриваемой парадигме является MPI (Message-Passing Interface) [17, 15]. 
В настоящее время MPI входит в стандартный комплект программного обеспечения практически любого многопроцессорного вычислительного комплекса.

В состав среды программирования MPI входит библиотека с 
интерфейсом для одного или нескольких языков программирования (обычно Fortran, Си и Си++), а также средства для запуска и 
сборки параллельного приложения. Интерфейс библиотеки соответствует стандарту версии 1.1, принятому в 1995 году или более 
позднему варианту версии 2.0, принятому в 1998 году. Оба документа доступны на сайте сообщества разработчиков стандарта [15]. 
Следует отметить, что подавляющее большинство MPI-приложений соответствуют стандарту версии 1.1, так как стандарт 2.0 
доступен далеко не на всех параллельных системах.

1.2. Простейшая MPI-программа

Традиционно освоение новой системы программирования 
начинается с написания программы, печатающей «Hello, World!».

12

Доступ онлайн
от 248 ₽
В корзину