- •В.П. Гергель, р.Г. Стронгин Основы параллельных вычислений для многопроцессорных вычислительных систем
- •1. Принципы построения параллельных вычислительных систем
- •2. Моделирование и анализ параллельных вычислений
- •3. Оценка коммуникационной трудоемкости параллельных алгоритмов
- •4. Параллельные численные алгоритмы для решения типовых задач вычислительной математики
- •5. Модели функционирования параллельных программ
- •6. Учебно-практическая задача: Решение дифференциальных уравнений в частных производных
- •Введение
- •"Многопроцессорные системы и параллельное программирование"
- •1. Цели и задачи курса
- •1. Цель преподавания курса
- •2. Задачи курса
- •3. Дисциплины, изучение которых необходимо при освоении данного курса
- •2. Принципы построения параллельных вычислительных систем
- •4. Принципы разработки параллельных алгоритмов и программ
- •6. Параллельные численные алгоритмы для решения типовых задач вычислительной математики
- •Часть 2. Методы параллельного программирования для вычислительных систем с общей памятью
- •8. Практикум по использованию библиотек параллельных методов для решения сложных научно-технических задач - 4 часа
- •9. Практикум по методам параллельных вычислений для решения задач многомерной многоэкстремальной оптимизации -4 часа
- •Учебно-методические материалы по дисциплине Основная литература
- •Дополнительная литература
- •Учебно-методические пособия
- •Информационные ресурсы сети Интернет
- •1. Принципы построения параллельных вычислительных систем
- •1.1. Пути достижения параллелизма
- •1.2. Классификация вычислительных систем
- •1.3. Характеристика типовых схем коммуникации в многопроцессорных вычислительных системах
- •1.4. Высокопроизводительный вычислительный кластер ннгу
- •4. Параллельные численные методы для решения типовых задач вычислительной математики
- •4.1. Вычисление частных сумм последовательности числовых значений
- •Последовательный алгоритм суммирования
- •Каскадная схема суммирования
- •Модифицированная каскадная схема
- •Вычисление всех частных сумм
- •4.2. Умножение матрицы на вектор
- •Достижение максимально возможного быстродействия ()
- •Использование параллелизма среднего уровня ()
- •Организация параллельных вычислений при
- •Использование ограниченного набора процессоров ()
- •4.3. Матричное умножение
- •Макрооперационный анализ алгоритмов решения задач
- •Организация параллелизма на основе разделения данных
- •4.4. Сортировка
- •Параллельное обобщение базовой операции сортировки
- •Пузырьковая сортировка
- •Сортировка Шелла
- •Быстрая сортировка
- •4.5. Обработка графов
- •Нахождение минимально охватывающего дерева
- •Поиск кратчайших путей
- •6. Учебно-практическая задача: Решение дифференциальных уравнений в частных производных
- •6.1. Последовательные методы решения задачи Дирихле
- •6.2. Организация параллельных вычислений для систем с общей памятью
- •Использование OpenMp для организации параллелизма
- •Проблема синхронизации параллельных вычислений
- •Возможность неоднозначности вычислений в параллельных программах
- •Проблема взаимоблокировки
- •Исключение неоднозначности вычислений
- •Волновые схемы параллельных вычислений
- •Балансировка вычислительной нагрузки процессоров
- •6.3. Организация параллельных вычислений для систем с распределенной памятью
- •Разделение данных
- •Обмен информацией между процессорами
- •Коллективные операции обмена информацией
- •Организация волны вычислений
- •Блочная схема разделения данных
- •Оценка трудоемкости операций передачи данных
6.2. Организация параллельных вычислений для систем с общей памятью
Как следует из приведенного описания, сеточные методы характеризуются значительной вычислительной трудоемкостью
,
где есть количество узлов по каждой из координат области,- число операций, выполняемых методом для одного узла сетки,- количество итераций метода до выполнения условия остановки.
Использование OpenMp для организации параллелизма
Рассмотрим возможные способы организации параллельных вычислений для сеточных методов на многопроцессорных вычислительных системах с общей памятью. При изложении материала будем предполагать, что имеющие в составе системы процессоры обладают равной производительностью, являются равноправными при доступе к общей памяти и время доступа к памяти является одинаковым (при одновременном доступе нескольких процессоров к одному и тому же элементу памяти очередность и синхронизация доступа обеспечивается на аппаратном уровне). Многопроцессорные системы подобного типа обычно именуются симметричными мультипроцессорами (symmetric multiprocessors, SMP).
Обычный подход организации вычислений для подобных систем – создание новых параллельных методов на основе обычных последовательных программ, в которых или автоматически компилятором, или непосредственно программистом выделяются участки не зависимых друг от друга вычислений. Возможности автоматического анализа программ для порождения параллельных вычислений достаточно ограничены, и второй подход является преобладающим. При этом для разработки параллельных программ могут применяться как новые алгоритмические языки, ориентированные на параллельное программирование, так и уже имеющиеся языки программирования, расширенные некоторым набором операторов для параллельных вычислений.
Оба перечисленных подхода приводят к необходимости значительной переработки существующего программного обеспечения, и это в значительной степени затрудняет широкое распространение параллельных вычислений. Как результат, в последнее время активно развивается еще один подход к разработке параллельных программ, когда указания программиста по организации параллельных вычислений добавляются в программу при помощи тех или иных внеязыковых средств языка программирования – например, в виде директив или комментариев, которые обрабатываются специальным препроцессором до начала компиляции программы. При этом исходный операторный текст программы остается неизменным, по которому в случае отсутствия препроцессора компилятор построит исходный последовательный программный код. Препроцессор же, будучи примененным, заменяет директивы параллелизма на некоторый дополнительный программный код (как правило, в виде обращений к процедурам какой-либо параллельной библиотеки).
Рассмотренный выше подход является основой технологии OpenMP [17], наиболее широко применяемой в настоящее время для организации параллельных вычислений на многопроцессорных системах с общей памятью. В рамках данной технологии директивы параллелизма используются для выделения в программе параллельных областей (parallel regions), в которых последовательный исполняемый код может быть разделен на несколько раздельных командных потоков (threads). Далее эти потоки могут исполняться на разных процессорах вычислительной системы. В результате такого подхода программа представляется в виде набора последовательных (однопотоковых) и параллельных (многопотоковых) участков программного кода (см. рис. 6.3). Подобный принцип организации параллелизма получил наименование "вилочного" (fork-join) или пульсирующего параллелизма. Более полная информация по технологии OpenMP может быть получена, например, в [30] или в информационных ресурсах сети Интернет; в пособии возможности OpenMP будут излагаться в объеме, необходимом для демонстрации возможных способов разработки параллельных программ для рассматриваемого учебного примера решения задачи Дирихле.