7867 ПараллельноеПрограммирование ФГОС БИС

advertisement
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ВЛАДИВОСТОКСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЭКОНОМИКИ И СЕРВИСА
ИНСТИТУТ ИНФОРМАТИКИ, ИННОВАЦИЙ И БИЗНЕС СИСТЕМ
КАФЕДРА ИНФОРМАЦИОННЫХ СИСТЕМ И ПРИКЛАДНОЙ ИНФОРМАТИКИ
ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
Рабочая программа учебной дисциплины
230400.62 (09.03.02) ИНФОРМАЦИОННЫЕ СИСТЕМЫ И ТЕХНОЛОГИИ
Владивосток
Издательство ВГУЭС
2014
Рабочая программа учебной дисциплины «Параллельное программирование» составлена в
соответствии с требованиями ООП: 230400.62 (09.03.02) Информационные системы и технологии
на базе ФГОС ВПО.
Составитель: Васильев Б.К., доцент кафедры Информационных систем и прикладной информатики
Утверждена на заседании кафедры ИСПИ от 19.03.2014 г., протокол № 9
Утверждена на заседании Учёного совета института ИИБС от 29.04.2014г., протокол № 7
©
Издательство ВГУЭС
2014
ВВЕДЕНИЕ
Дисциплина "Параллельное программирование" относится к математическому и
естественнонаучного циклу дисциплин направления "Информационные системы и
технологии" и введена в учебные планы в соответствии с требованиями ФГОС ВПО
указанного направления.
Знания, полученные при изучении дисциплины «Параллельное программирование»
используются в последующих дисциплинах: “Программирование на языке высокого
уровня”, “Операционные системы”.
Данная программа составлена в соответствии с требованиями ФГОС ВПО
направления "Информационные системы и технологии".
При разработке программы дисциплины учитывалось современное состояние
развития аппаратных платформ для параллельного программирования и наличие
модификаций языков для параллельного программирования, утилит и вспомогательных
технологий для отладки.
1. ОРГАНИЗАЦИОННО-МЕТОДИЧЕСКИЕ УКАЗАНИЯ
1.1 Цели освоения учебной дисциплины
Целью изучения дисциплины "Параллельное программирование" является теоретическая и
практическая подготовка студентов в области разработки программного обеспечения для высокопроизводительных параллельных вычислительных систем (ПВС), конфигурации и администрирования таких систем. Знания, полученные в результате освоения курса, помогут при
разработке системных программных компонентов современных информационных и расчетных
программ, в проектировании распределенных вычислительных программ в такой степени, чтобы
студенты могли самостоятельно выбирать средства реализации, находить необходимые
программные и технологические решения для практически важных системных задач.
Основные задачи изучения дисциплины:
 приобретение студентами знаний о способах параллелизации последовательных
алгоритмов, выполнении декомпозиции задачи, языках для написания параллельных
алгоритмов и программ;
 ознакомление с технологиями разработки параллельного программного обеспечения
(ППО) с использованием различных библиотек, языков и сред;
 приобретение практических навыков по составлению параллельных и распределенных
алгоритмов, использованию технологии потоков, обменов с использованием MPI,
исследованию и устранению тупиковых ситуаций (deadlocks) в параллельных программах.
1.2 Место учебной дисциплины в структуре ООП (связь с другими дисциплинами)
Дисциплина «Параллельное программирование» относится к циклу Б.2
Математический и естественно-научный цикл дисциплины по выбору (Б.2.ДВ.А2).
Знания, полученные в результате изучения дисциплины используются при изучении
дисциплин «Программирование на языке высокого уровня», «Операционные системы».
1.3 Компетенции обучающегося, формируемые в результате освоения учебной дисциплины
Студенты в результате обучения должны знать теоретические основы методов распараллеливания программ, современные аппаратные и программные средства для
выполнения параллельных приложений.
Уметь осуществлять декомпозицию задач различными способами в зависимости от
специфики алгоритма, устанавливать и настраивать средства для разработки и выполнения
ППО,
оценивать
эффективность
параллельных
вычислений,
анализировать сложность вычислений и возможность распараллеливания разрабатываемых алгоритмов, применять общие схемы разработки параллельных программ для
реализаций собственных алгоритмов, оценивать основные параметры получаемых
параллельных программ, таких как ускорение, эффективность и масштабируемость.
Владеть технологией разработки распределенных и многопоточных приложений с
использованием pthread и MPI, способами отладки и измерения метрических
характеристик параллельных приложений.
В результате изучения дисциплины будут сформированы следующие компетенции:
ООП
230400.62, Информационные
системы и технологии.
Информационные системы и
технологии
Вид компетенций
Профессиональн
ые
Компетенции
ПК-26 готовность использовать
математические методы обработки,
анализа и синтеза результатов
профессиональных исследований
Таблица. Формируемые знания, умения, владения
ООП
230400.62,
Информационные
системы и технологии.
Информационные
системы и технологии
Коды
компетенц
ий
ПК-26
Знания, Умения, Владение
Знания:
основные сведения о дискретных структурах,
используемых в персональных компьютерах,
основные алгоритмы типовых численных
методов решения математических задач,
один из языков программирования,
структуру локальных и глобальных
компьютерных сетей
1.4 Основные виды занятий и особенности их проведения
Объем и сроки изучения дисциплины:
Дисциплина "Параллельное программирование" изучается студентами направления
«Информационные системы и технологии» в течение 1 семестра. Общая трудоемкость
дисциплины составляет 4 зачетных единицы, 144 часа. Из них 51 часов – аудиторной
работы, 57 часов – самостоятельной работы.
Промежуточная аттестация по курсу – экзамен.
1.5 Виды контроля и отчетности по дисциплине
Контроль успеваемости студентов осуществляется в соответствии с рейтинговой
системой оценки знаний студентов.
Текущий контроль предполагает:
- проверку уровня самостоятельной подготовки студента при выполнении
индивидуального задания;
Промежуточный контроль предусматривает:
- проведение обзоров лабораторных работ с обсуждением способов реализации по мере
выполнения отдельных частей работы;
- проверка усвоенных знаний (предварительные аттестации).
Итоговый контроль знаний осуществляется при проведении экзамена в устной форме.
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. ОБРАЗОВАТЕЛЬНЫЕ ТЕХНОЛОГИИ
Программой дисциплины предусмотрено чтение лекций, проведение практических
занятий. В течение изучения дисциплины студенты изучают на лекционных занятиях
теоретический материал. При проведении лекций учитывается, что значительная часть
материала постоянно обновляется, описана только в периодической литературе, чаще
всего на английском языке, и не может выноситься на самостоятельную работу. На
лекциях рассматриваются не только теоретические вопросы, но и примеры разработки
параллельных программ с использованием различных языков и библиотек подпрограмм, а
также тенденции в развитии аппаратных и программных средств для ПП. На практических
занятиях под руководством преподавателя, приобретают навыки параллельного
программирования, обсуждают возникающие вопросы и проблемы, разбирают и
анализируют сложные моменты в задачах декомпозиции, синхронизации и реализации
распараллеливания.
В рамках общего объема часов, отведенных для изучения дисциплины,
предусматривается выполнение следующих видов самостоятельных работ студентов
(СРС): изучение теоретического материала при подготовке к защите лабораторных работ,
итоговое повторение теоретического материала.
Для самостоятельного изучения дисциплины выносится часть материала по темам
4, 6-8 дисциплины с возможностью консультации у ведущего преподавателя. Для
закрепления материала и приобретения навыков расчета рекомендуется выполнение
следующих задач (4.1).:
4. МЕТОДИЧЕСКИЕ
КУРСА
РЕКОМЕНДАЦИИ
ПО
ИЗУЧЕНИЮ
Перечень и тематика самостоятельных работ студентов по дисциплине
4.1
1. Удаленная работа на учебном кластере, для чего студенты
регистрационное имя и пароль у преподавателя;
2. Изучение методов работы распределенной системы компиляции distcc;.
3. Установка и настройка pvm и/или LAM-MPI,.
4.2
получают
Контрольные вопросы для самостоятельной оценки качества освоения учебной
дисциплины
Основные парадигмы распределенных вычислений.
1.
2.
3.
4.
5.
6.
Классификация параллельных вычислительных систем по Флинну и Кришнамэрфи.
Метафора стены Фокса
Системные средства для организации распределенных вычислений.
Разработка программ для распределенных вычислительных систем.
Архитектуры распределенных приложений.
Программные средства для создания таких приложений.
Аппаратные средства, используемые в параллельном программировании
1.
2.
3.
4.
5.
6.
Модели параллельных компьютеров с архитектурой SMP, UMA, NUMA.
Законы Амдала.
Разновидности реализаций аппаратных средств параллельных вычислений.
Способы использования аппаратной разделяемой памяти.
Варианты использования разделяемой памяти EREW, CREW, CRCW.
Аппаратный параллелизм в современных процессорах RISC. и его использование в
программировании (SIMD-команды).
Алгоритмизация параллельных вычислений
1. Распараллеливание алгоритмов: параллелизм данных и параллелизм кода.
2. Алгоритмы доставки сообщений в многопроцессорной системе для различных топологий
коммутации.
3.
4.
5.
6.
7.
8.
9.
Параллельные алгоритмы умножения вектора на матрицу.
Алгоритм исключения элементов матрицы (исключение Гаусса).
1D, 2D и 3D разбиения данных в матричных алгоритмах.
Параллельная реализация алгоритмов умножения двух матриц.
Анализ ориентированных ациклических графов алгоритма и его распараллеливание.
Оценки временных затрат параллельных алгоритмов.
Особенности использования микросуперскалярности процессоров в компиляторах для
получения эффективного кода.
Параллельное программированием с использованием традиционных
языков программирования
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.
2.
3.
4.
5.
6.
Средства распределенной компиляции проекта (на примере distcc).
Архитектура приложений в DCOM и CORBA.
Технология разработки приложений в CORBA
Сравнение технологий CORBA и DCOM.
MICO – свободно распространяемая версия CORBA. Программирования для CORBA.
Язык описания интерфейсов IDL в CORBA.
Расширения языков программирования и специализированные языки
ПП
1. Сilk – расширение языка Си, синтаксис и семантика
1. Синтаксис и семантика дополнительных (по отношению к C) операций и деклараций Cilk.
2. Понятие процесса и базовые процессы в языке OCCAM.
3. Синтаксис основных операций в языке OCCAM.
4. Синтаксис и семантика операций ввода-вывода в OCCAM’е
5. Переменные, массивы в языке ОККАМ: типы, синтаксис объявления.
4.3 Методические рекомендации по организации СРС
Для студентов в качестве самостоятельной работы предполагается подготовка отчетов
о выполнении лабораторных и домашних заданий, групповая работа над задачами по
распределенному программированию.
4.4 Рекомендации по работе с литературой
Дисциплина "параллельное программирование" относится к бурно развивающейся
области программирования, в которой совершенствование аппаратной части опережает
развитие практических средств разработки ПП, а теоретические исследования опережают
развитие аппаратной части. По тематике курса выпущено большое количество печатных
изданий, в качестве основы можно рекомендовать книги [1-3]. При выполнении
лабораторных работ, связанных с разработкой MPI, рекомендуется книга [2] и пособие [6].
Для ознакомления с методами алгоритмизации параллельных вычислений можно
использовать [1, 7]. Для углубленного изучения курса можно рекомендовать издания [7, 8]
и поучительный обзор состояния дисциплины [3].
Для выполнения лабораторных работ во ВГУЭС материалы (программное
обеспечение и электронные книги) в достаточном количестве размещены на сервере
«bkv.vvsu.ru» [4, 8-10]. Эти материалы соответствуют перечню лабораторных работ
раздела 2.2.
5. УЧЕБНО-МЕТОДИЧЕСКОЕ И ИНФОРМАЦИОННОЕ
ОБЕСПЕЧЕНИЕ ДИСЦИПЛИНЫ
5.1 Основная литература
1. Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. –СПб.: 2002, -608
с.
2. Богачев К.Ю. Основы параллельного программирования. – М.: «БИНОМ»,
2003. – 342 с.
3. И. Одинцов. Профессиональное программирование: системный подход.- СПб.:
«bhv», 2002 г.
4. ftp://bkv.vvsu.ru/pub/PP, IP=192.168.18.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
5.2 Дополнительная литература
8. Воеводин В.В. Параллельные структуры алгоритмов и программ. М.: ОВМ АН
СССР, 1987. -148 с.
9. ftp://bkv.vvsu.ru/pub/BOOKS/programming - книги по программированию.
5.3 Полнотекстовые базы данных – нет
5.4 Интернет-ресурсы
10. http://www.parallel.ru;.- сайт, посвященный параллельным вычислениям.
6. МАТЕРИАЛЬНО-ТЕХНИЧЕСКОЕ ОБЕСПЕЧЕНИЕ
ДИСЦИПЛИНЫ
Для проведения лабораторных работ используется компьютерный класс кафедры
ИСПИ с установленной операционной системой Linux и соответствующими
компиляторами языков C,
C++, Occam (kroc), библиотеки pvmlib и LAM/MPI.
Установленное на дополнительных разделах жесткого диска кластерное программное
обеспечение с выделенным сервером для выполнения лабораторных и самостоятельных
работ. Желательно использование проектора для демонстрации результатов. Лабораторные
работы все - компьютерные, проводятся с использованием программных средств gcc, make,
configure, MICO, PVM, kroc.
Лекции проводятся в аудитории с мультимедийным оборудованием..
 СЛОВАРЬ ОСНОВНЫХ ТЕРМИНОВ
MPI - технология организации обмена данными, использующая сетевую подсистему ОС
для организации обменов одиночных и коллективных.
PVM - "Параллельная виртуальная машина",- способ организации (возможно
разнородных) вычислительных машин в сеть с возможностью запуска заданий на наборе
элементарных машин. Состоит из демона, оболочки и библиотеки для разработки, pvmlib .
Законы Амдала - законы, определяющие связь между различными факторами
программной и аппаратной реализации параллельных вычислений, например количеством
параллельно работающих процессоров и эффективностью вычислений.
Кластер - объединение компьютеров в быструю сеть с возможностью балансировки
загрузки и оперативного управление запущенными задачами.
Коммуникатор - абстракция среды для обмена данными, используемая в технологии MPI.
Многопоточное программирование - разработка приложений, использующего
облегченные процессы или нити для создания параллельно выполняющихся участков
кода. Существуют различные реализации м.п., а также расширения стандартных языков
программирования для облегчения процесса разработки.
ОККАМ - язык параллельно программирования, впервые использовался на
транспьютерных систолических системах, в настоящее время адаптирован к RISC и CISC
вычислительным системам (с использованием многопоточности).
ОКМД (SIMD) - по классификации Флинна, - вычислительная система, ориентирование
на выполнение одинаковых действий (команд) над множественным набором данных. В
параллельном программировании также могут использоваться машинные команды,
ориентированные на SIMD-параллелизм (векторные операции), поддерживаемые
некоторыми процессорами.
Тупиковая ситуация (deadlock) - состояние вычислительной системы, при котором
конкуррентные процессы взаимно заблокированы без возможности снять блокировку.
Ускорение - отношение времени выполнения задачи на одно-процессорной системе ко
времени выполнения параллельного процесса. Зависит от количества распараллеленного
кода, непроизводительных затрат процессорного времени и количества используемых
процессоров (закон Амдала).
Download