Первая прагма (комментарий, начинающиеся с символов "CDIR$" в первой колонке) в
разделе описаний указывает компилятору, что элементы массива x должны быть
распределены между процессами. Вторая прагма указывает, что действия по выполнению
цикла должны быть распределены между процессами так, как были распределены
элементы массива. Т.е. каждый процесс будет обрабатывать только свои локальные
элементы массива. В ЭВМ Cray-T3D каждый процесс (=процессор) может обращаться к
любым элементам распределенных (shared) массивов, но обращение к элементам,
хранящимся в памяти самого процессора, очень эффективно (как к любым своим
локальным переменным), а обращение к элементам, хранящимся в памяти других
процессоров, требует заметного времени. Поэтому все циклы по обработке
распределенных иассивов должны быть аналогичным образом распределены между
процессорами.
При написании прагм программист может и не знать, что в машинный код попадают
дополнительные команды, направленные на распараллеливание программы, пересылку
данных и синхронизацию процессов. Программист пишет параллельную программу почти
так же, как обычную последовательную. Он может подразумевать, что везде выполняется
один процесс, но только в некоторых циклах этот процесс будет выполнять меньше
работы, чем последовательная версия.
Принципиально другой подход к распределению данных и работы между процессами -
использование специальных распараллеливающих библиотек. При использовании
библиотек программист может реализовать любую (или сразу обе!) концепцию
параллельного программирования - распределение данных или распределение действий.
Все переменные являются локальными и программа (процесс) не имеет доступ к
переменным других процессов. Программист должен явно писать обращения к
подпрограммам из библиотеки для передачи и приема данных, синхронизации,
распределения вычислительной работы. В то же время явное использование вызовов
подпрограмм позволяет оптимально и более гибко писать программу.
Библиотеки распараллеливающих подпрограмм (например MPI или PVM) являются
переносимыми и позволяют использовать в качестве "супер-ЭВМ" даже кластеры ЭВМ,
соединенных компьютерной сетью. Однако выбор между распараллеливанием с помощью
транслятора (проще написать или адаптировать программу, но есть вероятность, что у
других параллельных машин будет другой диалект языка) или библиотеки (более
быстродействующие программы, переносимость между всеми супер-ЭВМ, на которых
есть данные библиотеки, но программы труднее писать) надо делать исходя из
конкретных задач и имеющихся (в наличии или в перспективе) супер-ЭВМ.
5. Классы задач, которые можно эффективно векторизовать или распараллелить
Здесь мы опишем лишь некоторые задачи, которые можно эффективно решать на супер-
ЭВМ. Сначала мы коснемся математических моделей, встречающихся во многих научных
и инженерных задачах, а потом в качестве примера приведем пару научных задач, с
которыми авторы непосредственно имели дело. Конечно, мы не будем приводить
исходные тексты программ, но укажем схематично только главные черты параллельных
алгоритмов для этих задач