Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

malyshkin_ve_korneev_vd_-_parallelnoe_programmirovanie_multikompyuterov

.pdf
Скачиваний:
66
Добавлен:
28.03.2016
Размер:
3.12 Mб
Скачать

терма t необходимо будет учитывать, что в нем не может использоваться такой компонент x [i], что i превосходит значение, полученное счетчиком n x .

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

7.3.3. Итеративные вычислительные модели с массивами

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

массивы, которые бы допускали введение предикатов-

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

328

 

 

 

i+ 1

 

 

 

 

n x

a

i

i

b

i

i

 

 

 

 

 

 

 

P ai

 

 

 

 

 

 

 

2

 

 

2

 

 

 

 

1

 

 

1

 

n

e

 

x

 

 

y

 

 

 

 

Рис.7.29

 

 

 

 

На рис.7.29. показана массовая операция a итеративной ВММ,

in(ai)={ n x , x [i]},

 

out(ai)={ n x , x [i+1]},

({n},{ x

})-план,

вычисляющий

массив

x , содержит

все

термы вида

ti=ai(ai-

1(…( a1( x [1]). При должной интерпретации алгоритм, заданный

({n},{ x })-планом, может считывать в оперативную память все записи файла.

На рис.30а показана структурированная итеративная ВММ

С. Структурная интерпретация массовых операций a и b

приведена на рис. 30б и 30в. Операциям а и b ВММ С (рис.

7.30а) соответствуют ВММ Сa=SI(a) (см. рис. 7.30б) и Сb=SI(b)

(см. рис. 7.30в); па=SI(n); переменные SI(nx), SI(ny), SI(nz) —

это

счетчики n

 

, n

 

, n

 

, а SI(x), SI(y), SI(z) — массивы

 

,

 

,

 

в

 

 

 

x

 

z

 

 

 

y

x

y

z

ВММ Сa и Сb.

 

 

329

C

 

 

nx

nz

 

 

x

n

 

z

a

b

 

 

y

y2

 

 

ny

 

 

 

Рис. 7.30а.

 

Ca

i+1

 

 

a2i

 

 

i

 

 

nx

 

 

 

 

 

 

2

x

na

 

1

a1

 

 

 

 

1

y

 

 

 

 

2

 

ny

j

a3

j+1

Рис. 7.30б

330

Cb

 

 

 

 

nz

 

 

 

 

nx

i

b1i

i

 

b2

 

 

 

 

x

2

 

2

 

1

 

1

z

b3

y 1

 

b5

1

y2

 

2

 

2

 

 

 

 

n y

 

 

 

 

 

ny 2

i

 

i

i

 

 

i+1

 

b4

i+1

 

 

 

 

 

 

Рис. 7.30в

 

 

 

Если содержательно интерпретировать:

 

 

 

I(n): (цельное положительное число),

 

 

I(a1): n x := n y : = n; ввод x [1],

y [1])),

 

 

I(a2i): (ввод x [i + 1])), I(a3j): (ввод y [j + 1]),

 

I(b2): ( n z : = n x ), I(b3): ( n

: = n y

),

 

 

 

y 2

 

 

 

I(b1i): ( z [i]: =

x [i] + y [i]),

 

 

 

I(b4i): ( y 2 [i + 1]: = 1); печать ( y [i + 1]),

 

 

I(b5): (печать ( y [i])),

 

 

 

 

область интерпретации — вещественные числа, тогда

({п},{nz,z,у2})-план задает алгоритм ввода и сложения массивов

331

 

 

и

 

 

с результатом

 

 

 

и печатью

 

 

 

 

 

, т. е. его термы

 

x

y

 

 

z

y

вырабатывают значения

компонентов

 

 

 

[i],

равные сумме

z

значений

компонентов

 

 

 

 

[i] и

 

 

[i].

Максимально

 

 

x

 

 

 

y

непроцедурная форма задания этого алгоритма множеством термов ({n},{nz,z,y2})-плана позволяет (нет запрещающих ограничений) конструировать различные программы,

реализующие его, например:

А. Сначала вводятся x и y , а затем вычисляется z и

печатается y ;

Б. Начинают вводиться x и y , и по мере ввода вычисляться компоненты z и печататься компоненты y ;

В. Вводится y и в процессе ввода сразу печатаются его компоненты. По завершении ввода y начинает вводиться x и

вычисляться z и, возможно, продолжают печататься компоненты y ;

Г. В целях экономии памяти массивам x и y отводятся ячейки для размещения только одного компонента. Тогда ввод осуществляется по одному компоненту x и y , вычисляется соответствующий компонент z и печатается y . Затем цикл повторяется.

Выбор конкретного вида программы определяется количеством ресурсов ЭВМ, выделенных для реализации

332

алгоритма, и функционалом, который характеризует качество

программы.

7.3.4.Синтез максимально асинхронной программы

При рассмотрении вопросов конструирования максимально

асинхронной программы следует иметь ввиду, что достаточно построить А-схему, реализующую потенциально бесконечный

(V,W)-план. Рассмотрим основные требуемые идеи, понятия,

конструкции и построения, необходимые для реализации такого

(V,W)-плана.

Напомним, что А-схема состоит из конечного множества А-блоков {Ak ½kÎ{1,2,...,l}}, определенных над информационной

М и управляющей G памятями, каждый из которых содержит спусковую функцию tr(ak), управляющий оператор c(ak) и

операцию ak, akÎF1. Понятно, что каждая массовая операция должна реализоваться А-блоком, который должен срабатывать на всех входных наборах in(aк) массовой операции aк. Каждой переменной из in(aк)Èout(aк) в памяти М соответствует ячейка, в

которой хранится значение. Для динамического массива x

ячейки памяти отводятся в момент вычисления значения n x . Для компонентов итеративного массива y ячейки памяти заводятся в

моменты изменения значений счетчика ny .

Выполнение А-блока Аk, реализующего массовую операцию, может быть инициировано в некоторый момент, если

333

tr(ak)=true при текущем состоянии памяти MÈG. Спусковая функция tr(ak) вычисляется на всех входных наборах in(aк) таких,

что для любого компонента массива x [j]Îin(aк) выполняется n x ³j и блок ak запускается на счет с входными переменными in(aк) и выходными out(aк), т.е. реализуется операция aк. В

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

Алгоритмы планирования и оптимизирующих преобразований вычислений на моделях с массивами не обсуждаются ввиду их значительной сложности и меньшей важности для понимания проблем конструирования параллельных программ. Их детальное описание может быть найдено в [5].

334

7.3.7.Модификации и приложения метода

Метод синтеза параллельных программ на вычислительных

моделях был рассмотрен в весьма общем виде. Для каждого конкретного приложения он должен быть модифицирован

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

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

7.4.1.Интеллектуализация модульного программирования

Хорошо известно, что программное обеспечение является

наиболее дорогим компонентов вычислительных систем. С

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

335

решать эту задачу на пути построения интеллектуальных систем модульного программирования.

Одним из основных принципов интеллектуальных систем состоит в том, чтобы запоминать, накапливать в памяти ЭВМ знания о предметной области в активной форме, которая позволяет использовать эти знания при автоматическом либо человеко-машинном решении задач. Интеллектуальные системы накапливают как наиболее глубокие, специальные знания в предметной области (те самые, которые требуют высокого профессионализма от людей, работающих в предметной области), так и наиболее рутинные, “ технические” знания, не знание которых людьми являются причиной огромного числа ошибок и с которыми человеку трудно справиться. Последнее весьма характерно для параллельного программирования, в

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

Систему синтеза параллельных программ (ССПП) можно рассматривать как интеллектуальную систему, которая кроме знаний о предметной области, об алгоритмах предметной области, способна еще накапливать и применять знания о методах и средствах конструирования параллельных программ

336

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

Применение ССПП для интеллектуализации модульного программирования позволяет решить ряд проблем повторного использования программных моделей.

1.Неактивное использование модулей из библиотеки модулей (БМ) СМП. Обусловлено это в первую очередь большой трудоемкостью включения модуля в многомодульную программу, так как для этого надо знать спецификации входных и выходных переменных модуля, требуемые для его исполнения ресурсы, правила обращения к модулю. Нужно также знать особенности реализованного в модуле алгоритма, уметь оценивать ошибки округления и т.д. и т.п. Именно эти знания и надо ввести в ССПП.

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

всложности поиска нужного модуля, сколько в сложности обеспечении автоматической замены модуля в готовой ПП, если

вБМ появились лучшие модули либо при изменении в структуре мультикомпьютера. Например, при переносе ПП с одного

337

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]