Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учеб пособие по КР, СПО.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.72 Mб
Скачать

4 14 .2. Построение программ коммутации

Рассмотрим выражение

(4.1)

и соответствующую ему бесскобочную запись

(4.2)

Информационный граф G, соответствующий счету значения выражения (4.2), приведен на рис. 4.2. Его вершины, обозначенные символом операции, соответствуют элементарным операциям, к которым отнесем и счет значения квадратного корня.

В соответствии с индивидуальным заданием необходимо построить информационный граф. В качестве примера рассмотрим выражение (4.1), где a = 6, b = 8, c = 26, d = 7, e = 32, f = 90, g = 5, h=283, i = 1, j = 22, k = 298, l = 52, m = 64, тогда информационный граф G будет иметь вид (рис 4.3). Рядом с вершинами графа указаны промежуточные значения вычислений.

Р и с. 4.2. Информационный граф G

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

Рис. 4.3

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

Пусть n – количество вычислителей в системе. Тогда неизбеж­но многократное использование одного вычислителя при счете значения сложного выражения. Если не организовать очередь на вхо­де каждого вычислителя и не задать информацию, какому вычислителю и в какую очередь направлять результат после каждого выполнения операции, то коммутация вычислителей в соответст­вии с графом G станет невозможной.

Пусть каждый вычислитель Вi обладает буфером Бi, i=l, ..., n, состоящим из S адресуемых регистров для хранения назна­чаемых на вычислитель команд. Адреса регистров будем отожде­ствлять с номерами очереди использования данного вычислителя.

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

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

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

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

Пусть решающее поле содержит четыре вычислителя (рис. 4.4), где I – регистры буферов, – номер вычислителя, – номер очереди).

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

Отразим это условной за­писью:

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

Даная схема отражает порядок выполнения вычислений и на ее основе строится логика работы программы. Вместо четырех вычислителей обработка данных производится четырьмя тредами (прил. П3).

На основе схемы коммутации счета (см. рис. 4.4) и листинга программы (см. прил. П3) рассмотрим порядок вычисления выражения.

Первый тред – функция Thread1():

  1. Запуск треда.

  2. Сложение (a+b).

  3. Установка объекта события s12 в состояние "включено". Этого события ожидает второй тред для продолжения вычислений. Таким образом, осуществляется синхронизация работы тредов.

  4. Вычисление значения квадратного корня.

  5. Вычитание (l - m).

  6. Установка объекта события s13 в состояние "включено", так как результат вычислений первого треда ожидает третий тред.

Р и с. 4.4. Схема коммутации счета

  1. Ожидание результатов вычислений третьего и четвертого тредов.

  2. Вывод результата.

Переход с одного этапа вычислений на другой сопровождается выводом сообщения в ListBox. Аналогично работе первого треда осуществляется работа и остальных тредов.

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

Пусть программа коммутации (табл. 4.1) состоит из трехадресных командных слов, в которых указывается код операции , ад­реса А1 и А2 операндов, адрес результата А3. Каждый адрес мо­жет быть адресом ОПД или вычислителя (на что указывает тег). Тогда на основе анализа возможности выполнения первой опера­ции из каждой цепочки операций можно записать первые пять команд программы.

При выполнении этих команд решающим полем организуется вызов величин а и b на первый регистр I11 (см. рис. 4.4) вычислителя 1, величин с и d на регистр I21 и т. д. Величина m поступает на второй регистр I12 вы­числителя 1, так как все вычисли­тели один раз использованы. Рас­положение операндов в регистрах соответствует порядку, в котором указаны их имена или адреса выра­батывающих их вычислителей в команде.

Для продолжения процесса со­ставления программы коммутации предположим, что произошло вы­полнение первого яруса операций в графе G.

Таблица 4.1