Сергей Бобровский
Новый программный интерфейс OpenMP (www.openmp. org), созданный совместными усилиями DEC, Intel, IBM, SGI и других компаний, позволяет разрабатывать переносимые приложения для любых видов параллельных ЭВМ (ПРК) -от мультипроцессорных серверов до суперкомпьютеров. Он стандартизует многие элементы технологии параллельного программирования (управление “ветвями” программы, синхронизация, доступ одновременно выполняющихся процедур к общему блоку памяти и др.). Интерфейс ориентирован на платформы UNIX и Windows NT и язык Фортран. В будущем будет реализована поддержка Си и Си++.
При разработке параллельных программ чаще всего используются стандартные модели передачи сообщений Message Passing Interface (MPI) или Parallel Virtual Machine (PVM). Приложения, отвечающие требованиям этих моделей, переносимы, но сам процесс разработки для MPI или PVM очень сложен и напоминает программирование 16-разрядных Windows-приложений. В соответствии с MPI, например, программа должна работать с разделенными блоками данных, что очень неудобно при анализе больших массивов информации. Необходимо также точно знать число процессоров, для каждого из них указывать исполняемый блок кода и управлять ходом его выполнения. Поэтому создание программ для этих моделей завоевало популярность узкого круга специалистов, которые чаще всего используют версию параллельного Фортрана HPF, ориентированного на ограниченный набор аппаратных платформ.
В последние годы в связи с ростом интереса к хранилищам данных возникла потребность быстрой обработки больших массивов информации. ПРК для этого подходят как нельзя лучше, но MPI и PVM предназначены для реализации преимущественно счетных алгоритмов. Поэтому были разработаны новые модели параллельного программирования, основанные на технологии кэш-поледовательностей и ориентированные на создание высокопроизводительного ПО обработки данных. Среди них достаточно известная архитектура Scalable Shared Memory Multiprocessor (SSMP). В ее основе лежит идея использования общего блока памяти - каждый процессор имеет доступ к памяти любого другого процессора. Но до недавнего времени многие разработчики сопротивлялись внедрению SSMP из-за отсутствия единого стандарта и невозможности получать переносимые программы, потому что для каждой реализации SSMP-архитектуры существовали собственные расширения языков программирования.
Теперь же благодаря OpenMP можно создавать мобильные приложения для ПРК с общим блоком памяти, не заботясь о тонкостях работы конкретной модели обработки событий. OpenMP - это набор директив компилятора и настраиваемая на конкретную архитектуру библиотека времени выполнения. Синтаксис директив похож на синтаксис препроцессора PL/I и представляет собой набор управляющих структур, операторов синхронизации и описателей данных (переменная может быть локальной или глобальной для всех или отдельных программных процессов). Самое главное, что теперь для ПРК можно переделывать любые программы, не меняя их структуру, а просто приписывая, например, операторам цикла характеристику “параллельный”. При этом, конечно, надо понимать принципы параллельной работы компьютера, чтобы не пытаться распараллелить то, что может выполняться только последовательно. Хотя в рамках OpenMP это не страшно - в худшем случае не удастся получить выигрыш во времени, а вот в моделях MPI и PVM подобная ошибка может привести к краху программы.
Для синхронизации процессов используются как простые операторы “ждать”, так и более сложные, ориентированные на архитектуру конкретного компьютера. В области синхронизации из всех моделей параллельного программирования OpenMP, пожалуй, предоставляет наиболее мощные средства управления. Можно задавать число используемых программой процессоров, динамически распределять их ресурсы между параллельно исполняемыми блоками программы и т. д.
Стандарт OpenMP легко расширяем и позволяет быстро настраиваться на новые архитектуры ПРК. Этот новый стандарт должен послужить мощным стимулом развития параллельного программирования. И что самое главное, теперь появилась возможность найти ответ на многие прикладные и научные задачи, решение которые тормозилось высокими расходами на создание программ, способных работать на параллельных компьютерах. Теперь же написать программу на Фортране в соответствии с требованиями OpenMP может любой студент. Другое дело, где найти мощный ПРК (хотя на Западе это не проблема). Да и ведутся ли сегодня в России какие-нибудь работы с использованием параллельных компьютеров? Напишите мне по адресу: softart @postman.ru.