Реально мы видим четыре различных способа создания прикладного программного
обеспечения для многопроцессорных систем в течение следующих пяти - десяти лет.
Каждый из них в настоящее время имеет ряд серьезных недостатков, ограничивающих
возможность их применения. Эти способы могут быть кратко описаны следующим
образом:
1. Расширение существующих языков, например Фортрана, новыми операторами, что
даст возможность пользователю описывать параллельные вычисления и их
синхронизацию.
2. Расширение существующих компиляторов средствами выявления параллельно
выполняемых операций, где это возможно, и добавление необходимых средств
синхронизации для обеспечения корректности программы.
3. Добавление нового языкового уровня над существующим языком для описания
желаемой параллельности и необходимой синхронизации, с тем чтобы позволить
базовым прикладным программам оставаться относительно неизменными.
4. Определение абсолютно нового языка и системы компиляции, в которых
интегрируются понятия параллельности и синхронизации со всеми существующими
взглядами на описание вычислительных алгоритмов. В этом разделе каждая из этих
возможностей рассматривается несколько подробнее.
Для каждой из них приводятся основные аргументы и критические нерешенные
вопросы, ограничивающие их приемлемость в настоящее время. Следует отметить, что
эти варианты не являются полностью ортогональными и нельзя проводить между ними
жестких границ. Каждый из них предлагает некоторые изменения языка компилятора.
Для создания других возможностей с улучшенными свойствами допустимо их
объединение, однако это ведет и к обострению трудностей. Языковые расширения
Наибольший опыт работы на многопроцессорных системах приобретен при
использовании существующих языков программирования (обычно Фортрана) с
минимально необходимыми расширениями.
Этот подход обычно требует изменений в решении некоторых (или всех)
вопросов:
поддержка повторной входимости;
образование и завершение параллельных процессов;
синхронизация параллельных процессов; o подразделение данных на локальные и
на разделяемые данные процессов.