Параллельное программирование: Учебное пособие, страница 8

Параллельное программирование — совокупность языковых средств и методов  решения задач  на  мультипроцессорных системах  с общей или распределенной когерентной памятью, основной целью которых является достижение максимального быстродействия в сложной много процессной вычислительной задаче, не решаемой за разумное время на одной машине.

Конкурентное программирование — это языковые средства систем реального времени с техническими средствами организации множества различных процессов, выполняемых параллельно по отношению друг к другу, при решении некоторой конкретной задачи на одном процессоре. Иллюзия параллельности достигается переключением процессора с одного процесса на другой в соответствии с некоторой дисциплиной обслуживания. Здесь квазипараллельные процессы конкурируют между собой за овладение физическими или логическими ресурсами: процессором, каналами ввода-вывода, областью памяти, набором данных и др. Наличие общей памяти при конкурентном, много процессном или многозадачном программировании требует от программиста строгого учета в разрабатываемых программах соответствующего порядка обслуживания процессов.

Распределенное программирование. Определение его было дано выше. Чтобы считать процессы распределенными и применять технику распределенного программирования, необходимо отсутствие у процессов доступа к общей памяти. Процессы, выполняющиеся в разных разделах памяти мультипрограммной операционной системы, в частности, тоже должны рассматриваются как распределенные.

В настоящее время наиболее популярными универсальными языками программирования распределенной обработки в большинстве случаев выступают языки С++, Java и др. функциональные языки с лексическими конструкциями, вызывающими в вычислительных и коммуникационных средах действия по видоизменению данных, образованию каналов связи, перемещению, и размещению данных среди взаимодействующих процессов. Для разработки и выполнения программ распределенной обработки сейчас создается и применяется большое количество специализированных операционных оболочек (пакетов, платформ) по названным выше видам программирования [3].

В данном учебном пособии основное внимание уделяется комплексу вопросов, сопутствующих программированию вычислительных задач большой сложности в распределенных многопроцессорных вычислительных системах, решение которых необходимо получить за минимальное время. Комплекс названных проблем и целей в литературе по программированию таких задач получил название “Параллельное программирование” (Parallel programming) [4, 5].

Основными системами параллельного программирования в настоящее время считаются OpenMP (система открытых машин), PVM (система виртуальных машин) и MPI (система передачи сообщений, реализующая стандарт интерфейса передачи сообщений) с основными языками программирования С, С++, СС++, Фортран 77, Фортран 90 [10, 11].

1.4  Движущее начало параллельных процессов

В вычислительных машинах фон-неймановского типа движущим началом вычислительного процесса является принудительная выборка из памяти и мгновенное исполнение очередной команды. Дисциплина выборки и исполнение очередной команды или последовательности команд в случае взаимодействующих процессов принципиально другие: исполнение очередного оператора обработки в параллельном вычислительном процессе начинается с момента готовности необходимых для оператора данных. В литературе этот принцип именуют, как зацепление по данным. До готовности данных вычислительный процесс находится в режиме ожидания или переходит в режим ожидания, то есть процесс продолжает существовать, но не изменяет своего состояния.

Основой реализации такого принципа исполнения может служить механизм передачи сообщений, который технически должен обеспечить запись в специальный список сведений о подготовленных данных для конкретного процесса и уничтожение последним этой записи после использования. Механизм ассоциативного слежения за совокупностью записей в списке должен выдать сигнал пуск конкретному процессу.