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

Основой построения параллельного алгоритма может служить как уже существующий последовательный алгоритм, так и сама математическая постановка вычислительной задачи. При распараллеливании существующих последовательных алгоритмов наиболее разумным представляется прагматический подход (от греч. pragmatos – действие), заключающийся в том, что в последовательных алгоритмах находят участки, преобразуемые в параллельные формы, которые и встраиваются в последовательный алгоритм. Такие поиски, преобразования и встраивания в последовательных алгоритмах могут выполняться автоматически. Это открывает возможность использовать на параллельных вычислительных системах программного обеспечения, созданного ранее для однопроцессорных вычислительных машин.

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

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

2.2.1  Распараллеливание регулярных выражений

К часто встречающимся фрагментам в последовательных алгоритмах можно отнести, например, так называемые альтернированные выражения: 

,    (2.1)

где      – чередующиеся операции  и , которые

удовлетворяют аксиомам операций сложения и умножения;

            – имена операндов, участвующих в вычислении.

Альтернированное выражение называют аддитивным, если  является сложением, и мультипликативным, если  является умножением.

Например, широко известным альтернированным мультипликативным выражением является обобщенная схема Горнера для вычисления значений степенных многочленов:

.

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

Два выражения  и  называются эквивалентными () в том и только в том случае, если, используя конечное число раз законы ассоциативности, дистрибутивности и коммутативности, можно  преобразовать в  и наоборот.

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

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

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

Алгебраическое выражение

с помощью законов ассоциативности, дистрибутивности и коммутативности преобразуем в следующие эквивалентные формы:

a)  ;

b)   ;

c)   ;

d)   .

На рисунке 2.2 для каждого выражения приведены ярусные формы алгоритмов с различными параметрами: числом ярусов , числом операций  и числом процессоров .


Рисунок 2.2.