6
том, что нужно использовать и как это нужно использовать, не-
обходимы знания о том, для чего это нужно использовать, какие
задачи при этом выполнять и, самое главное, как выполнять эти
самые задачи.
Многие авторы публикаций по параллельным вычислени-
ям сходятся в том, что для описания параллельных программ
необходимо уйти от императивных языков программирования.
Императивные языки (от лат. imperativus – повелительный)
описывают, какие действия и в каком порядке надо выполнить,
чтобы получить результат. В данном же случае требуется ис-
пользование декларативных (от лат. declaratio — заявление,
объявление) языков, т.е. таких, которые описывают, чем явля-
ется результат, который должен быть получен, оставив выпол-
нение действий на
долю компилятора или интерпретатора.
Примерами декларативных языков являются язык логического
программирования Prolog и язык функционального програм-
мирования Lisp.
Однако многие существующие языки декларативного про-
граммирования, несмотря на свою мощь, не обеспечивают пол-
ноценной базовой платформы для описания параллельных алго-
ритмов. Причина в том, что спецификации этих языков создава-
лись тогда, когда вопрос параллельного
программирования не
стоял так остро, как сегодня, и, видимо, поэтому они зачастую
также содержат ограничения, сводящие вычисления к последова-
тельным.
Таким образом, для полноценного удобного описания па-
раллельных программ, так или иначе, потребуется новый язык.
Сегодня известно немало попыток создания подобных языков.
Автор воздержится от их перечисления, дабы избежать оглаше-
ния личных предпочтений. Результаты этих попыток пока не об-
рели широкой популярности, и можно лишь надеяться, что они
обретут ее в будущем. В противном случае можно также надеять-
ся, что появятся другие полноценные параллельные языки высо-
кого уровня. Пока же мы будем отталкиваться от факта отсутст-
вия последних, в связи с
чем будем рассматривать популярные
модели параллельных вычислений с примерами на основе попу-