Re[2]: Параллельное программирование
От: igorstr  
Дата: 07.08.07 06:40
Оценка: 12 (1)
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, Didro, Вы писали:


D>>Возможно кто-то преподавал параллельное программирование или готовил практические занятия\семинары по этой тематике. Перед мной встала такая задача. Точнее говоря, есть желание модернизировать курс, материал, сам подход к преподаванию параллельного программирования в своем вузе. Особо обсудить эту тему не с кем, поэтому и написал сюда.


D>>Любые комментарии, опыт, предложения, примеры задач и методы проведения занятий будут очень кстати.


D>>Спасибо.


SH>Я кину ссылку моему научному руководителю, он ведёт курс, который называется "Распределённые вычислительные системы". С сентября я даже буду ему немного помогать Правда, направленность курса совсем другая. Лекции были про разное (одним словом не описать), а лабы — RPC, Java RMI, CORBA, Web Services (на жабе). Но общее, скорее всего, тоже есть.


SH>Ещё у Танненбаума есть хорошая книжка на эту тему.


Да, действительно, общее есть, но направленность совсем другая Мне фактически пришлось вставить в курс "Распределенные системы" раздел про параллельное программирование поскольку больше ни в одном (!) курсе у нас об этом речь не идет. А знать об этом будущим специалистам надо. Поэтому сейчас перед нами (мной и моими коллегами) тоже стоит задача разработки курса "Параллельное программирование", но начнется он не в ближайшем семестре, так что пока есть только план курса и потребность в обмене опытом.

Я хорошо знаком с работами Эдварда Ли, поскольку пишу диссертацию, связанную с параллельным программированием систем реального времени — так сказать, преодолеваю "технологический и концептуальный разрыв" между моделями программ реального времени и реализацией на конкретной вычислительной системе (в моем случае — сети DSP-процессоров). Есть и опыт разработки конкретных систем. К сожалению, с точки зрения преподавания пока этот вопрос не рассматривал, но очень интересной показалась идея использовать PtolemyII для лаб.

Очень верно отмечено, что параллельное программирование — это не только большие задачи и супер-ЭВМ. Задача "впихнуть" в курс все и не потерять при этом суть практически невыполнима. Замечу, что у Ли — это все-таки специализированный курс, посвященный в первую очередь моделям параллельного программирования в embedded системах. Наверное, правильнее всего иметь некоторый базовый курс "Параллельное программирование", обязательный для всех, и специализированные курсы по желанию: "ПП в системах реального времени", "ПП в распределенных системах" и т.п. Поэтому мы пока не включили в свой план курса такие специфические разделы (но, возможно, это обсуждение подтолкнет к тому, чтобы все-таки включить).

Очень серьезный курс читается в ННГУ (http://www.software.unn.ru/ccam/files/HTML_Version/index.html). Планируя свой курс, мы решили несколько уменьшить долю математики, но зато увеличить "охват" с технической точки зрения: показать, что параллелизм возможен не только в суперкомпьютерах, но и, скажем, при работе с внешними устройствами в системах реального времени. Необходимо, чтобы студенты с одной стороны твердо освоили классику (в том числе и пресловутых обедающих философов — все-таки один из самых наглядных примеров дедлока), с другой стороны почувствовали особенность эффективного параллельного программирования на примере более интересных задач. Кстати говоря, суммирование с использованием древовидной свертки — наиболее типичный пример (а не интересная задача). В указанном пособии ННГУ приведено еще множество подобных примеров. Дополнительные примеры можно подчерпнуть в области цифровой обработки сигналов — например, параллельная реализация дискретного преобразования Фурье. А вот использование функциональных языков и модели потоков данных — это действительно интересно.

В общем, у нас получился пока следующий план (повторяю, это только предварительный план, а не готовый курс):

1.Истоки параллелизма в вычислительных системах
a.Скалярная обработка и конвейеризация
b.Прерывания и параллельная работа устройств ввода-вывода
c.Многопроцессорные системы с общей памятью
d.Многоядерные процессоры
e.Многокомпьютерные системы с распределенной памятью
2.Модели параллельного программирования
a.Параллельные процессы
b.Потоки выполнения
c.Параллелизм данных
d.Параллелизм задач
e.Функциональное программирование
f.Модели потоков данных
3.Проблемы синхронизации параллельных процессов и потоков выполнения
a.Взаимное исключение
b.Примитивы синхронизации: семафоры, мьютексы, критические секции, мониторы Хоара, спинлоки, барьерная синхронизация
c.Классические задачи синхронизации: поставщик-потребитель, писатель-читатель, обедающие философы
d.Необходимая аппаратная поддержка
4.Основы параллельных алгоритмов
a.Законы Амдала и Густавсона
b.Понятие графа алгоритма
c.Концепция неограниченного параллелизма
d.Эквивалентные преобразования программ
e.Примеры эффективных параллельных алгоритмов: сортировка, линейная алгебра, переборные задачи оптимизации, трехмерная графика
5.Языки параллельного программирования
a.Модификация традиционных языков для поддержки параллелизма. OpenMP, mpC.
b.Функциональные языки для параллельного программирования. Erlang, Haskell.
6.Системы программирования на основе передачи сообщений
a.Интерфейс MPI
b.Система PVM
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.