КнигоПровод.Ru23.11.2024

/ИТ-книги

Современные языки и технологии параллельного программирования: Учебник — Гергель В. П.
Современные языки и технологии параллельного программирования: Учебник
Учебное издание
Гергель В. П.
год издания — 2012, кол-во страниц — 408, ISBN — 978-5-211-06380-8, тираж — 2000, язык — русский, тип обложки — твёрд. 7БЦ матов., масса книги — 630 гр., издательство — МГУ
серия — Суперкомпьютерное образование
КНИГА СНЯТА С ПРОДАЖИ
Формат 70x100 1/16. Бумага офсетная №1. Печать офсетная
ключевые слова — язык, параллельн, распределённ, mpi, openmp, upc, caf, chapel, х10, cuda, opencl, высокопроизводительн, многоядерн, суперкомпьютер

В учебнике представлен широкий спектр языков и технологий, активно используемых при разработке параллельного программного обеспечения. В числе рассмотренных подходов: технологии для разработки параллельных программ для систем с общей и распределённой памятью (MPI, OpenMP), языки параллельного программирования на основе разделённого глобально адресуемого пространства (UPC, CAF, Chapel, Х10) и технологии разработки параллельных программ для графических процессоров (CUDA, OpenCL). Рассмотрение такого значительного набора языков и технологий в рамках одного учебника позволяет получить полное представление о разнообразии существующих подходов в области параллельного программирования.

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

Рекомендовано Советом учебно-методического объединения классических университетов России по прикладной математике и информатике.

ОГЛАВЛЕНИЕ

Введение16
 
Глава 1. Общая характеристика параллельных вычислительных систем20
 
1.1. Классификация вычислительных систем21
1.1.1. Мультипроцессоры22
1.1.2. Мультикомпьютеры24
1.2. Показатели эффективности параллельного алгоритма26
1.3. Краткий обзор главы28
1.4. Обзор литературы29
1.5. Контрольные вопросы29
1.6. Задачи и упражнения30
 
Глава 2. Основы параллельного программирования31
 
2.1. Основные понятия31
2.1.1. Концепция процесса31
2.1.2. Определение потока33
2.1.3. Понятие ресурса34
2.1.4. Организация параллельных программ как системы потоков34
2.2. Взаимодействие и взаимоисключение потоков38
2.2.1. Разработка алгоритма взаимоисключения39
2.2.2. Семафоры45
2.2.3. Мониторы46
2.3. Синхронизация потоков49
2.3.1. Условные переменные50
2.3.2. Барьерная синхронизация51
2.4. Взаимоблокировка потоков51
2.4.1. Условные переменные53
2.4.2. Описание возможных изменений состояния программы55
2.4.3. Обнаружение и исключение тупиков56
2.5. Классические задачи синхронизации56
2.5.1. Задача «Производители — Потребители»57
2.5.2. Задача «Читатели — Писатели»59
2.5.3. Задача «Обедающие философы»61
2.5.4. Задача «Спящий парикмахер»64
2.6. Методы повышения эффективности параллельных программ66
2.6.1. Оптимизация количества потоков67
2.6.2. Минимизация взаимодействия потоков68
2.6.3. Оптимизация работы с памятью69
2.6.4. Использование потоко-ориентированных библиотек70
2.7. Краткий обзор главы71
2.8. Обзор литературы72
2.9. Контрольные вопросы73
2.10. Задачи и упражнения74
 
Часть I. Базовые технологии параллельного
программирования
 
Глава 3. Параллельное программирование с использованием OpenMP76
 
3.1. Основы технологии OpenMP80
3.1.1. Понятие параллельной программы80
3.1.2. Организация взаимодействия параллельных потоков81
3.1.3. Структура OpenMP82
3.1.4. Формат директив OpenMP83
3.2. Выделение параллельно выполняемых фрагментов программного кода83
3.2.1. Директива parallel для определения параллельных фрагментов83
3.2.2. Пример первой параллельной программы84
3.2.3. Основные понятия параллельной программы: фрагмент,
    область, секция85
3.2.4. Параметры директивы parallel86
3.2.5. Определение времени выполнения параллельной программы86
3.3. Распределение вычислительной нагрузки между потоками
(распараллеливание по данным для циклов)87
3.3.1. Управление распределением итераций цикла между потоками91
3.3.2. Управление порядком выполнения вычислений92
3.3.3. Синхронизация вычислений по окончании выполнения цикла93
3.3.4. Введение условий при определении параллельных фрагментов
    (параметр if директивы parallel)94
3.4. Управление данными для параллельно выполняемых потоков95
3.4.1. Определение общих и локальных переменных95
3.4.2. Совместная обработка локальных переменных (операция
    редукции)96
3.5. Организация взаимоисключения при использовании общих переменных98
3.5.1. Обеспечение атомарности (неделимости) операций98
3.5.2. Использование критических секций100
3.5.3. Применение переменных семафорного типа (замков)101
3.6. Распределение вычислительной нагрузки между потоками
(распараллеливание по задачам при помощи директивы sections)103
3.7. Расширенные возможности OpenMP106
3.7.1. Определение однопотоковых участков для параллельных
    фрагментов (директивы single и master)106
3.7.2. Выполнение барьерной синхронизации (директива barrier)107
3.7.3. Синхронизация состояния памяти (директива flush)107
3.7.4. Определение постоянных локальных переменных потоков
    (директива threadprivate и параметр copyin директивы parallel)108
3.7.5. Управление количеством потоков110
3.7.6. Задание динамического режима при создании потоков111
3.7.7. Управление вложенностью параллельных фрагментов111
3.8. Дополнительные сведения112
3.8.1. Разработка параллельных программ с использованием OpenMP
    на языке Fortran112
3.8.2. Сохранение возможности последовательного выполнения программы114
3.8.3. Краткий перечень компиляторов с поддержкой OpenMP115
3.9. Краткий обзор главы116
3.10. Обзор литературы118
3.11. Контрольные вопросы118
3.12. Задачи и упражнения120
 
Глава 4. Параллельное программирование на основе MPI126
 
4.1. MPI: основные понятия и определения128
4.1.1. Понятие параллельной программы128
4.1.2. Операции передачи данных129
4.1.3. Понятие коммуникаторов129
4.1.4. Типы данных130
4.1.5. Виртуальные топологии130
4.2. Введение в разработку параллельных программ с использованием MPI131
4.2.1. Основы MPI131
4.2.2. Первая параллельная программа с использованием MPI136
4.2.3. Определение времени выполнение MPI-программы139
4.2.4. Начальное знакомство с коллективными операциями передачи
    данных140
4.3. Операции передачи данных между двумя процессами147
4.3.1. Режимы передачи данных147
4.3.2. Организация неблокирующих обменов данными между
    процессорами149
4.3.3. Одновременное выполнение передачи и приёма151
4.4. Коллективные операции передачи данных152
4.4.1. Обобщённая передача данных от одного процесса всем процессам152
4.4.2. Обобщённая передача данных от всех процессов одному процессу154
4.4.3. Общая передача данных от всех процессов всем процессам155
4.4.4. Дополнительные операции редукции данных156
4.4.5. Сводный перечень коллективных операций данных157
4.5. Производные типы данных в MPI158
4.5.1. Понятие производного типа данных159
4.5.2. Способы конструирования производных типов данных161
4.5.3. Объявление производных типов и их удаление165
4.5.4. Формирование сообщений при помощи упаковки и распаковки
    данных165
4.6. Управление группами процессов и коммуникаторами168
4.6.1. Управление группами169
4.6.2. Управление коммуникаторами170
4.7. Виртуальные топологии172
4.7.1. Декартовы топологии (решётки)173
4.7.2. Топологии графа176
4.8. Дополнительные сведения о MPI178
4.8.1. Разработка параллельных программ с использованием MPI
    на алгоритмическом языке Fortran178
4.8.2. Общая характеристика среды выполнения MPI-программ179
4.8.3. Дополнительные возможности стандарта MPI-2180
4.9. Краткий обзор главы181
4.10. Обзор литературы183
4.11. Контрольные вопросы183
4.12. Задачи и упражнения184
 
Часть II. Технологии на основе параллельного расширения
существующих языков программирования
 
Глава 5. UPC: расширение языка C для параллельного
программирования
187
 
5.1. Понятие параллельной программы189
5.2. Управление общими данными190
5.3. Управление вычислениями194
5.4. Синхронизация параллельно выполняемых потоков196
5.4.1. Модели синхронизации доступа к общей памяти197
5.4.2. Барьерная синхронизация198
5.4.3. Синхронизация при помощи семафоров199
5.5. Коллективные операции для управления данными200
5.5.1. Операции копирования и инициализации201
5.5.2. Коллективные операции передачи данных202
5.5.3. Коллективные операции обработки данных203
5.6. Использование указателей в UPC204
5.7. Пример параллельной программы на UPC207
5.8. Оценка эффективности параллельных программ на UPC210
5.9. Краткий обзор главы214
5.10. Обзор литературы216
5.11. Контрольные вопросы216
5.12. Задачи и упражнения217
 
Глава 6. CAF: расширение языка Fortran для параллельного
программирования219
 
6.1. Модель параллельного программирования219
6.1.1. Управление вычислениями219
6.1.2. Первая программа на языке Co-Array Fortran220
6.2. Управление общими данными222
6.2.1. Одномерные распределённые массивы225
6.2.2. Многомерные распределённые массивы226
6.2.3. Определение положения исполнителя программы228
6.2.4. Динамические распределённые массивы230
6.3. Синхронизация выполнения исполнителей программы230
6.4. Ввод/вывод232
6.5. Стандарт CAF 2.0232
6.6. Примеры программ на языке Co-Array Fortran235
6.6.1. Вычисление значения числа π методом Монте-Карло235
6.6.2. Умножение матриц238
6.9. Анализ эффективности CAF программ на примере набора тестов NPB243
6.10. Краткий обзор главы244
6.11. Обзор литературы246
6.12. Контрольные вопросы246
6.13. Задачи и упражнения246
'
Часть III. Новые языки параллельного программирования
 
Глава 7. Новый язык параллельного программирования Chapel248
 
7.1. Основы языка250
7.1.1. Загрузка и установка Chapel250
7.1.2. Первая программа на языке Chapel250
7.1.3. Основные элементы языка251
7.1.4. Типы данных и потоки управления256
7.1.5. Структура программы на языке Chapel259
7.2. Параллелизм по данным266
7.2.1. Регулярные домены и массивы267
7.2.2. Операции редукции и сканирования271
7.2.3. Переменные синхронизации272
7.2.4. Управление параметрами параллельного запуска273
7.2.5. Примеры параллельных программ на языке Chapel274
7.2.6. Нерегулярные домены283
7.3. Параллелизм задач285
7.3.1. Создание одиночных задач: оператор begin285
7.3.2. Одновременное создание нескольких задач: операторы cobegin и coforall286
7.3.3. Синхронизация задач287
7.3.4. Пример программы, использующей параллелизм задач289
7.4. Управление распределённостью вычислений292
7.4.1. Понятие исполнителя (locale)292
7.4.2. Распределение доменов между исполнителями294
7.4.3. Управления исполнителями297
7.5. Анализ эффективности Chapel-программ на примере набора
тестов HPCC299
7.5.1. Тест STREAM Triad300
7.5.2. Тест Random Access303
7.6. Краткий обзор главы306
7.7. Обзор литературы307
7.8. Контрольные вопросы307
7.9. Задачи и упражнения309
 
Глава 8. Новый язык параллельного программирования X10310
 
8.1. Основы подхода311
8.1.1. Понятие исполнителя (place)311
8.1.2. Определение активности (activity)312
8.1.3. Первая программа на языке X10312
8.1.4. Загрузка и установка X10313
8.2. Управление данными313
8.2.1. Переменные313
8.2.2. Индексы (points)314
8.2.3. Регионы (regions)315
8.2.4. Массивы316
8.3. Управление параллельными вычислениями316
8.3.1. Создание активностей (async)317
8.3.2. Ожидание завершения активностей (finish)317
8.3.3. Обеспечение неделимости (атомарности) действий (atomic)318
8.3.4. Организация таймерной синхронизации (clock)318
8.3.5. Создание функциональных активностей (future)320
8.3.6. Выполнение неделимых (атомарных) действий с предусловием
    (when)321
8.4. Управление распределёнными массивами321
8.4.1. Создание распределений322
8.4.2. Определение распределённых массивов322
8.4.3. Доступ к элементам распределённых массивов322
8.4.4. Организация распределённых вычислений323
8.5. Примеры параллельных программ на языке X10324
8.6. Анализ эффективности X10-программ на примере набора тестов HPCC328
8.7. Краткий обзор главы329
8.8. Обзор литературы333
8.9. Контрольные вопросы333
8.10. Задачи и упражнения334
 
Часть IV. Технологии параллельного программирования
для графических процессоров
 
Глава 9. CUDA: технология параллельного программирования для
графических процессоров
336
 
9.1. Возможные преимущества вычислений на графическом процессоре337
9.2. Средства разработки для графического процессора339
9.2.1. Интерфейсы программирования графики и шейдерные языки339
9.2.2. Специализированные средства от производителей341
9.2.3. Сторонние специализированные средства342
9.2.4. OpenCL — открытый стандарт параллельных вычислений
    на гетерогенных системах344
9.3. Использование технологии CUDA для вычислений345
9.3.1. Установка и настройка программного обеспечения346
9.3.2. Модель программирования CUDA349
9.3.3. Интерфейс программирования CUDA353
9.3.4. Общие принципы вычислений на базе CUDA360
9.4. Исследование производительности в задаче N тел363
9.5. Краткий обзор главы364
9.6. Обзор литературы366
9.7. Контрольные вопросы367
9.8. Задачи и упражнения368
 
Глава 10. OpenCL — открытый стандарт параллельного программирования
для гетерогенных систем
369
 
10.1. Архитектура OpenCL369
10.1.1. Модель платформы369
10.1.2. Модель исполнения370
10.1.3. Модель памяти373
10.1.4. Модель программирования375
10.2. Общие принципы вычислений на базе OpenCL375
10.3. Перенос приложения CUDA на OpenCL386
10.4. Исследование производительности в задаче N тел386
10.5. Одновременное использование центральных и графических
процессоров для вычислений388
10.6. Заключение390
10.7. Краткий обзор главы391
10.8. Обзор литературы392
10.9. Контрольные вопросы392
10.10. Задачи и упражнения393
 
Список литературы394

Книги на ту же тему

  1. Технологии параллельного программирования MPI и OpenMP: Учебное пособие, Антонов А. С., 2012
  2. Введение в параллельные методы решения задач: Учебное пособие, Якобовский М. В., 2013
  3. Многоядерное программирование, Эхтер Ш., Робертс Д., 2010
  4. Численные методы, алгоритмы и программы. Введение в распараллеливание: Учебное пособие для вузов, Карпов В. Е., Лобанов А. И., 2014
  5. Параллельное программирование в среде MATLAB для многоядерных и многоузловых вычислительных машин: Учебное пособие, Кепнер Д., 2013
  6. Параллельная обработка информации: Т. 5: Проблемно-ориентированные и специализированные средства обработки информации, Малиновский Б. Н., Грицык В. В., ред., 1990
  7. Параллельные вычислительные системы, Головкин Б. А., 1980
  8. Социальное моделирование — новый компьютерный прорыв (агент-ориентированные модели), Макаров В. Л., Бахтизин А. Р., 2013
  9. Введение в алгоритмы параллельных вычислений, Молчанов И. Н., 1990
  10. Конструирование распределённых объектов. Методы и средства программирования интероперабельных объектов в архитектурах OMG/CORBA, Microsoft/COM и Java/RMI, Эммерих В., 2002
  11. Проблемы вычислений в распределённой среде. Модели обработки и представления данных. Динамические системы: Труды ИСА РАН. Т. 14, Емельянов С. В., ред., 2005
  12. Распределённые системы. Принципы и парадигмы, Таненбаум Э., ван Стеен М., 2003
  13. Операционные системы. Параллельные и распределённые системы, Бэкон Д., Харрис Т., 2004
  14. UNIX. Профессиональное программирование. — 2-е изд., Стивенс Р., Раго С., 2007
  15. UNIX: взаимодействие процессов, Стивенс Р., 2002
  16. UNIX: Разработка сетевых приложений, Стивенс Р., 2003
  17. Программирование и алгоритмические языки, Криницкий Н. А., Миронов Г. А., Фролов Г. Д., 1975
  18. Сравнительное изучение языков программирования, Хигман Б., 1974
  19. Универсальные языки программирования. Семантический подход, Калинин А. Г., Мацкевич И. В., 1991
  20. Языки программирования. Концепции и принципы, Кауфман B. Ш., 1993
  21. Суперкомпьютерное моделирование в физике климатической системы: Учебное пособие, Лыкосов В. Н., Глазунов А. В., Кулямин Д. В., Мортиков Е. В., Степаненко В. М., 2012
  22. Параллельные алгоритмы целочисленной оптимизации, Хохлюк В. И., 1987

© 1913—2013 КнигоПровод.Ruhttp://knigoprovod.com