Министерство образования и науки Российской Федерации Владивостокский государственный университет экономики и сервиса ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ Рабочая программа учебной дисциплины по специальности 230201.65 Информационные системы и технологии Владивосток Издательство ВГУЭС 2014 ББК **.** Рабочая программа по дисциплине «Параллельное программирование» составлена в соответствии с требованиями ГОС ВПО. Предназначена для студентов по специальности 230201.65 Информационные системы и технологии Составитель: Васильев Б.К., доцент, кафедра информационных систем и прикладной информатики Утверждена на заседании кафедры ИСПИ от 19.03.2014 г., протокол № 9 Утверждена на заседании Учёного совета института ИИБС от 29.04.2014г., протокол № 7 © Издательство Владивостокского государственного университета экономики и сервиса, 2014 ВВЕДЕНИЕ Дисциплина "Параллельное программирование" относится к циклу дисциплин специализаций специальности "Информационные системы и технологии и введена в учебные планы в соответствии с требованиями Государственных образовательных стандартов указанной специальности. Дисциплина тесно связана и опирается на такие ранее изученные дисциплины, как «Алгоритмизация и программирование», «Операционные системы», «Архитектура ЭВМ и систем». Знания, полученные при изучении дисциплины «Параллельное программирование» используются в последующих дисциплинах, связанных с разработкой информационных систем и в практической деятельности инженера. Данная программа составлена в соответствии с требованиями Государственного образовательного стандарта высшего профессионального образования специальности «Информационные системы и технологии». При разработке программы дисциплины учитывалось современное состояние развития аппаратных платформ для параллельного программирования и наличие модификаций языков для параллельного программирования, утилит и вспомогательных технологий для отладки. 1. ОРГАНИЗАЦИОННО-МЕТОДИЧЕСКИЕ УКАЗАНИЯ 1.1 Цели освоения учебной дисциплины Целью изучения дисциплины "Параллельное программирование" является теоретическая и практическая подготовка студентов в области разработки программного обеспечения для высокопроизводительных параллельных вычислительных систем (ПВС), конфигурации и администрирования таких систем. Знания, полученные в результате освоения курса, помогут при разработке системных программных компонентов современных информационных и расчетных программ, в проектировании распределенных вычислительных программ в такой степени, чтобы студенты могли самостоятельно выбирать средства реализации, находить необходимые программные и технологические решения для практически важных системных задач. Основные задачи изучения дисциплины: - приобретение студентами знаний о способах параллелизации последовательных алгоритмов, выполнении декомпозиции задачи, языках для написания параллельных алгоритмов и программ; - ознакомление с технологиями разработки параллельного программного обеспечения (ППО) с использованием различных библиотек, языков и сред; - приобретение практических навыков по составлению параллельных и распределенных алгоритмов, использованию технологии потоков, обменов с использованием MPI, исследованию и устранению тупиковых ситуаций (deadlocks) в параллельных программах. 1.2 Перечень компетенций, приобретаемых при изучении дисциплины В результате изучения дисциплины «Параллельное программирование» студент должен знать - теоретические основы методов распараллеливания программ, современные аппаратные и программные средства для выполнения параллельных приложений; - уметь осуществлять декомпозицию задач различными способами в зависимости от специфики алгоритма, устанавливать и настраивать средства для разработки и выполнения ППО, оценивать эффективность параллельных вычислений, анализировать сложность вычислений и возможность распараллеливания разрабатываемых алгоритмов, применять общие схемы разработки параллельных программ для реализаций собственных алгоритмов, оценивать основные параметры получаемых параллельных программ, таких как ускорение, эффективность и масштабируемость. - владеть технологией разработки распределенных и многопоточных приложений с использованием pthread и MPI, способами отладки и измерения метрических характеристик параллельных приложений. 1.3 Основные виды занятий и особенности их проведения Дисциплина "Параллельное программирование" изучается студентами специальности «Информационные системы и технологии» в течение 8 семестра. Общее количество часов дисциплины составляет 170 часов. Из них 51 час – аудиторной работы, 119 часов – самостоятельной работы. Итоговая аттестация по курсу – экзамен. В ходе изучения дисциплины студент слушает лекции по теоретическому материалу, ряд вопросов выносится на самостоятельное изучение. Контроль усвоения материала проводится по результатам выполнения лабораторных работ. Для помощи студенту в освоении теоретического материала лекционных занятий и самостоятельной работы предусматриваются консультации ведущего преподавателя. Между аудиторной и самостоятельной работой студентов существует очень тесная взаимосвязь. Студенты, получая знания на лекционных занятиях должны применить их на практических занятиях и при выполнении самостоятельных работ. 1.4 Виды контроля и отчетности по дисциплине Контроль успеваемости студентов осуществляется в соответствии с рейтинговой системой оценки знаний студентов. Текущий контроль предполагает: - проверку уровня самостоятельной подготовки студента при выполнении индивидуального задания; Промежуточный контроль предусматривает: - проведение обзоров лабораторных работ с обсуждением способов реализации по мере выполнения отдельных частей работы; - проверка усвоенных знаний (предварительные аттестации). Итоговый контроль знаний осуществляется при проведении экзамена в устной форме. Для студентов заочной формы обучения текущий контроль предполагает выполнение и защиту контрольной работы. 1.5. Техническое и программное обеспечение дисциплины Для проведения лабораторных работ используется компьютерный класс кафедры ИСПИ с установленной операционной системой Linux и соответствующими компиляторами языков C, C++, Occam (kroc), библиотеки pvmlib и LAM/MPI. Установленное на дополнительных разделах жесткого диска кластерное программное обеспечение с выделенным сервером для выполнения лабораторных и самостоятельных работ. Желательно использование проектора для демонстрации результатов. Лабораторные работы проводятся с использованием программных средств gcc, make, configure, MICO, PVM, kroc. Лекции проводятся в аудитории с мультимедийным оборудованием. 2. СТРУКТУРА И СОДЕРЖАНИЕ УЧЕБНОЙ ДИСЦИПЛИНЫ 2.1 Темы лекций Тема 1. (2 часа) Задачи дисциплины. Понятие высокопроизводительных ПВС (ВПВС). Классификация параллельных вычислений по Флинну и Кришнамэрфи. Способы повышения производительности компьютера: конвейеризация, кэширование команд и данных, увеличение количества регистров, суперскалярность и микросуперскалярность процессоров. Модели многопроцессорных систем (переход от RAM к PRAM), локальная память, модули с шинной связью, разделяемая общая память. Топологии межмодульной связи: шина, двумерная сетка, гиперкуб, деревья (в т.ч. толстые деревья), коммутирующий граф. Архитектура суперкомпьютеров. Транспьютерные сетевые архитектуры. Распределенные системы: кластеры и сети (динамические, статические). Метрические характеристики вычислительной сети: Диаметр, связность, ширина сечения, поток через сечение, стоимость. Оценки метрик для различных сетей. Логическая и физическая организации ПВС. Сериализуемость, требования когерентности, стоимость пересылки в параллельных системах. Маршрутизация. Тема 2. (2 часа) Параллельные алгоритмы. Отличия параллельных алгоритмов от последовательных алгоритмов. Постановка задачи распараллеливания существующих сериальных алгоритмов. Пример суммирования массива. Реализация параллельных алгоритмов с использованием процессов. Виды межпроцессной коммуникации (сигналы, семафоры, разделяемая память, каналы, сообщения). Оценка эффективности алгоритма с учетом времени доставки кода и данных вычислительному узлу. Законы Амдала. Оценка целесообразности распараллеливания. Как анализировать зависимость данных и кода в последовательной программе? Порядок вычислений, граф зависимости. Модель «грубой силы». Преобразования параллелизации циклов. Доставка данных, отображение массива данных на распределенную систему, избыточность. Влияние аппаратной реализации PRAM и проблемы когерентности данных. Модели конкурентной и исключительной примитивных операций с памятью (EREW, CRCW, CREW). Тема 3. (2 часа) Алгоритмизация параллельных вычислений: принцип «Разделяй-и- властвуй». Виды декомпозиции задачи: по данным, по коду, по выполнению, комбинированные. Примеры декомпозиций различных задач. Сортировка, выпуклые оболочки, матричные операции: примеры декомпозиции рекурсивного вида. Матричные операции: пример декомпозиции по данным, одно-, двух- и трехмерное разбиения. Тема 4. (2 часа) Средства разработки параллельных вычислений с использованием потоков (нитей) кода. Процессы и потоки (нити) управления. Понятие облегченного процесса. Процессы с поддержкой многопоточности. Диспетчеризация процессов. Взаимодействие планировщика со структурами системных данных и примитивов ядра ОС. Состав и функции диспетчера и системных управляющих программ – программы инициализации, программы таймирования, программы управления восстановлениями. Краткосрочное планирование процессов и потоков в многопроцессорной системе. Составляющие ядра и пользователя в процессах в UNIX. Сигналы как простейшие средства коммуникации. Коммуникация и синхронизация процессов в централизованных архитектурах. Основные понятия и определения. Задача передачи данных между процессами «читательписатель». Тупики. Модели для анализа свойств асинхронных процессов. Алгоритм Дийкстры для задачи об обедающих философах. Понятие тупиковой ситуации и способы борьбы с ней. API потоков выполнения фирмы Sun и определения POSIX. Синхронизация потоков выполнения: взаимоисключающие блокировки, условные переменные, барьеры, блокировки чтения-записи. Тема 5. (1 час) Средства разработки распределенных вычислений с использованием параллельной виртуальной машины PVM. Использование функций библиотеки Pvmlib. Состав функций. Компиляция и запуск программ в среде PVM. Тема 6. (2 часа) Интерфейс передачи сообщений (MPI) и библиотеки MPI. Состав функций, типы данных, организация обмена данными. Пример использования библиотеки MPI. Среда выполнения LAM. Установка, использование (компиляция и запуск программ, конфигурация вычислительной системы). Тема 7. (1 час) Средства создания и отладки параллельных задач. Трансляция, компоновка, загрузка задач. Языки параллельного программирования и среды программирования. Расширения стандартных языков программирования для создания параллельных программ. Cilk, технология OpenMP. Дополнительные операторы, их синтаксис и семантика. Особенности реализаций и примеры программирования. Тема 8. (2 часа) Язык OCCAM, конструкции языка, понятие процессов, каналов. Происхождение языка и его перенос на не-транспьютерные системы. Примеры простых приложений, отображающих конвейерную обработку данных. Пример умножения матрицы на вектор. Процесс доставки данных в вычислительный узел. Процессы-заглушки. Тема 9. (2 часа) Удаленные вызовы процедур. Высокоуровневый и низкоуровневый интерфейс программирования. XDR-Преобразования, аутентификация, тшироковещательный режим. Использование технологий DCOM и CORBA для создания распределенных приложений. Язык описания интерфейсов IDL. 2.2 Перечень тем лабораторных/практических занятий Тема 1. (4 часа) Параллельное вычисление кратного интеграла численным методом с использованием процессов и каналов. Использование 1D и 2D разбиений. Тема 2. (6 часов) Параллельное вычисление кратного интеграла численным методом с использованием механизма потоков на многоядерном процессоре. Измерение времени выполнения. Тема 3. (4 часа) Знакомство с компилятором kroc, программа вычисления числовых последовательностей конвейерным способом. Программирование отдельных звеньев конвейера. Тема 4. (6 часов) Программа вычисления интеграла типа свертки на ОККАМе, реализация конвейерным способом на основе прототипа умножения матрицы на вектор. Тема 5. (4 часа) Программа моделирования доступа к совместным ресурсам. Обобщенная задача об обедающих философах Дийкстры, язык реализации – ОККАМ, добиться отсутствия тупиковых ситуаций, выводить протокол действия каждого процесса. Тема 6. (6 часов) Решение задачи многих тел для многопроцессорной системы с использованием потоков (нитей). Выбор методов синхронизации. Тема 7. (4 часа) Разработка распределенных приложений с использованием PVM, MPI или CORBA. 3. МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ ПО ИЗУЧЕНИЮ КУРСА 3.1. Перечень и тематика самостоятельных работ студентов по дисциплине 1. Удаленная работа на учебном кластере, для чего студенты получают регистрационное имя и пароль у преподавателя. 2. Изучение методов работы распределенной системы компиляции distcc. 3. Установка и настройка pvm и/или LAM-MPI. 3.2. Методические рекомендации по организации СРС Для студентов в качестве самостоятельной работы предполагается подготовка отчетов о выполнении лабораторных и домашних заданий, групповая работа над задачами по распределенному программированию. 3.3. Рекомендации по работе с литературой За последнее десятилетие информационные технологии в сфере телекоммуникаций и Интернет технологий сделали большой эволюционный рывок, как в области применяемых технологий, так и в сферах использования. Появилось и множество литературы, описывающей применяемые протоколы, стандарты. Но так как мир не стоит на месте и постоянно развивается, а самой быстроразвивающейся считается информационный мир, то можно сказать, что многие учебники, выпущенные год или два назад содержат не полную информацию о том, или ином описываемом объекте. Самый объективный и самый актуальный теоретический материал для изучения дисциплины «Технологии Интернет» находится в самой сети Интернет. Несмотря на это, центральные издательства выпустили достаточное количество литературы, необходимой самостоятельного для изучения и подготовки. Для изучения дисциплины «Технологии Интернет», среди последних изданий учебной литературы, можно отнести учебники [1,2,3] затрагивающие многие темы сетевых технологий и технологий Интернет. Для подготовки к лабораторным работам необходимо использовать литературу [4] описывающую практические особенности работы с ОС UNIX. Для более детального изучения практической части дисциплины также рекомендуется ознакомиться с электронными изданиями в сети Интернет [5]. Для подготовки к зачету и интенсификации самостоятельной работы студентам предлагается презентация учебного материала и конспект лекций, находящиеся на портале раздаточных материалов ВГУЭС. 3.4. Контрольные вопросы для самостоятельной оценки качества освоения дисциплины Основные парадигмы распределенных вычислений. 1. Классификация параллельных вычислительных систем по Флинну и Кришнамэрфи. 2. Метафора стены Фокса 3. Системные средства для организации распределенных вычислений. 4. Разработка программ для распределенных вычислительных систем. 5. Архитектуры распределенных приложений. 6. Программные средства для создания таких приложений. Аппаратные средства, используемые в параллельном программировании 1. Модели параллельных компьютеров с архитектурой SMP, UMA, NUMA. 2. Законы Амдала. 3. Разновидности реализаций аппаратных средств параллельных вычислений. 4. Способы использования аппаратной разделяемой памяти. 5. Варианты использования разделяемой памяти EREW, CREW, CRCW. 6. Аппаратный параллелизм в современных процессорах RISC. и его использование в программировании (SIMD-команды). Алгоритмизация параллельных вычислений 1. Распараллеливание алгоритмов: параллелизм данных и параллелизм кода. 2. Алгоритмы доставки сообщений в многопроцессорной системе для различных топологий коммутации. 3. Параллельные алгоритмы умножения вектора на матрицу. 4. Алгоритм исключения элементов матрицы (исключение Гаусса). 5. 1D, 2D и 3D разбиения данных в матричных алгоритмах. 6. Параллельная реализация алгоритмов умножения двух матриц. 7. Анализ ориентированных ациклических графов алгоритма и его распараллеливание. 8. Оценки временных затрат параллельных алгоритмов. 9. Особенности использования микросуперскалярности процессоров в компиляторах для получения эффективного кода. Параллельное программированием с использованием традиционных языков программирования 1. Системные вызовы различных ОС для работы с процессами. Создание и удаление процессов. 2. Планирование процессов в операционной системе с использованием одного и нескольких процессоров. 3. Системные средства для синхронизации выполнения процессов. 4. Системные вызовы для работы с семафорами. Создание, удаление и изменение значения семафоров. 5. Межпроцессное взаимодействие и операционных UNIX-средах. 6. Осуществление распараллеливания на уровне процессов. 7. Осуществление распараллеливания на уровне нитей. 8. Синхронизация выполнения нитей в POSIX-совместимых системах. 9. Кластерное программное обеспечение для ОС UNIX (Linux). Понятие кластера компьютеров. Условия, необходимые для установки кластерного программного обеспечения. 10. Осуществление распараллеливания задачи в кластере. Библиотеки функций для ПП 1. Библиотека функций параллельной виртуальной машины pvmlib. 2. Удаленный вызов процедур. API RPC, последовательность вызовов на стороне клиента и на стороне сервера. 3. Команды оболочки и функции библиотеки системы виртуальных машин PVM. 4. Состав функций MPI (группы функций) 5. Разработка распределенных приложений с использованием механизма передачи сообщений MPI. 6. Сокращенный (минимальный) набор функций MPI. Пример использования. 7. Функции MPI для обменов многие-к-одному и один-к-многим. 8. Особенности использования микросуперскалярности процессоров в компиляторах для получения эффективного кода. Распределенное ПП (клиент-сервер) 1. Средства распределенной компиляции проекта (на примере distcc). 2. Архитектура приложений в DCOM и CORBA. 3. Технология разработки приложений в CORBA 4. Сравнение технологий CORBA и DCOM. 5. MICO – свободно распространяемая версия CORBA. Программирования для CORBA. 6. Язык описания интерфейсов IDL в CORBA. Расширения языков программирования и специализированные языки ПП 1. Сilk – расширение языка Си, синтаксис и семантика. 2. Синтаксис и семантика дополнительных (по отношению к C) операций и деклараций Cilk. 3. Понятие процесса и базовые процессы в языке OCCAM. 4. Синтаксис основных операций в языке OCCAM. 5. Синтаксис и семантика операций ввода-вывода в OCCAM’е 6. Переменные, массивы в языке ОККАМ: типы, синтаксис объявления. 4. СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ 4.1 Основная литература 1. Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. –СПб.: 2002, -608 с. 2. Богачев К.Ю. Основы параллельного программирования. – М.: «БИНОМ», 2003. – 342 с. 3. И. Одинцов. Профессиональное программирование: системный подход.- СПб.: «bhv», 2002 г. 4. ftp://bkv.vvsu.ru/pub/PP, IP=10.40.24.2 (в локальной сети ВГУЭС) материалы к занятиям по дисциплине, постоянно меняющееся содержание в соответствии с текущими заданиями. 5. ftp://bkv.vvsu.ru/pub/PP/SOFT/ - программное обеспечение для лаб. работ. 6. Корнеев В.Д. Параллельное программирование в MPI. – Новосибирск: Издательство СО РАН, 2000. - 220 с. 7. Джоунз Г. Программирование на языке Оккам: Пер. с англ. – М.:Мир,1989 –208 с. 8. http://parallel.ru/tech/mpc/mpC-rus.html 4.2 Дополнительная литература 9. Воеводин В.В. Параллельные структуры алгоритмов и программ. М.: ОВМ АН СССР, 1987. -148 с. 10. ftp://bkv.vvsu.ru/pub/BOOKS/programming книги по программированию.