Параллельное программирование на OpenMP [Автор неизвестен] (pdf) читать онлайн

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

Параллельное программирование на OpenMP

Оглавление
Введение.............................................................................................................................................. 3
Параллельное программирование................................................................................................ 3
Написание параллельных программ............................................................................................ 3
Параллельные архитектуры.......................................................................................................... 3
OpenMP................................................................................................................................................4
Введение в OpenMP....................................................................................................................... 4
Программная модель OpenMP......................................................................................................4
Как взаимодействуют потоки?..................................................................................................... 5
Основы OpenMP................................................................................................................................. 6
Синтаксис....................................................................................................................................... 6
Параллельные регионы................................................................................................................. 6
Модель исполнения....................................................................................................................... 7
Конструкции OpenMP........................................................................................................................ 7
Условия выполнения..................................................................................................................... 8
Условия private, shared, default.................................................................................................8
Условие firstprivate....................................................................................................................9
Конструкции OpenMP для распределения работ........................................................................9
Параллельный цикл for/DO.................................................................................................... 10
Параллельные секции............................................................................................................. 10
Конструкция single..................................................................................................................11
Условия выполнения (2)..............................................................................................................12
Условие if.................................................................................................................................12
Условие lastprivatе...................................................................................................................12
Условие reduction.................................................................................................................... 13
Условие schedule..................................................................................................................... 13
Условие ordered....................................................................................................................... 14
Переменные окружения OpenMP............................................................................................... 14
Библиотечные функции OpenMP ...................................................................................................14
Зависимость по данным................................................................................................................... 15
Средства синхронизации в OpenMP............................................................................................... 17
Критическая секция..................................................................................................................... 17
Атомарна секция.......................................................................................................................... 18
Барьеры......................................................................................................................................... 18
Фиксация порядка выполнения.................................................................................................. 18
Конcтрукция flush........................................................................................................................ 19
Расширенные возможности OpenMP..............................................................................................19
Отладка OpenMP кода......................................................................................................................20
Настройка производительности OpenMP кода..............................................................................20
Основной подход......................................................................................................................... 21
Автоматическое расспаралеливание..........................................................................................21
Профилирование программы......................................................................................................22
Иерархия памяти..........................................................................................................................22
Задачи................................................................................................................................................ 22
Задача 1......................................................................................................................................... 22
Задача 2......................................................................................................................................... 23
Задача 3......................................................................................................................................... 23
Задача 4......................................................................................................................................... 23
Задача 5......................................................................................................................................... 23
Задача 6......................................................................................................................................... 23

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

Написание параллельных программ
Разработка параллельных программ (ПП) состоит из трех основных этапов:
Декомпозиция задачи на подзадачи. Идеально, чтобы эти подзадачи работали независимо
друг от друга (принцип локальности данных). Обмен данными между подзадачами является
дорогой операцией, особенно, если это обмен по сети.
Распределение задачи по процессорам (виртуальным процессорам). В некоторых случаях
решение этого вопроса можно оставить на усмотрение среды выполнения ПП.
Написание программы с использованием какой-либо параллельной библиотеки. Выбор
библиотеки может зависеть от платформы, на которой программа будет выполняться, от
требуемого уровня производительности и от природы самой задачи.

Параллельные архитектуры
В массе своей все вычислительные комплексы и компьютеры делятся на три группы:
Системы с распределенной памятью. Каждый процессор имеет свою память и не может
напрямую доступаться к памяти другого процессора.
Разрабатывая программы подобные системы программист в явном виде должен задать всю
систему коммуникаци (Передача сообщений – Message Passing). Библиотеки: MPI, PVM,
Shmem (Cray only).
Системы с общей (разделяемой) памятью. Процессор может напрямую обращаться в
память другого процессора. Процессоры могут сидеть на одной шине (SMP). Разделяемая
память может быть физически распределенной, но тогда стоимость доступа к удаленной
памяти может быть очень высока и это должен учитывать разработчик ПП.
Подходы к разработке ПО: Threads, директивы компилятора (OpenMP), механизм передачи
сообщения.

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

OpenMP
Введение в OpenMP
OpenMP – механизм написания параллельных программ для систем с общей памятью.
Состоит из набора директив компилятора и библиотечных функций.
Позволяет достаточно легко создавать многопоточные приложения на С/С++, Fortran.
Поддерживается производителями аппаратуры (Intel, HP, SGI, Sun, IBM), разработчиками
компиляторов (Intel, Microsoft, KAI, PGI, PSR, APR, Absoft)

Программная модель OpenMP
Основной поток порождает дочерние потоки по мере необходимости.
Модель fork-join.
Программирование путем вставки директив компилятора в ключевые места исходного кода
программы.
Компилятор интерпретирует эти директивы и вставляет в соответствующие места
программы библиотечные вызовы для расспараллеливания участков кода.
Последовательный код

Параллельный код

void main(){
double x[1000];
for(i=0; i