МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Саратовский государственный университет имени Н.Г. Чернышевского Факультет компьютерных наук и информационных технологий УТВЕРЖДАЮ _______________________ "_____"__________________20___ г. ПРОГРАММА УЧЕБНОЙ ДИСЦИПЛИНЫ Теоретические основы параллельного программирования. Направление подготовки 010500 – Математическое обеспечение и администрирование информационных систем Профиль подготовки Параллельное программирование Квалификация (степень) выпускника Бакалавр Форма обучения Очная Саратов 2011 2 1. Цели освоения дисциплины Целью освоения данной дисциплины является изучение принципов построения параллельных вычислительных систем, основ теории параллельных вычислений, принципов параллельного и распределенного программирования, а также методов, способов и средств разработки программ для многопроцессорных вычислительных систем в рамках параллельного и распределенного программирования. 2.Место дисциплины в структуре ООП бакалавриата Данная учебная дисциплина входит в раздел «Профессиональный цикл. Вариативная часть» ФГОС-3. Для изучения дисциплины необходимы компетенции, сформированные у обучающихся в результате изучения курсов «Информатика и программирование» (ПК 1, ПК 2, ПК 3, ПК 7, ПК 11, ПК 19, ПК 20, ПК 21), «Дискретная математика» (ПК 4, ПК 5, ПК 8, ПК 9, ПК 10, ПК 15, ПК 16, ПК 19), «Архитектура вычислительных систем и компьютерных сетей» (ПК 1, ПК 2, ПК 3, ПК 7, ПК 21, ПК 25), «Операционные системы и оболочки» (ПК 1, ПК 2, ПК 3, ПК 7, ПК 23, ПК 31). Компетенции, сформированные в результате изучения данной дисциплины, будут использованы при изучении курса «Компьютерное моделирование». 3 Компетенции обучающегося, формируемые в результате освоения дисциплины Данная дисциплина способствует формированию следующих компетенций: способность применять знания на практике (ОК 5); способность учиться (ОК 7); фундаментальная подготовка по основам профессиональных знаний (ОК 10); базовые знания в различных областях (ОК 13); определение общих форм, закономерностей, инструментальных средств для данной дисциплины (ПК 1); умение понять поставленную задачу (ПК 2); умение формулировать результат (ПК 3); умение грамотно пользоваться языком предметной области (ПК 7); умение ориентироваться в постановках задач (ПК 8); знание корректных постановок классических задач (ПК 9); понимание корректности постановок задач (ПК 10); знание содержания, основных этапов и тенденции развития программирования, математического обеспечения и информационных технологий (ПК 21); знание проблемы и направления развития технологий программирования (ПК 23); В результате освоения дисциплины обучающийся должен: Знать: принципы построения параллельных вычислительных систем; модели вычислений и методы повышения эффективности параллельных алгоритмов; модели функционирования параллельных программ; принципы распараллеливания вычислений на основе многопоточности для высокопроизводительных симметричных мультипроцессорных систем с общей памятью, и в частности, стандарт OpenMP; принципы разработки параллельных программ для высокопроизводительных кластерных систем с распределенной памятью на основе передачи сообщений, и в частности, стандарт MPI; принципы разработки программ, работающих в распределенных вычислительных системах. 3 Уметь: выполнять анализ моделей вычислений с целью разработки эффективных версий параллельных алгоритмов; разрабатывать параллельные алгоритмы и программы (в частности, для решения типовых задач вычислительной математики) для высокопроизводительных вычислительных систем на основе технологий OpenMP и MPI; использовать при этом параллельные версии стандартных библиотек поддержки высокопроизводительных вычислений; разрабатывать программы, выполняющиеся в распределенных вычислительных системах. Владеть навыками разработки эффективных версий параллельных алгоритмов; современными средствами разработки программного обеспечения, поддерживающими технологию распараллеливания вычислений OpenMP; технологией распараллеливания вычислений МPI; навыками их эффективного применения для решения научно-технических и прикладных задач; 4 4. Структура и содержание дисциплины Общая трудоемкость дисциплины составляет 6 зачетныx единиц, 216 часов (102 часа аудиторных). № Раздел дисциплины Сем Неделя Виды учебной работы, Формы п/ естр семестра включая текущего п самостоятельную работу контроля студентов и успеваемости трудоемкость (в часах) (по неделям семестра) Формы промежуточно й аттестации (по семестрам) 1 Принципы построения 5 1 Л:2 СP:4 Контрольная параллельных работа № 1 на 9 вычислительных неделе систем. 2 Модели вычислений и 5 2-3 Л:4 Пр:2 СР:6 Контрольная анализ эффективности работа № 1 на 9 вычислительных неделе алгоритмов 3 Функционирование 5 4-5 Л:4 Пр:2 СР:6 Контрольная параллельных работа № 1 на 9 программ и их модели неделе 4 Распараллеливание 5 6-14 Л:18 Пр:8 СР:24 Контрольная на основе работа № 1 на 9 многопоточности для неделе симметричных Контрольная мультипроцессорных работа № 2 на систем с общей 18 неделе памятью. C++ и технология OpenMP 5 Реализация 5 15-18 Л:8 Пр:6 СP:14 Контрольная многопоточности в работа № 2 на Microsoft C# и .NET 18 неделе Framework Промежуточная Зачет аттестация Курсовая работа ИТОГО 36 18 54 6 Библиотеки 6 1 Л:2 Пр:2 СР:8 Контрольная высокопроизводительн работа № 3 на 8 ых вычислений, неделе существенно использующие многопоточность 7 Коммуникационная 6 2 Л:2 Пр:2 СР:2 Контрольная трудоемкость работа № 3 на 8 параллельных неделе алгоритмов 8 Разработка 6 4-15 Л:24 Пр:12 СР:6 Контрольная 5 9 параллельных программ для высокопроизводительн ых кластерных систем с распределенной памятью на основе передачи сообщений. C++ и технология MPI. Библиотеки поддержки высокопроизводительн ых вычислений, существенно использующие технологию MPI ИТОГО работа № 3 на 8 неделе Контрольная работа № 4 на 16 неделе 6 16 Л:2 Пр:2 СР:8 Промежуточная аттестация 32 16 24 Контрольная работа № 4 на 16 неделе Экзамен 36 Семестр 5. Раздел «Принципы построения параллельных вычислительных систем». Классификация параллельных вычислительных систем. Мультипроцессоры и параллельные вычислительные системы с общей памятью. Симметричные мультипроцессорные системы с общей памятью. Мультикомпьютеры и параллельные вычислительные системы с распределенной памятью. Кластерные системы. Самостоятельная работа: ознакомление с характеристиками типовых симметричных мультипроцессорных вычислительных систем с распределенной памятью и кластерных систем ведущих производителей. Раздел «Модели вычислений и анализ эффективности вычислительных алгоритмов». Показатели эффективности параллельных вычислений: ускорение, эффективность, масштабируемость. Закон Амдала. Модель алгоритма в форме графа. Параллельная форма графа алгоритма: ярусы, высота, ширина и оценка наименьших затрат времени. Концепция неограниченного параллелизма и ее недостатки. Анализ возможности распараллеливания с точки зрения макроопераций. Организация параллелизма на основе разделения данных. Проблема балансировки нагрузки при ограниченном числе процессоров. Практические работы: построение и анализ параллельных форм графов типовых алгоритмов. Построение параллельных вариантов для блочных алгоритмов линейной алгебры и для обработки графов (охват графа и поиск кратчайшего пути). Самостоятельная работа: Операционный подход к изучению информационной структуры программ. Преобразователи и распознаватели. Графовые модели программ. Раздел «Функционирование параллельных программ и их модели». Представление параллельной программы как системы параллельно выполняемых процессов или потоков. Синхронизация. Обеспечение взаимоисключения при использовании разделяемых ресурсов. Блокировки. Семафоры и мониторы. Критические секции. Барьерная синхронизация. Графовая модель «процесс-ресурс» параллельных программ и теорема об отсутствии циклов. Практическая работа: Построение графовой модели «процесс-ресурс» типовых параллельных программ. Самостоятельная работа: Изучение средств взаимодействия между процессами и потоками операционной системы и их синхронизации в системных вызовах ОС UNIX/Linux и вызовах Win32 API OC Windows (XP/Vista/7/2003/2008). 6 Раздел «Распараллеливание на основе многопоточности для симметричных мультипроцессорных систем с общей памятью. C++ и технология OpenMP». Многопоточность современных операционных систем как основа для разработки параллельных программ для симметричных мультипроцессорных систем с общей памятью. Стандарт OpenMP и директивы компилятора C/C++. Переменные окружения. Модель параллельной программы OpenMP и ее выполнение. Параллельные и последовательные области: директива parallel, переменные среды и вспомогательные функции, директива single, директива master. Модель данных OpenMP. Распределение работы между потоками. Низкоуровневое распараллеливание. Параллельные циклы. Параллельные секции. Неитеративный параллелизм и директива sections. Распараллеливание в стиле «портфель задач» и директива tasks. Синхронизация. Барьеры. Директива ordered. Критические секции. Директива atomic. Блокировки. Директива flush. Дополнительные переменные среды и функции OpenMP. Практические работы: Ознакомление с базовыми средствами OpenMP 2.5-3.0 и режимами работы современных компиляторов Microsoft/GNU/Intel C/C++. Системные таймеры. Организация параллельных и последовательных областей. Динамическое изменение числа потоков OpenMP. Организация вложенных параллельных областей. Однократное выполнение фрагмента кода в пределах параллельной области. Код, выполняемый лишь основным потоком OpenMP. Локальные и общие переменные для потоков OpenMP. Параллельные циклы. Директива sections и организация неитеративного параллелизма. Организация барьеров. Организация блоков внутри цикла с требуемым порядком операций. Организация критических секций. Директива atomic и корректное изменение общих для всех потоков переменных. Блокировки. Исследование эффективности распараллеливания типовых вычислительных алгоритмов линейной алгебры. Самостоятельная работа: Исследование возможностей технологии OpenMP при решении типовых задач математической физики. Исследование автораспараллеливающих возможностей компилятора Intel C++. Раздел «Реализация многопоточности в Microsoft C# и .NET Framework» Оператор lock в C#. Класс Thread (System.Threading.Thread) в Microsoft .NET Framework. Делегаты (delegate). Специализированные потокобезопасные коллекции .NET (пространство имен System.Collections.Concurrent). Библиотека Task Parallel Library (TPL). Класс Parallel (System.Threading.Tasks.Parallel), методы для организации распараллеливания выполнения циклов. Параллельное выполнение подзадач (метод Parallel.Invoke). Практическая работа: разработка многопоточных приложений для Microsoft .NET средствами C#. Самостоятельная работа: Поддержка операций с запросами к источникам данных в LINQ и библиотека параллельных вычислений PLINQ. Семестр 6 Раздел «Библиотеки высокопроизводительных вычислений, существенно использующие многопоточность». Реализация многопоточных версий блочных алгоритмов решения базовых задач линейной алгебры с плотно заполненными матрицами в наиболее распространенных вариантах библиотек BLAS/LAPACK (ATLAS BLAS/LAPACK, GotoBLAS2/LAPACK, Intel MKL, AMD ACML). Многопоточные версии алгоритмов дискретного преобразования Фурье (FFTW3, Intel MKL, ACML). Практическая работа: компиляция, сборка и тестирование многопоточных версий свободно распространяемых пакетов ATLAS BLAS/LAPACK, GotoBLAS2/LAPACK, FFTW3. Самостоятельная работа: исследование влияния многопоточных версий BLAS/LAPACK на эффективность блочных алгоритмов факторизации разреженных 7 матриц в свободно распространяемых пакетах CHOLMOD, UMFPACK и SuiteSparseQR. Раздел «Коммуникационная трудоемкость параллельных алгоритмов» Типовые схемы коммуникации в многопроцессорных вычислительных системах: полный граф, линейка, кольцо, решетка, гиперкуб. Характеристики топологии сети передачи данных. Алгоритмы маршрутизации для типовых топологий. Методы передачи данных: атомарная передача сообщений и разделение сообщений на пакеты. Методы логического представления топологии коммуникационной среды. Сетевой закон Амдала. Практическая работа: анализ трудоемкости основных операций передачи данных. Самостоятельная работа: ознакомление с протоколами высокопроизводительных локальных компьютерных сетей (Myrinet, Gigabit Ethernet, SCI, InfiniBand), используемых для построения кластерных систем. Раздел «Разработка параллельных программ для высокопроизводительных кластерных систем с распределенной памятью на основе передачи сообщений. C++ и технология MPI». MPMD-модель вычислений и параллельное программирование на основе передачи сообщений. Способы запуска приложений MPI (реализации MPICH2 и OpenMPI). Парные межпроцессные обмены. Операции блокирующей передачи и блокирующего приема: блокирующая передача, данные в сообщении, атрибуты сообщения, блокирующий прием, возвращаемая статусная информация. Соответствие типов данных и преобразование данных: правила соответствия типов данных, преобразование данных. Коммуникационные режимы. Семантика парного обмена между процессами. Распределение и использование буферов. Неблокирующий обмен: коммуникационные объекты, инициация и завершение обмена, семантика неблокирующих коммуникаций, множественные завершения. Проба и отмена сообщений. Совмещенные прием и передача сообщений. Производные типы данных: конструкторы типа данных, адресные функции и функции экстентов, маркеры верхней и нижней границ, объявление и удаление объектов типа данных, использование универсальных типов данных. Коллективные взаимодействия процессов: барьерная синхронизация, широковещательный обмен, сбор данных, рассылка, сбор для всех процессов, общие по всем процессам рассылка и сбор данных. Глобальные операции редукции: функция Reduce, предопределенные операции редукции (вычисление сумм, произведений, логические операции и т.д.), нахождение глобального минимума/максимума и его индекса, функции All-Reduce, Reduce-Scatter, Scan. Группы процессов и коммуникаторы, базовые концепции. Управление группой: средства доступа в группу, конструкторы и деструкторы групп. Управление коммуникаторами: доступ к коммуникаторам, конструкторы и деструкторы коммуникаторов. Виртуальная топология и топологические конструкторы. Конструктор декартовой топологии и распределение процессоров по размерностям декартовой топологии. Конструктор топологии в форме графа. Топологические функции запроса. Сдвиг в декартовых координатах. Декомпозиция декартовых структур. Практические работы: Определение номера процесса в коммуникаторе и числа процессов в коммуникаторе. Определение характеристик системного таймера. Проверка масштабирования по числу процессоров при суммировании медленно сходящихся рядов. Передача сообщения процессу с последующим номером. Передача сообщения с буферизацией. Передача сообщения и ожидание ответа между двумя процессами в группе. Передача сообщений от процессов с четными номерами процессам с последующим номером. Определение структуры приходящего сообщения. Определение базовых характеристик коммуникационной сети параллельной вычислительной системы при помощи последовательного обмена сообщениями между двумя процессами. Обмен сообщениями с ближайшими соседями при помощи неблокирующих операций. Организация коммуникационной схемы «ведущий процесс-ведомые процессы». Применение неблокирующих операций для транспонирования матрицы, распределенной между процессами по столбцам. Организация и использование отложенных запросов на 8 операции двунаправленного обмена между соседними процессами. Разрешение тупиковых ситуаций при операциях двунаправленного обмена с соседними процессами. Исследование эффективности барьерной синхронизации. Рассылка фрагментов массива всем запущенным процессам приложения. Сравнение эффективности глобальных операций MPI_REDUCE и схемы сдваивания с пересылками данных типа «точка-точка». Задание пользовательской функции в качестве глобальной операции. Разбиение процессов приложения на группы. Создание нового коммуникатора с обратной нумерацией процессов. Создание коммуникаторов для групп процессов. Создание периодической по обоим измерениям декартовой виртуальной топологии. Создание виртуальной топологии графа с коммуникационной схемой «ведущий процесс-ведомые процессы». Использование производных типов данных. Упаковка и распаковка данных. Самостоятельная работа: Ознакомление с особенностями реализации технологии MPI основных производителей (MPICH2, OpеnMPI, Microsoft MPI, Intel MPI). Раздел «Библиотеки поддержки высокопроизводительных вычислений, существенно использующие технологию MPI». Кластерное расширение пакетов BLAS/LAPACK: пакеты BLACS и SCALAPACK. Пакет анализа графов METIS и его параллельная версия PARMETIS. Пакет MUMPS и адаптация блочных алгоритмов факторизации разреженных матриц к кластерным системам. Практическая работа: компиляция и сборка оптимизированной кластерной версии свободно распространяемого пакета конечно-элементного моделирования Elmer. Самостоятельная работа: Исследование масштабирования вычислительного процесса по числу процессоров в типовых задачах конечно-элементного моделирования. Контрольные работы. Задания контр. работ № 3, 4 приведены в приложении 1. 5. Образовательные технологии Рекомендуемые образовательные технологии: лекции, практические работы, самостоятельная работа студентов. При проведении занятий планируется использование таких активных и интерактивных форм занятий, как перекрестный опрос, мультимедийные презентации, обсуждение результатов выполнения практических работ. 7. Учебно-методическое и информационное обеспечение дисциплины а) основная литература: 1. Воеводин В. В., Воеводин В. В. Параллельные вычисления – СПб. : БХВ-Петербург, 2004. – 599 с. 2. Гергель В. П. Теория и практика параллельных вычислений – М. : Интернет-Ун-т Информ. Технологий : БИНОМ. Лаб. знаний, 2007. - 423 с. 3. Эндрюс Г. Р. Основы многопоточного, параллельного и распределённого программирования /Под ред. А. Б. Ставровского. – М.; СПб.; Киев : Вильямс, 2003. 505 с. б) дополнительная литература: 1. Антонов А. С. Параллельное программирование с использованием технологии OpenMP: Учебное пособие. – М.: Изд-во МГУ, 2009. – 77 с. 2. Chapman B., Jost B., Van der Pas R. Using OpenMP: Portable Shared Memory Parallel Programming. – Gambridge, London: The MIT Press, 2008. – 353 p. 3. OpenMP Application Program Interface. Version 3.0 May 2008. [Электронный ресурс]/ OpenMP Architecture Rewiew Board. – Электрон. дан. – 2010 – Режим доступа: http://www.openmp.org/mp-documents/spec30.pdf, свободный – Загл. с экрана. 4. Хьюз Т., Хьюз К. Параллельное и распределенное программирование на C++. –М. : Издательский дом Вильямс, 2004. – 672 с. 5. Антонов А.С. Параллельное программирование с использованием технологии MPI: Учебное пособие. – М.: Изд-во МГУ, 2004. – 71 с. 6. Корнеев В.Д. Параллельное программирование в MPI. – 2-е изд. – Новосибирск: Изд- 9 во ИВМиМГ СО РАН, 2002. – 215 с. 7. Шпаковский Г.И., Серикова Н.В. Программирование для многопроцессорных систем в стандарте MPI. – Минск: БГУ, 2002. – 323 с. в) программное обеспечение и Интернет-ресурсы: Комплект компиляторов Microsoft Visual С++ для ОС Windows либо свободно распространяемые комплекты компиляторов GNU/Intel С++ для ОС Linux. Свободно распространяемые библиотеки поддержки высокопроизводительных вычислений Atlas BLAS, GotoBLAS2, LAPACK, BLACS, SCALAPACK. Свободно распространяемые математические библиотеки UMFPACK, CHOLMOD, SuiteSparseQR, PARMETIS, MUMPS. Свободно распространяемый пакет конечно-элементного моделирования ELMER. Веб-сайт Лаборатории параллельных информационных технологий НИВЦ МГУ им. М.В. Ломоносова: www.parallel.ru. 8. Материально-техническое обеспечение дисциплины Мультимедийная лекционная аудитория. Компьютерный класс факультета компьютерных наук и информационных технологий с выходом на кластер высокопроизводительных вычислений ПРЦНИТ СГУ. Программа составлена в соответствии с требованиями ФГОС ВПО с учетом рекомендаций и Примерной ООП ВПО по направлению и профилю подготовки «Информатика и компьютерные науки». Автор профессор ___________ Д. К. Андрейченко Программа одобрена на заседании кафедры математического обеспечения вычислительных комплексов и информационных систем от «___» _______ 2011 года, протокол № ____. И. о. зав. кафедрой математического обеспечения вычислительных комплексов и информационных систем, профессор Декан факультета КНиИТ, доцент ___________ Д. К. Андрейченко ___________ А. Г. Федорова 10 Приложение 1. Примерные варианты заданий для контрольных работ Контрольная работа № 1 Состоит из двух частей. 1. Письменный ответ на 5 вопросов из множества вопросов 1-30 в списке контрольных вопросов по курсу. 2. Написать программу на С++, иллюстрирующую ускорение нахождения частичной суммы медленно сходящегося ряда S ( x) 1000000 k 1 k k x2 3 при помощи технологии OpenMP. Использовать директиву parallel for и опцию reduction Контрольная работа № 2 Состоит из двух частей. 1. Письменный ответ на 5 вопросов из множества вопросов 31-47 в списке контрольных вопросов по курсу. 2. Отчет по индивидуальному заданию: Исследование масштабирования вычислительного процесса по числу доступных процессоров (ядер) на основе технологии OpenMP в пакетах OpenFEM/MATLAB при конечно-элементном моделировании спектра собственных значений линейного оператора, соответствующего типовой начально-краевой задаче математической физики, для трехмерной пространственной области сложной формы. Контрольная работа № 3 Состоит из двух частей. 1. Письменный ответ на 5 вопросов из множества вопросов 48-69 в списке контрольных вопросов по курсу. 2. Написать параллельную программу на C++, в которой, используя стандартные возможности технологии MPI, все процессы обмениваются сообщениями с ближайшими соседями в соответствии с топологией кольца при помощи неблокирующих операций. Контрольная работа № 4 Состоит из двух частей. 1. Письменный ответ на 5 вопросов из множества вопросов 70-100 в списке контрольных вопросов по курсу. 2. Отчет по индивидуальному заданию: Исследование масштабирования вычислительного процесса по числу доступных процессоров (ядер) на основе технологии MPI в пакете ELMER при конечно-элементном моделировании спектра собственных значений линейного оператора, соответствующего типовой начальнокраевой задаче математической физики, для трехмерной пространственной области сложной формы.