существу представляют собой огромное количество физических
процессов, взаимодействующих друг с другом, является наиболее
естественным путем моделирования. Без связи с распараллелива-
нием моделирование процессов в том или ином смысле рассмат-
ривалось давно: метод частиц в ячейках, метод конечных элемен-
тов, метод с еток и другие методы, фактически, приводят к похо-
жему результату. Конечно, распараллеливание несет в себе боль-
шие трудности, но и вселяет значительные надежды. Исследова-
ния в этой области, пр актич еское освоение теоретических резуль-
татов, создание соответствующего программного обеспечения, от-
ладка программ на параллельных системах и проведение э ффек-
тивных вычислений представляются чрезвычайно важными.
Предлагаемый курс лекций посвящен в основном параллельно-
му программированию на вычислительных системах с распределен-
ной памятью, хотя часть представленной информации можно отне-
сти и к системам с обще й памятью. Использование параллельных
процессов существенн о усложняет программирование: эффектив-
ность увеличивается с увеличением независимости процессов, но
из-за этого приходится ослаблять контроль за вычислениями. Про-
цессы находятся в постоянной конкуре нтной борьбе за ресурсы, но
поскольку в совокупности они решают одну задачу, то необходимы
моменты синхронизации и обмена полученной информацией.
Для написании параллельных программ используются специ-
альные средства, которые могут предоставляться в виде специаль-
ных библиотек или расширений известных языков (например, биб-
лиотеки MPI, Open MP, PVM, язык Linda для Fortran, C, C++);
однако, основное внимание следует уделять принципам исп ользова-
ния этих средств: именно эти принципы рассматриваются в первую
очередь в данном курсе лекций. Поскольку курс расчитан на 36
лекционных часов, многие полезные аспекты здесь не рассмотрива-
ются в надежде, что любознательный читатель сможе т почерпнуть
недостающие сведения из книг [1-7], содержание которых частично
отражено в данном курсе лекций.
Курс лекций содержит шесть глав, первая из которых посвя-
щена программированию с использованием передачи сообщений,
вторая — мониторам и условным переменным; в третьей главе вво-
дится понятие рандеву и рассматриваются активные мониторы, а
четвертая глава посвящена операторам взаимодействия. В пятой
4