МИНОБРНАУКИ РОССИИ Федеральное государственное автономное образовательное учреждение высшего профессионального образования «ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ» Факультет математики, механики и компьютерных наук УТВЕРЖДАЮ Декан факультета математики, механики и компьютерных наук ________________________М.И.Карякин «03» июля 2012 г. РАБОЧАЯ ПРОГРАММА ДИСЦИПЛИНЫ «Основы параллельного программирования» Направление подготовки прикладная математика и информатика 010400 Профиль подготовки «Высокопроизводительные вычисления и технологии параллельного программирования» Квалификация (степень) выпускника Магистр Кафедра алгебры и дискретной математики Курс 2 семестр 1 Форма обучения очная Программа разработана Абрамян М.Э., доцент кафедры алгебры и дискретной математики, к. ф.-м. н., доц. Рецензент(ы) Ростов-на-Дону - 2012 1 Рассмотрена и рекомендована к Рассмотрена и рекомендована к утверждению на заседании учебно- утверждению на заседании кафедры методического совета факультета алгебры и дискретной математики математики, механики и компьютер- протокол заседания ных наук, направление подготовки от _________________ №_________ «Прикладная математика и информатика» протокол заседания от _________________ № ________ СОГЛАСОВАНО Протокол заседания кафедры/учебнометодического совета факультета _________________________________ (название выпускающей кафедры/ факультета, реализующего ООП ВПО) от ______________ № _____________ I. ЦЕЛИ И ЗАДАЧИ ОСВОЕНИЯ ДИСЦИПЛИНЫ Настоящий курс продолжает серию курсов, предназначенных для выработки у студентов знаний, умений и навыков, связанных с разработкой современного программного обеспечения. Цели освоения дисциплины (модуля): изучение основ параллельного программирования. Задачи: изучение основных средств параллельного программирования: библиотеки MPI и программного интерфейса OpenMP; знакомство с основными методиками распараллеливания вычислительных задач; приобретение навыков создания, запуска и отладки параллельных программ с использованием специализированных инструментов; приобретение пользовательских и программистских навыков работы с вычислительным кластером. II. МЕСТО ДИСЦИПЛИНЫ В СТРУКТУРЕ ООП ВПО 2.1. Учебная дисциплина «Основы параллельного программирования» (6 курс, 12 семестр) относится к вариативной части профессионального цикла. 2.2. Для успешного изучения курса от студентов требуются знания и навыки, получаемые из ранее прослушанных курсов «Основы программирования», «Архитектура вычислительных систем», «Операционные системы». 2.3. В дальнейшем материал данного курса может использоваться при разработке алгоритмов и программ в рамках подготовки магистерской диссертации. III. ТРЕБОВАНИЯ К РЕЗУЛЬТАТАМ ОСВОЕНИЯ СОДЕРЖАНИЯ ДИСЦИПЛИНЫ 3.1. Процесс изучения дисциплины направлен на формирование элементов следующих компетенций в соответствии с ФГОС ВПО (ОС ЮФУ) и ООП ВПО по данному направлению подготовки (специальности): а). общекультурных (ОК): способность использовать углубленные теоретические и практические знания в области прикладной математики и информатики (ОК-3), б). профессиональных (ПК): способность проводить научные исследования и получать новые научные и прикладные результаты (ПК-1), способность углубленного анализа проблем, постановки и обоснования задач научной и проектно-технологической деятельности (ПК-3). В результате освоения дисциплины обучающийся должен получить следующие знания и умения: Знания Знание основных парадигм взаимодействия вычислительных процессов, понимание принципов функционирования параллельных программ; знание основных принципов технологии разработки параллельных программ, основанных на передаче сообщений; знание основных возможностей библиотеки MPI, связанных с пересылкой сообщений и коллективным взаимодействием процессов параллельного приложения; знание дополнительных возможностей библиотеки MPI, связанных с с определением новых пользовательских типов данных и их упаковкой, работой с группами процессов и коммуникаторами, использованием виртуальных топологий; знание принципов технологии разработки параллельных программ, основанных на использовании общей памяти; знание программного интерфейса OpenMP; знание основных параллельных алгоритмов, используемых в численном моделирования связанных с численным интегрированием (сеточные алгоритмы), обработкой матриц и систем линейных уравнений (матричные алгоритмы), моделированием взаимодействия наборов частиц (точечные алгоритмы). Умения Умение использовать современные программные реализации библиотеки MPI (в частности, программный комплекс MPICH) для разработки параллельных программ; умение применять различные средства библиотеки MPI для решения типовых задач, связанных с параллельным программированием; умение применять различные средства интерфейса OpenMP для решения типовых задач, связанных с параллельным программированием; умение работать с вычислительным кластером. Владение Владение стандартными средствами разработки и запуска параллельных программ. IV. СОДЕРЖАНИЕ И СТРУКТУРА ДИСЦИПЛИНЫ 4.1. Содержание модулей дисциплины № Наименование модул модуля Содержание модуля Формы текущего я контроля 1 2 1. Введение в параллельные вычисления. 3 4 Обзор средств Тест № 1. программирования Выполнение многопроцессорных систем. заданий группы Разработка Основные понятия, распределенных связанные с технологией MPIBegin из набора программ с MPI. Система MPICH и индивидуальных применением задачник Programming заданий. технологии MPI Taskbook for MPI. Обмен сообщениями между отдельными процессами. Коллективная пересылка данных и коллективные операции редукции. Определение пользовательских типов и упаковка данных при их пересылке. Работа с группами процессов и коммуникаторами. Виртуальные топологии. 2. Программный интерфейс Тест № 2 OpenMP. Модель OpenMP- Выполнение приложений с программы, общие и заданий группы применением локальные переменные в OMPBegin из OpenMP-программе. набора Распараллеливание циклов, индивидуальных параллельные секции, заданий. Разработка многопоточных технологии OpenMP низкоуровневое распараллеливание. Средства синхронизации: барьеры, критические секции, замки. Дополнительные функции и переменные среды. 3. Параллельные Обзор архитектур Тест № 3. архитектуры. многопроцессорных Выполнение Закон Амдала. вычислительных систем заданий групп Параллельные (векторно-конвейерные OMPAlg и суперкомпьютеры, MPIMatrix из симметричные набора мультипроцессорные индивидуальных системы, системы с заданий. алгоритмы в численных методах массовым параллелизмом). Эффективность параллельных программ, закон Амдала. Алгоритмы, параллельные по данным: случай общей памяти (параллельные префиксные вычисления, портфель задач). Параллельные методы решения краевых задач математической физики, основанные на технологии OpenMP и MPI (методы Гаусса-Зейделя, ГауссаЯкоби, волновая схема, ленточный алгоритм). Параллельные матричные алгоритмы, основанные на технологии MPI (ленточные алгоритмы, блочные алгоритмы – алгоритм Фокса, алгоритм Кэннона). Параллельные методы решения гравитационной задачи n тел: алгоритмы, использующие общую память (в том числе с балансировкой нагрузки); алгоритмы, использующие передачу сообщений (модель «управляющий–рабочие», модель пульсации, модель конвейера). 4. Разработка и Свойства Unix-подобных Тест № 4. выполнение систем. Организация Выполнение файловой системы; файлы и заданий группы программ на процессы. Особенности MPIGravit из вычислитель- выполнения команд в набора ных кластерах системе Unix. Команды для индивидуальных работы с каталогами, заданий. файлами и процессами. Итоговый зачет. параллельных Система управления заданиями на вычислительных кластерах (Portable Batch System). Удаленная работа с Unixсервером. Компиляция и запуск программ на Unixсервере. 4.2. Структура дисциплины. Общая трудоемкость дисциплины составляет 3 зач.ед. (108 часов). Вид работы Трудоемкость (часов) Общая трудоемкость 108 Аудиторная работа: 54 Лекции (Л) 18 Лабораторные работы (ЛР) 36 Самостоятельная работа: Самоподготовка (проработка и повторение 54 лекционного материала и материала учебников и учебных пособий, подготовка к лабораторным занятиям и рубежному контролю) Вид итогового контроля (зачет, экзамен) зачет Модули дисциплины, изучаемые в ___10_____ семестре Количество часов № модуля Наименование модулей Аудиторная Всего работа Л ПЗ ВнеЛР ауд. работа СР Введение в параллельные 1 44 4 18 22 16 4 4 8 28 6 8 14 20 4 6 10 108 18 36 54 архитектуры и вычисления. Разработка распределенных программ с применением технологии MPI Разработка многопоточных 2 приложений с применением технологии OpenMP 3 Параллельные алгоритмы в численных методах Разработка и выполнение 4 параллельных программ на вычислительных кластерах Итого: 4.3. Лабораторные работы № № ЛР модуля 1 1 Наименование лабораторных работ Кол-во часов Среда Microsoft Visual Studio 2008/2010, ее 2 настройка и использование. Знакомство с электронным задачником Programming Taskbook for MPI. Выполнение индивидуальных заданий по теме «Процессы и их ранги» (группа MPIBegin). 2 1 Выполнение индивидуальных заданий по теме «Обмен сообщениями между процессами» (группа MPIBegin). 2 3 1 Выполнение индивидуальных заданий по теме 2 «Коллективная пересылка данных» (группа MPIBegin). 4 1 Выполнение индивидуальных заданий по теме 2 «Коллективные операции редукции» (группа MPIBegin). 5 1 Выполнение индивидуальных заданий по теме 2 «Производные типы и упаковка данных» (группа MPIBegin). 6 1 Выполнение индивидуальных заданий по теме 4 «Группы процессов и коммуникаторы» (группа MPIBegin). 7 1 Выполнение индивидуальных заданий по теме 4 «Виртуальные топологии» (группа MPIBegin). 8 2 Выполнение индивидуальных заданий по теме 4 «Технология OpenMP: обработка вложенных циклов» (группа OMPBegin). 9 3 Выполнение индивидуальных заданий по теме 4 «Алгоритмы, параллельные по данным: случай общей памяти» (группа OMPAlg). 10 3 Выполнение индивидуальных заданий по теме 4 «Матричные алгоритмы» (группа MPIMatrix). 11 4 Выполнение индивидуальных заданий по теме 6 «Разработка и выполнение параллельных программ на вычислительных кластерах» (группа MPIGravit). Итого 36 V. ОБРАЗОВАТЕЛЬНЫЕ ТЕХНОЛОГИИ Учебный курс состоит из 4 учебных модулей. Практические работы оформляются в виде набора индивидуальных заданий. Задания для модуля 1 выполняются в соответствиями с указаниями пособия [1] и берутся из данного пособия. Задания для модулей 2–4 выполняются в соответствии с указаниями, приведенными в электронном http://edu.mmcs.sfedu.ru/course/view.php?id=74 виде (см. на список сайте авторских методических разработок). При проведении лекций и практических занятий используются следующие образовательные технологии: мультимедийные лекции; электронные формы контроля; самотестирование студентов. VI. ОЦЕНОЧНЫЕ СРЕДСТВА ДЛЯ ТЕКУЩЕГО КОНТРОЛЯ УСПЕВАЕМОСТИ И ПРОМЕЖУТОЧНОЙ АТТЕСТАЦИИ Ниже приводятся образцы используемых заданий к модулям 1–4 и примерные варианты индивидуальных заданий для модуля 1. Образцы учебных заданий для модуля 1 MPIBegin5. В каждом процессе дано целое число N (> 0) и набор из N чисел. В процессах четного ранга (включая главный) вывести сумму чисел из данного набора, в процессах нечетного ранга вывести среднее арифметическое чисел из данного набора. MPIBegin15. В каждом подчиненном процессе дано целое число N, причем для одного процесса это число больше нуля, а для остальных равно нулю. В процессе с ненулевым N дан также набор из N чисел. Переслать данный набор чисел в главный процесс и вывести в главном процессе полученные числа и ранг процесса, переславшего этот набор. При приеме сообщения использовать параметр MPI_ANY_SOURCE. MPIBegin33. В каждом процессе дан набор из 5 целых чисел. Используя функцию MPI_Gather, переслать эти наборы в главный процесс и вывести их в порядке возрастания рангов переславших их процессов (первым вывести набор чисел, данный в главном процессе). MPIBegin44. В каждом процессе дан набор из 3K целых чисел, где K — количество процессов. Используя функцию MPI_Alltoall, переслать в каждый процесс три очередных числа из каждого набора (в процесс 0 — первые три числа, в процесс 1 — следующие три числа, и т. д.). В каждом процессе вывести числа в порядке возрастания рангов переславших их процессов (включая числа, полученные из этого же процесса). MPIBegin50. В каждом процессе дан набор из K + 5 целых чисел, где K — количество процессов. Используя функцию MPI_Reduce для операции MPI_MAXLOC, найти максимальное значение среди элементов данных наборов с одним и тем же порядковым номером и ранг процесса, содержащего это максимальное значение. Вывести в главном процессе вначале все максимумы, а затем — ранги содержащих их процессов. MPIBegin58. В главном процессе дана K − 1 тройка целых чисел, где K — количество процессов. Используя производный тип, содержащий три целых числа, и одну коллективную операцию пересылки данных, переслать все данные из главного процесса в подчиненные и вывести их в подчиненных процессах в том же порядке. MPIBegin82. В каждом процессе дано целое число N, которое может принимать два значения: 1 и 2 (имеется хотя бы один процесс с каждым из возможных значений). Кроме того, в каждом процессе дано вещественное число A. Используя функцию MPI_Comm_split и одну коллективную операцию редукции, найти минимальное значение среди чисел A, которые даны в процессах с N = 1, и максимальное значение среди чисел A, которые даны в процессах с N = 2. Найденный минимум вывести в процессах с N = 1, а найденный максимум — в процессах с N = 2. MPIBegin86. Число процессов К является четным: K = 2N, N > 1. В процессах 0 и 1 дано по одному вещественному числу A. Определить для всех процессов декартову топологию в виде матрицы размера N × 2, после чего, используя функцию MPI_Cart_sub, расщепить матрицу процессов на два одномерных столбца (при этом процессы 0 и 1 будут главными процессами в полученных столбцах). Используя одну коллективную операцию пересылки данных, переслать число A из главного процесса каждого столбца во все процессы этого же столбца и вывести полученное число в каждом процессе (включая процессы 0 и 1). MPIBegin97. Количество процессов K равно 8 или 12, в каждом процессе дано вещественное число. Определить для всех процессов декартову топологию в виде трехмерной решетки размера 2 × 2 × K/4 (порядок нумерации процессов оставить прежним). Интерпретируя полученную решетку как K/4 матриц размера 2 × 2 (в одну матрицу входят процессы с одинаковой третьей координатой, матрицы упорядочены по возрастанию третьей координаты), осуществить циклический сдвиг исходных данных из процессов каждой матрицы в соответствующие процессы следующей матрицы (из процессов последней матрицы данные перемещаются в первую матрицу). Для определения рангов посылающих и принимающих процессов использовать функцию MPI_Cart_shift, пересылку выполнять с помощью функции MPI_Sendrecv_replace. Во всех процессах вывести полученные данные. Варианты наборов индивидуальных заданий к модулю 1 ВАРИАНТ 1 MPIBegin(1) Процессы и их ранги: 3, 5 MPIBegin(2) Обмен сообщениями между процессами: 7, 12, 15, 19, 22, 24, 26, 29 MPIBegin(3) Коллективная пересылка данных: 31, 33, 38, 42, 44, 45 MPIBegin(4) Коллективные операции редукции: 48, 50, 54, 56 MPIBegin(5) Производные типы и упаковка данных: 58, 62, 65, 68, 70 MPIBegin(6) Группы процессов и коммуникаторы: 72, 74, 77, 78, 82 MPIBegin(7) Виртуальные топологии: 83, 86, 90, 93, 95, 98 MPINumer Параллельные численные методы: 2, 5, 10, 11 ВАРИАНТ 2 MPIBegin(1) Процессы и их ранги: 3, 5 MPIBegin(2) Обмен сообщениями между процессами: 9, 13, 15, 20, 21, 25, 26, 28 MPIBegin(3) Коллективная пересылка данных: 32, 33, 39, 41, 44, 46 MPIBegin(4) Коллективные операции редукции: 49, 51, 54, 57 MPIBegin(5) Производные типы и упаковка данных: 58, 63, 65, 66, 70 MPIBegin(6) Группы процессов и коммуникаторы: 72, 74, 77, 79, 81 MPIBegin(7) Виртуальные топологии: 83, 86, 89, 94, 97, 100 MPINumer Параллельные численные методы: 2, 4, 8, 13 ВАРИАНТ 3 MPIBegin(1) Процессы и их ранги: 4, 6 MPIBegin(2) Обмен сообщениями между процессами: 9, 11, 15, 18, 23, 24, 27, 29 MPIBegin(3) Коллективная пересылка данных: 32, 33, 37, 40, 44, 47 MPIBegin(4) Коллективные операции редукции: 48, 50, 55, 57 MPIBegin(5) Производные типы и упаковка данных: 59, 63, 65, 67, 69 MPIBegin(6) Группы процессов и коммуникаторы: 72, 75, 76, 78, 81 MPIBegin(7) Виртуальные топологии: 84, 86, 90, 93, 97, 100 MPINumer Параллельные численные методы: 2, 4, 10, 13 ВАРИАНТ 4 MPIBegin(1) Процессы и их ранги: 4, 5 MPIBegin(2) Обмен сообщениями между процессами: 7, 12, 14, 20, 21, 24, 27, 29 MPIBegin(3) Коллективная пересылка данных: 32, 35, 39, 40, 44, 45 MPIBegin(4) Коллективные операции редукции: 49, 50, 54, 56 MPIBegin(5) Производные типы и упаковка данных: 60, 62, 65, 67, 69 MPIBegin(6) Группы процессов и коммуникаторы: 72, 74, 77, 79, 80 MPIBegin(7) Виртуальные топологии: 83, 88, 91, 93, 97, 100 MPINumer Параллельные численные методы: 3, 6, 9, 11 ВАРИАНТ 5 MPIBegin(1) Процессы и их ранги: 4, 6 MPIBegin(2) Обмен сообщениями между процессами: 8, 11, 14, 18, 21, 25, 27, 28 MPIBegin(3) Коллективная пересылка данных: 30, 35, 38, 42, 43, 47 MPIBegin(4) Коллективные операции редукции: 48, 51, 53, 57 MPIBegin(5) Производные типы и упаковка данных: 60, 61, 64, 66, 70 MPIBegin(6) Группы процессов и коммуникаторы: 71, 75, 76, 79, 82 MPIBegin(7) Виртуальные топологии: 84, 85, 89, 93, 96, 98 MPINumer Параллельные численные методы: 3, 6, 10, 12 ВАРИАНТ 6 MPIBegin(1) Процессы и их ранги: 3, 5 MPIBegin(2) Обмен сообщениями между процессами: 10, 13, 16, 18, 23, 24, 27, 29 MPIBegin(3) Коллективная пересылка данных: 31, 36, 38, 42, 43, 47 MPIBegin(4) Коллективные операции редукции: 49, 50, 55, 57 MPIBegin(5) Производные типы и упаковка данных: 58, 63, 65, 66, 70 MPIBegin(6) Группы процессов и коммуникаторы: 71, 74, 76, 78, 80 MPIBegin(7) Виртуальные топологии: 83, 85, 90, 93, 95, 98 MPINumer Параллельные численные методы: 3, 5, 8, 14 ВАРИАНТ 7 MPIBegin(1) Процессы и их ранги: 3, 6 MPIBegin(2) Обмен сообщениями между процессами: 10, 12, 14, 20, 22, 25, 26, 28 MPIBegin(3) Коллективная пересылка данных: 32, 35, 37, 41, 43, 46 MPIBegin(4) Коллективные операции редукции: 49, 50, 55, 57 MPIBegin(5) Производные типы и упаковка данных: 60, 61, 65, 66, 69 MPIBegin(6) Группы процессов и коммуникаторы: 71, 75, 76, 79, 80 MPIBegin(7) Виртуальные топологии: 84, 88, 92, 93, 97, 100 MPINumer Параллельные численные методы: 3, 4, 9, 12 ВАРИАНТ 8 MPIBegin(1) Процессы и их ранги: 4, 6 MPIBegin(2) Обмен сообщениями между процессами: 7, 13, 16, 20, 23, 25, 26, 28 MPIBegin(3) Коллективная пересылка данных: 30, 34, 39, 41, 44, 46 MPIBegin(4) Коллективные операции редукции: 48, 50, 55, 56 MPIBegin(5) Производные типы и упаковка данных: 59, 61, 64, 68, 70 MPIBegin(6) Группы процессов и коммуникаторы: 72, 75, 77, 78, 81 MPIBegin(7) Виртуальные топологии: 83, 88, 91, 94, 95, 98 MPINumer Параллельные численные методы: 1, 4, 7, 11 ВАРИАНТ 9 MPIBegin(1) Процессы и их ранги: 3, 6 MPIBegin(2) Обмен сообщениями между процессами: 8, 12, 15, 19, 22, 25, 27, 28 MPIBegin(3) Коллективная пересылка данных: 31, 36, 38, 42, 43, 45 MPIBegin(4) Коллективные операции редукции: 49, 51, 53, 56 MPIBegin(5) Производные типы и упаковка данных: 58, 62, 64, 68, 70 MPIBegin(6) Группы процессов и коммуникаторы: 72, 75, 77, 79, 82 MPIBegin(7) Виртуальные топологии: 84, 85, 92, 94, 96, 98 MPINumer Параллельные численные методы: 1, 6, 7, 14 ВАРИАНТ 10 MPIBegin(1) Процессы и их ранги: 4, 5 MPIBegin(2) Обмен сообщениями между процессами: 8, 13, 16, 19, 23, 24, 27, 28 MPIBegin(3) Коллективная пересылка данных: 31, 36, 39, 41, 43, 47 MPIBegin(4) Коллективные операции редукции: 49, 51, 53, 56 MPIBegin(5) Производные типы и упаковка данных: 59, 61, 65, 67, 70 MPIBegin(6) Группы процессов и коммуникаторы: 71, 74, 76, 78, 82 MPIBegin(7) Виртуальные топологии: 84, 88, 89, 94, 95, 100 MPINumer Параллельные численные методы: 2, 6, 9, 12 ВАРИАНТ 11 MPIBegin(1) Процессы и их ранги: 3, 5 MPIBegin(2) Обмен сообщениями между процессами: 10, 11, 16, 18, 21, 24, 26, 29 MPIBegin(3) Коллективная пересылка данных: 30, 34, 37, 40, 43, 45 MPIBegin(4) Коллективные операции редукции: 48, 51, 54, 57 MPIBegin(5) Производные типы и упаковка данных: 59, 62, 64, 67, 69 MPIBegin(6) Группы процессов и коммуникаторы: 71, 75, 77, 79, 80 MPIBegin(7) Виртуальные топологии: 83, 85, 92, 94, 96, 100 MPINumer Параллельные численные методы: 1, 5, 8, 14 ВАРИАНТ 12 MPIBegin(1) Процессы и их ранги: 4, 6 MPIBegin(2) Обмен сообщениями между процессами: 9, 11, 14, 19, 22, 25, 26, 29 MPIBegin(3) Коллективная пересылка данных: 30, 34, 37, 40, 44, 46 MPIBegin(4) Коллективные операции редукции: 48, 51, 53, 56 MPIBegin(5) Производные типы и упаковка данных: 60, 63, 65, 68, 70 MPIBegin(6) Группы процессов и коммуникаторы: 71, 74, 76, 78, 81 MPIBegin(7) Виртуальные топологии: 84, 86, 91, 94, 96, 98 MPINumer Параллельные численные методы: 1, 5, 7, 13 Образцы учебных заданий для модулей 2–4 OMPBegin14. Реализовать два варианта вычисления функции F(X, N): непараллельный и параллельный, основанный на использовании директивы for с опцией schedule (число нитей равно 2). Обеспечить возможно большее ускорение параллельного варианта за счет равномерной загрузки нитей. Формула для F: F(X, N) = ΣNI=1 1/(ΣI+NJ=1 (J + (X + J)1/2)/(2IJ − 1))) OMPAlg3. Модифицировать приведенный в лекциях алгоритм адаптивной квадратуры так, чтобы в ситуации, когда требуется обработать две новых задачи, в портфель помещалась только одна из них, а другая сразу же обрабатывалась тем же потоком, который породил эти две задачи. Подобная модификация уменьшит число действий по обращению к портфелю и тем самым уменьшит число простоев потоков, связанных с обращением к занятым критическим секциям. Проверить, что для любых значений подынтегральной функции полученный вариант параллельного алгоритма будет работать быстрее первоначального параллельного варианта. MPIMatrix3. Реализовать блочный алгоритм 2 перемножения матриц (алгоритм Кэннона). Для пересылки блоков матрицы использовать тип MPI_BLOCK (см. пример реализации метода Фокса, приведенный в лекциях). На множестве процессов определить декартову топологию двумерной циклической решетки. Циклическую пересылку блоков по строкам и столбцам выполнять с применением метода MPI_Sendrecv_replace, используя метод MPI_Cart_shift. Дополнительные коммуникаторы с декартовой топологией не использовать. MPIGravit2. Реализовать метод пульсации и протестировать его на описанном в лекциях наборе исходных данных, выводя те же сведения, что и в примере, приведенном в лекции. Отлаженную программу адаптировать к выполнению на кластере и протестировать для различного числа рабочих процессов (2, 4, 8). Проанализировать изменения характеристик программы при удвоении числа обрабатываемых тел (с 800 до 1600). Варианты наборов индивидуальных заданий к модулям 2–4 ВАРИАНТ 1 OMPAlg: 3 MPIMatrix: 3 MPIGravit: 1 ВАРИАНТ 2 OMPAlg: 2 MPIMatrix: 2 MPIGravit: 1 ВАРИАНТ 3 OMPAlg: 4 MPIMatrix: 3 MPIGravit: 2 ВАРИАНТ 4 OMPAlg: 1 MPIMatrix: 2 MPIGravit: 3 ВАРИАНТ 5 OMPAlg: 3 MPIMatrix: 1 MPIGravit: 2 ВАРИАНТ 6 OMPAlg: 4 MPIMatrix: 3 MPIGravit: 3 ВАРИАНТ 7 OMPAlg: 2 MPIMatrix: 1 MPIGravit: 2 ВАРИАНТ 8 OMPAlg: 2 MPIMatrix: 1 MPIGravit: 2 ВАРИАНТ 9 OMPAlg: 1 MPIMatrix: 2 MPIGravit: 3 ВАРИАНТ 10 OMPAlg: 3 MPIMatrix: 2 MPIGravit: 1 ВАРИАНТ 11 OMPAlg: 4 MPIMatrix: 3 MPIGravit: 1 ВАРИАНТ 12 OMPAlg: 4 MPIMatrix: 2 MPIGravit: 1 Образцы тестов для промежуточных аттестаций Номера правильных вариантов ответов выделены полужирным шрифтом. Образец теста № 1 (промежуточная аттестация) 1. Укажите тип аргумента rank функции MPI_Comm_rank: int MPI_Comm_rank(comm, rank) A. char* B. int* C. MPI_Comm D. char*** 2. Функция MPI_Comm_size(comm, size) вернула в параметре size значение 12. Выберите все варианты значений, которые могут быть возвращены в параметре rank при последующем вызове функции MPI_Comm_rank(comm, rank). A. 23 B. 8 C. 15 D. 11 E. 6 F. 10 3. Укажите, какая функция обеспечивает коллективный обмен данными, соответствующий приведенной схеме: sbuf Процесс 0: ( a0 a1 ) Процесс 1: ( b0 ) Процесс 2: ( c0 c1 c2 ) rbuf ( a0 a1 | b0 | c0 c1 c2 ) -> ( a0 a1 | b0 | c0 c1 c2 ) ( a0 a1 | b0 | c0 c1 c2 ) A. MPI_Gatherv B. MPI_Allgatherv C. MPI_Op_create D. MPI_Reduce_scatter 4. Укажите, какие из приведенных функций содержат следующий аргумент: request — идентификатор приема или передачи («запрос обмена»). A. MPI_Wait B. MPI_Isend C. MPI_Waitsome D. MPI_Testany 5. Укажите, может ли возникнуть тупиковая ситуация (deadlock) при указанной реализации процедур посылки и приема данных: Процесс 0: MPI_Ssend процессу 1 MPI_Recv от процесса 1 Процесс 1: MPI_Ssend процессу 0 MPI_Recv от процесса 0 A. Deadlock всегда возникает B. Deadlock может возникнуть C. Deadlock не возникает 6. Укажите, какая функция обеспечивает создание производного типа данных следующей структуры: [T1][T1].[T1][T1][T1]...[T1].....[T1][T1] где [T1] обозначает исходный тип, а точка (.) — фрагмент памяти, равный 1 байту. A. MPI_Type_indexed B. MPI_Pack_size C. MPI_Type_hindexed D. MPI_Type_vector Образец теста № 2 (промежуточная аттестация) 1. Отметьте верные утверждения об OpenMP. A. Технология OpenMP ориентирована в первую очередь на написание программ для векторно-конвейерных компьютеров B. Большинство конструкций OpenMP реализуется с помощью специальных комментариев C. Все переменные программы делятся на два класса: локальные и общие D. Число параллельных процессов OpenMP приложения определяется переменной окружения E. Весь параллелизм приложения реализуется с помощью параллельных циклов 2. При помощи каких директив возможно определить участок для выполнения одним потоком? A. #pragma omp single B. #pragma omp master C. #pragma omp critical 3. В критические секции A. потоки входят последовательно в произвольном порядке B. потоки входят последовательно в соответствии с порядковым номером потока C. все потоки входят одновременно 4. Какая директива OpenMP может быть использована для синхронизации потоков? A. #pragma omp barrier B. #pragma omp waitall C. #pragma omp wait 5. Среди параметров директив OpenMP присутствуют: A. private (list), где в списке указывается данные, которые нужно сделать локальными для потока B. num_process (cnt), для установления количества процессов параллельного фрагмента C. num_threads (cnt), для установления количества потоков параллельного фрагмента 6. Количество потоков в рамках OpenMP программы A. задается перед выполнением программы B. всегда совпадает с количеством ядер вычислительной системы C. может быть изменено в процессе работы программы Образец теста № 3 (промежуточная аттестация) 1. Отметьте правильные утверждения про компьютеры A. Классификация Флинна содержит 3 типа компьютеров B. Классификация Флинна содержит 4 типа компьютеров C. Классификация Флинна содержит 6 типов компьютеров D. Одним из признаков векторно-конвейерного компьютера является многопроцессорность E. Одним из признаков векторно-конвейерного компьютера является наличие векторных регистров F. Одним из признаков векторно-конвейерного компьютера является наличие хотя бы одного конвейера G. Ускорение конвейерного устройства тем выше, чем больше количество ступеней конвейера H. Ускорение конвейерного устройства тем выше, чем больше количество таких конвейеров 2. Во сколько раз нужно ускорить 80% программы, чтобы ускорить всю программу в 6 раз? A. 6 B. 80 C. 40/3 D. 120 E. невозможно F. правильного ответа нет 3. В каких единицах измеряется ускорение S в законе Амдала? A. в процентах B. в секундах C. оп/сек D. это безразмерная величина 4. В программе лишь 40% операций может выполняться параллельно. Какова, согласно закону Амдала, верхняя грань для ускорения, которое может быть получено для этой же программы на 5 процессорах? A. 5 B. 40 C. 25/17 D. 3/5 E. 5/3 F. верного ответа нет 5. На рисунке - сеть типа A. гиперкуб 3-го порядка B. гиперкуб 2-го порядка C. гиперкуб 4-го порядка D. гиперкуб 5-го порядка E. решётка F. куб в кубе 6. Умножение двух квадратных плотных вещественных матриц компьютер выполнил за 5 сек с производительностью 50 Gflop/s. Какого размера были матрицы? A. 500*500 B. 700*700 C. 1000*1000 D. 5000*5000 E. 7000*7000 F. верного ответа нет Образец теста № 4 (промежуточная аттестация) 1. Чем процесс отличается от программы ? A. это одно и то же B. процесс – это объект ОС, выполняющий код программы C. программа является частным случаем процесса D. программы принадлежат пользователю, процессы – нет 2. Какая переменная окружения в ОС Unix хранит пути поиска команд? A. COMMANDS B. PATH C. SHELL D. LIBRARY_PATH E. MANPATH; 3. Как в Unix-системе завершить процесс с PID равным 7430 ? A. rmproc 7430 B. ls -l 7430 C. kill -9 7430 D. terminate 7430 4. Назовите два типа библиотек в ОС UNIX A. локальные и глобальные; B. вычислительные и служебные C. компилируемые и интерпретируемые D. статические и динамические 5. Какие опции компилятора gcc задают уровень оптимизации? A. -o B. -c C. -O D. -g E. -O2 6. Какие функции выполняет система управления заданиями PBS? A. выделяет необходимые для задачи ресурсы B. обеспечивает удаленный вход на вычислительные узлы C. позволяет обслуживать множество потоков очередей, разделенных по архитектуре вычислительных узлов D. автоматически компилирует задания пользователей E. ведет учет выполненных заданий F. устанавливает предельные лимиты на ресурсы VII. УЧЕБНО-МЕТОДИЧЕСКОЕ ОБЕСПЕЧЕНИЕ ДИСЦИПЛИНЫ 7.1. Основная литература. 1. Абрамян М. Э. Практикум по параллельному программированию с использованием электронного задачника Programming Taskbook for MPI. — Ростов н/Д: Изд-во ЮФУ, 2010. 2. Абрамян М. Э. Параллельное программирование с использованием технологии MPI: Набор тестов. — Ростов н/Д, 2010. Пособие доступно в электронном виде, URL: http://mmedia0.cc.rsu.ru/pls/rsu/umr.umr_download?p_umr_id=2238 3. Антонов А. С. Параллельное программирование с использованием технологии OpenMP. М.: Изд-во МГУ, 2009. Пособие доступно в электронном виде, URL: http://edu.mmcs.sfedu.ru/mod/resource/view.php?id=2077 4. Дацюк О. В. Введение в Unix/Linux. Учебное пособие. — Ростов н/Д, 2009. Пособие доступно в электронном виде, URL: http://edu.mmcs.sfedu.ru/mod/resource/view.php?id=2817 7.2. Дополнительная литература. 5. Антонов А. С. Параллельное программирование с использованием технологии MPI. М.: Изд-во МГУ, 2004. 6. Букатов А. А., Дацюк В. Н., Жегуло А. Н. Программирование для многопроцессорных вычислительных систем. Ростов н/Д.: ЦВВР, 2003. 7. Воеводин В. В., Воеводин Вл. В. Параллельные вычисления. — СПб.: БХВПетербург, 2002. 8. Корнеев В. Д. Параллельное программирование в MPI. Новосибирск: Изд-во ИВМиМГ СО РАН, 2002. 9. Немнюгин С. А., Стесик О. Л. Параллельное программирование для многопроцессорных вычислительных систем. СПб: БХВ–Петербург, 2002. 10.Шпаковский Г. И., Серикова Н. В. Программирование для многопроцессорных систем в стандарте MPI. Минск: БГУ, 2002. 11.Эндрюс Г. Р. Основы многопоточного, параллельного и распределённого программирования: М.: Издательский дом «Вильямс», 2003. 12.Message Passing Interface Forum. MPI: A message-passing interface standard. International Journal of Supercomputer Applications, 8 (3/4), 1994. Special issue on MPI. 13.OpenMP Application Program Interface / Version 3.0 May 2008. OpenMP Architecture Review Board, 2008. 7.3. Список авторских методических разработок. 1. Абрамян М. Э. Практикум по параллельному программированию с использованием электронного задачника Programming Taskbook for MPI. — Ростов н/Д: Изд-во ЮФУ, 2010. 2. Абрамян М. Э. Параллельное программирование с использованием технологии MPI: Набор тестов. — Ростов н/Д, 2010. Пособие доступно в электронном виде, URL: http://mmedia0.cc.rsu.ru/pls/rsu/umr.umr_download?p_umr_id=2238 3. Абрамян М. Э. Материалы к лекции и задания по теме «Алгоритмы, параллельные по данным: случай общей памяти». Методическая разработка доступна в электронном виде, URL: http://edu.mmcs.sfedu.ru/mod/resource/view.php?id=1624 4. Абрамян М. Э. Материалы к лекции «Параллельное решение краевых задач с использованием OpenMP». Методическая разработка доступна в электронном виде, http://edu.mmcs.sfedu.ru/mod/resource/view.php?id=2165 URL: 5. Абрамян М. Э. Материалы к лекции «Параллельное решение краевых задач с использованием MPI». Методическая разработка доступна в электронном виде, URL: http://edu.mmcs.sfedu.ru/mod/resource/view.php?id=2132 6. Абрамян М. Э. Материалы к лекции и задания по теме «Параллельное умножение матриц». Методическая разработка доступна в электронном виде, URL: http://edu.mmcs.sfedu.ru/mod/resource/view.php?id=2111 7. Абрамян М. Э. Материалы к лекции и задания по теме «Параллельные методы решения гравитационной задачи n тел». Методическая разработка доступна в электронном виде, URL: http://edu.mmcs.sfedu.ru/mod/resource/view.php?id=2803 8. Абрамян М. Э. Материалы к лекции «Выполнение программ на учебном кластере». Методическая разработка доступна в электронном виде, URL: http://edu.mmcs.sfedu.ru/mod/resource/view.php?id=2804 VIII. МАТЕРИАЛЬНО-ТЕХНИЧЕСКОЕ ОБЕСПЕЧЕНИЕ ДИСЦИПЛИНЫ Дисплейный класс, снабженный следующим программным обеспечением, необходимым для проведения практических занятий Операционная система Microsoft Windows XP Service Pack 2, Microsoft Windows Vista или Microsoft Windows 7. Платформа разработки .NET Framework (версии 3.0 или выше). Среда программирования Microsoft Visual Studio .NET или Microsoft Visual C# Express Edition (версии 2008 или 2010). Программный комплекс MPICH для Windows версии 1.2.5. Электронный задачник по программированию Programming Taskbook for MPI (версии 4.9 или выше); Терминальная программа обеспечивающая PuTTY, подключение клиентского компьютера к удаленное Unix-серверу учебного вычислительного кластера. VIII. УЧЕБНАЯ КАРТА ДИСЦИПЛИНЫ Преподаватели: доц. Абрамян М.Э. Кафедра алгебры и дискретной математики Курс___6__Семестр__10___Группа_____ Направление подготовки (специальность) прикладная математика и информатика № Виды контрольных мероприятий Количество баллов за 1 контрольное мероприятие Текущий контроль 1. Посещение лекций 8 2. Работа на лабораторных 12 занятиях Рубежный контроль 1. Тестирование 12 2. Индивидуальное задание 28 Макс. к-во Промежуточная баллов аттестация Зачет/ 60 Модуль 1 Модуль 2 Модуль 3 Модуль 4 Введение в Разработка Параллельные Разработка и параллельные многопоточн архитектуры. выполнение вычисления. ых Закон Амдала. параллельных Разработка приложений с Параллельные программ на распределенных применением алгоритмы в вычислительпрограмм с технологии численных ных кластерах применением OpenMP методах технологии MPI Количество баллов по модулю 2 3 2 3 2 3 2 3 3 12 3 2 3 6 3 8 20 10 14 16 для получения зачёта студент должен набрать от 50 до 60 баллов Преподаватели: __________________________________ Согласовано: заведующий кафедрой: _________________