Программа по курсу: современные технологии параллельного программирования (по выбору) по направлению: 511600 факультеты

Вид материалаПрограмма

Содержание


Всего часов
Знать и уметь использовать
Структура курса
Теоретические основы параллельного программирования
Лекция №3.
Лекция №4.
Лекция №10.
Системы с распределённой памятью
Отладка параллельных программ
Другие способы повышения быстродействия программ
Задания для самостоятельной работы
Реализация последовательного алгоритма
Разработка параллельных программ для систем с общей памятью
Работа №4.
Работа №5.
Разработка параллельных программ для системс распределённой памятью
Работа №7.
Список литературы
Подобный материал:
Министерство образования и науки Российской Федерации

Московский физико-технический институт

(государственный университет)


УТВЕРЖДАЮ

Проректор по учебной работе

___________ Ю. А. Самарский

«___» _______________ 2008 г.


ПРОГРАММА


по курсу: СОВРЕМЕННЫЕ ТЕХНОЛОГИИ ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ (по выбору)

по направлению: 511600

факультеты: ФРТК, ФОПФ, ФАКИ, ФМБФ, ФФКЭ, ФУПМ, ФПФЭ

кафедра: ИНФОРМАТИКИ

курс: 4

семестры: 7, 8 Зачет дифф.

практические занятия: 66 часов


ВСЕГО ЧАСОВ: 66


Программу составил: ассистент, А.А. Сухинов


Программа обсуждена

на заседании кафедры информатики

28 августа 2008 г.


Заведующий кафедрой, И.Б. Петров

профессор

Введение


Целью изучения дисциплины является получение студентами практических навыков создания эффективных параллельных программ для современных высокопроизводительных вычислительных систем, а также ознакомление со способами оптимизации программ.

Студенты познакомятся с современным программным обеспечением, используемым при написании параллельных программ. Дисциплина поможет выработать навыки решения задач параллельными методами, расширит общетехнический кругозор и развить логическое мышление.

Основные задачи изучения дисциплины:
  • знакомство студентов с основными понятиями архитектуры параллельных вычислительных систем;
  • практическое освоение методов создания параллельных приложений для систем с общей и распределённой памятью;
  • освоение современных программных инструментов для отладки и оптимизации параллельных программ;
  • знакомство со способами оптимизации программ для максимально эффективного использования имеющихся вычислительных ресурсов.

В результате изучения дисциплины студент должен ИМЕТЬ ПРЕДСТАВЛЕНИЕ:
  • об основных типах параллельных вычислительных систем и тенденции их развития;
  • об инструментах автоматического распараллеливания программ.

ЗНАТЬ И УМЕТЬ ИСПОЛЬЗОВАТЬ:
  • программный инструментарий создания параллельных программ для систем с общей и распределённой памятью.

ИМЕТЬ НАВЫК:
  • эффективного решения конкретной математической задачи на вычислительных системах с общей и распределённой памятью.



Структура курса



Введение


Лекция №1. Особенности современного аппаратного обеспечения и перспективы его развития. Классификация вычислительных систем. Многопроцессорные системы и многоядерные процессоры как способ достижения высокой производительности для решения больших задач.


Теоретические основы параллельного программирования


Лекция №2. Параллельные алгоритмы как средство решения больших задач на высокопроизводительных системах. Особенности параллельных алгоритмов. Характеристики параллельных алгоритмов. Пиковая и реальная производительность (ускорение) алгоритма. Закон Амдаля.

Лекция №3. Различие подходов к разработке параллельных алгоритмов на системах с общей памятью и системах с распределённой памятью. Проблемы обмена информацией в этих системах. Факторы, определяющие задержку и скорость обмена информацией.

Лекция №4. Некоторые употребительные параллельные алгоритмы для систем с общей памятью.

Лекция №5. Некоторые употребительные параллельные алгоритмы для систем с распределённой памятью.


Системы с общей памятью


Лекция №6. Многозадачность. Процесс и поток. Приоритет. Отличия в работе нескольких потоков на процессорах с hyper threading, многоядерных процессорах и многопроцессорных рабочих станциях. Механизм синхронизации кэшей.

Лекция №7. Явное создание потоков в ОС Windows и Linux. Обмен информацией между потоками. Необходимость в синхронизации потоков.

Лекция №8. Синхронизация потоков в ОС Windows. Функции синхронизации. Объекты синхронизации: взаимоисключение, критическая секция, событие, семафор.

Лекция №9. Компиляторы Intel. Автоматическое распараллеливание. Факторы, препятствующие автоматическому распараллеливанию.

Лекция №10. Распараллеливание программы с использованием OpenMP. Преимущества и недостатки по сравнению с явным созданием потоков. Инкрементальное распараллеливание. Функциональный параллелизм и параллелизм по данным.

Лекция №11. Основные директивы OpenMP и их параметры. Распараллеливание циклов.

Лекция №12. Параллельные секции OpenMP. Дополнительные функции runtime-библиотеки OpenMP.

Лекция №13. Причины падения скорости работы параллельных программ на системах с общей памятью. Накладные расходы. Ожидание при синхронизации. Ложное разделение. Intel Thread Profiler как средство для нахождения в программах узких мест и их устранения.


Системы с распределённой памятью


Лекция №14. Обзор существующих систем автоматического и полуавтоматического распараллеливания программ для систем с распределённой памятью (PVM, DVM, T-System).

Лекция №15. Распараллеливание программ с использованием MPI. Основные функции MPI.

Лекция №16. Обмен точка-точка. Синхронный и асинхронный обмены в MPI.

Лекция №17. Групповые операции обмена в MPI. Операции редукции.

Лекция №18. Гибридные системы. Использование директив OpenMP в MPI-программах. Использование MPI для обмена данными между процессами на одном компьютере.

Лекция №19. Причины падения скорости работы параллельных программ на системах с распределённой памятью, способы их обнаружения и устранения.


Отладка параллельных программ


Лекция №20. Ошибки, возникающие в параллельных программах. Недетерминированный характер этих ошибок. Гонка за ресурсом. Взаимная блокировка. Intel Thread Checker, как средство обнаружения таких ошибок в системах с общей памятью.


Другие способы повышения быстродействия программ


Лекция №21. Оптимизация последовательных программ с помощью Intel VTune Performance Analyzer.

Лекция №22. Использование Intel Performance Libraries как способ уменьшить время написания программ и повысить их быстродействие.

Лекция №23. Векторные операции (SSE) и способы их применения. Intel SSE SDK.

Лекция №24. Оптимизация программы на основе увеличения вероятности попадания в кэш оперативной памяти. Оптимизация программы с целью уменьшения числа сбросов конвейера ЦП.

Лекция №25. Параллельная обработка данных в графических процессорах. Технология CUDA.

Задания для самостоятельной работы



Разработка параллельных алгоритмов


Работа №1. Построение параллельных аналогов последовательных алгоритмов для систем с общей и распределённой памятью. Теоретические оценки эффективности.


Реализация последовательного алгоритма


Работа №2. Реализация и исследование последовательного алгоритма на языке C++. Установка и использование компилятора Intel.


Разработка параллельных программ для систем с общей памятью


Работа №3. Автоматическая оптимизация и распараллеливание для системы с общей памятью. Преобразование кода с целью увеличения процента автоматически распараллеленного кода. Сравнительный анализ времён выполнения последовательной и параллельной программ в зависимости от размерности задачи и числа потоков.

Работа №4. Распараллеливание программ с использованием директив OpenMP. Сравнительный анализ реальных временных затрат и теоретических оценок для параллельных алгоритмов и программ.

Работа №5. Оптимизация параллельной программы для системы с общей памятью с использованием Intel VTune Performance Analyzer и Intel Thread Profiler. Сравнительный анализ оптимизированной и исходной программ в зависимости от числа потоков и размерности задачи.


Разработка параллельных программ для систем
с распределённой памятью



Работа №6. Разработка параллельных программ для системы с распределённой памятью с использованием MPI.

Работа №7. Измерение времени выполнения параллельной программы и обменов в зависимости от числа процессоров и размерности задачи в случае использования синхронных и асинхронных обменов. Определение ускорения и эффективности. Сравнительный анализ теоретических оценок и экспериментальных данных. Исследование увеличения производительности параллельных программ при добавлении директив OpenMP в MPI-программы.

СПИСОК ЛИТЕРАТУРЫ

  1. Грегори Р. Эндрюс. Основы многопоточного, параллельного и распределенного программирования. «Вильямс», 2003. 512 стр.
  2. Камерон Хьюз, Трейси Хьюз. Параллельное и распределенное программирование с использованием С++. – «Вильямс», 2004. 672 стр.
  3. В. Д. Корнеев. Параллельное программирование в MPI. «Регулярная и хаотическая динамика», 2003. 303 стр.
  4. Ольга Стесик, Сергей Немнюгин. Параллельное программирование для многопроцессорных вычислительных систем. «BHV-СПб», 2002. 400 стр.
  5. Intel Corporation. Developing Multithreaded Applications: A Platform Consistent Approach.
  6. Rohit Chandra, Leonardo Dagum, Dave Kohr, Dror Maydan, Jeff McDonald, Ramesh Menon. Parallel Programming in OpenMP. «Morgan Kaufmann», 2001. 248 стр.
  7. Корнеев В. В. Параллельные вычислительные системы. – М.: «Нолидж», 1999. – 320 с.
  8. Богачев К. Ю. Основы параллельного программирования. «Бином. Лаборатория знаний», 2003. 342 стр.
  9. Воеводин В. В, Воеводин Вл. В. Параллельные вычисления. – «БХВ-Петербург», 2002. – 609 с.