Основными особенностями программирования параллельных вычислений являются: более высокая производительность программ и применение специальных приемов программирования, с которыми связаны более высокая трудоемкость и проблемы с переносимостью программ. В отличие от последовательного программирования (на распространенных языках Бейсик, Паскаль, Си, Фортран и др.) при этом возникают дополнительные проблемы: управление работой множества процессоров, организация межпроцессорных пересылок данных и т.д. Наиболее распространенные подходы к распараллеливанию вычислений и обработки данных основаны на моделях параллелизма данных и параллелизма задач.
Модель параллелизма данных предполагает применение одной операции сразу к нескольким элементам массива данных. Векторизация или распараллеливание чаще всего выполняется уже во время трансляции. Основные особенности модели:
· обработкой данных управляет одна программа;
· пространство имен является глобальным, т.е. переменные и массивы размещаются в одной памяти, а детали структуры данных, доступа к памяти и межпроцессорного обмена данными от программиста скрыты;
|
|
· слабая синхронизация вычислений на параллельных процессорах – выполнение команд на разных процессорах происходит, как правило, независимо и только иногда производится согласование (синхронизация) выполнения циклов или других элементов программы.
· параллельные операции над элементами массива выполняются одновременно на всех доступных данной программе процессорах.
Упрощению программирования способствует использование базовых операций:
· операций управления данными;
· операций над массивами в целом и их фрагментами;
· условных операций;
· операций приведения (вычисления для массива одного числа, например, суммы его элементов);
· операций сдвига;
· операций сканирования, например префиксная операция суммирования, при которой сумма N последовательных элементов одного массива присваивается N-му элементу другого массива;
· операций, связанные с пересылкой данных, например, между массивами разной формы, размерности и протяженности по каждому измерению.
Для составления программ в модели параллелизма данных используются специализированные языки – CM FORTRAN, C*, FORTRAN+, MPP FORTRAN, Vienna FORTRAN, а также HPF (High Performance FORTRAN – высокопроизводительный фортран), основанный на языке программирования FORTRAN-90 с его удобными операциями над массивами. Реализация модели параллелизма данных выполняется на уровне трансляции программы на машинный язык с помощью препроцессоров, использующих библиотеки с реализациями параллельных алгоритмов, предтрансляторов для предварительного анализа и оптимизации и распараллеливающих трансляторов, которые выявляют параллелизм в исходном коде программы и выполняют его преобразование в параллельные конструкции.
|
|
Модель параллелизма задач предусматривает разбиение вычислительной задачи на несколько относительно самостоятельных задач, каждая из которых выполняется на своем процессоре (или компьютере при распределенных вычислениях). Компьютер при этом представляет собой MIMD-машину. Для каждой подзадачи пишется своя собственная программа на обычном языке программирования (обычно на FORTRAN-е или на C). Обмен подзадач результатами работы и получение данных осуществляется вызовом процедур специализированной библиотеки. Для обеспечения эффективного совместного выполнения различных подзадач требуются дополнительные усилия. Дополнительные проблемы, возникающие в методе параллелизма задач:
· повышенная трудоемкость разработки и отладки программ;
· необходимость обеспечения равномерной и сбалансированной загрузки всех процессоров;
· необходимость минимизации обмена данными между задачами для уменьшения времени передачи;
· повышенная опасность тупиковых ситуаций.
Однако положительными сторонами являются большая гибкость и свобода и, как следствие, возможность достижения максимального быстродействия на основе эффективного использования ресурсов. Примерами специализированных библиотек являются распространяемые свободно в исходных кодах библиотеки MPI (Message Passing Interface – Интерфейс Передачи Сообщений) и PVM (Parallel Virtual Machines). Реализации спецификации MPI представляют собой библиотеки подпрограмм, которые могут использоваться в программах на языках C/C++ и FORTRAN. Пример простейшей MPI-программы на языке С:
#include “mpi.h”
#include <stdio.h>
int main(int argc, char *argv[])
{
int myid, numprocs;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,& myid);
fprintf(stdout,”Process %d of %d \n”, myid, numprocs);
MPI_Finalize();
return 0;
}
В программе используются подпрограммы MPI_Comm_size и MPI_Comm_rank. Первая возвращает количество процессоров, входящих в область взаимодействия, коммуникатор со стандартным именем MPI_COMM_WORLD, который указан в качестве ее первого аргумента, вторая подпрограмма определяет ранг процесса.
Средой выполнения параллельных программ являются операционные системы с поддержкой мультипроцессирования, многозадачности и многопоточности, например UNIX, LINUX, Microsoft Windows NT/2000/2003 Server.
Система разработки и выполнения параллельных программ PVM позволяет объединить разнородный набор компьютеров, связанных сетью в общий вычислительный ресурс, называемый Параллельной Виртуальной Машиной. Компьютеры могут быть многопроцессорными машинами любого типа: суперкомпьютерами, рабочими станциями и т.д., объединенными в сети любого вида (Ethernet, ATM и др. Поддерживаются языки C/C++ и FORTRAN и ряд других. Виртуальная машина допускает динамическое изменение конфигурации. Масштабируемость виртуальной машины позволяет включать в ее состав сотни хостов и выполнять в ее среде тысячи процессов. Система PVM может быть реализована в кластерах рабочих станций, имеющих относительно низкую стоимость – для создания кластера можно использовать даже сравнительно недорогие персональные компьютеры. Система PVM состоит из двух основных компонентов:
демона (процесса) pvmd3 (или pvdm), который запускается на всех компьютерах, входящих в состав виртуальной машины; Демоном в ОС UNIX называют процессы, управляющие различными службами, в данном случае выполнением PVM-программ.
· набора библиотек, реализующих операции параллельных вычислений и обмена данными, которые используются в параллельных программах на языках С и С++, а также через функции интерфейса и в программах на языке FORTRAN.
|
|
Для работы с виртуальной машиной в интерактивном режиме предназначена программа PVM –консоль.
Современное состояние программирования параллельных вычислений рассмотрено в [65].
Компания NEC предложила новую технологию создания многоядерных процессоров, позволяющую повысить эффективность параллельного выполнения приложений с неадаптированным программным кодом. В ее основе лежит возможность принудительного использования шаблонов разделения выполнения приложений, что ускоряет их работу. Это позволяет избавиться от трудоемкой предварительной отладки программ вручную. [66]