Московский государственный университет путей сообщения
Опубликован: 22.12.2006 | Доступ: свободный | Студентов: 2438 / 569 | Оценка: 4.07 / 4.02 | Длительность: 16:07:00
ISBN: 978-5-9556-0071-0
Специальности: Разработчик аппаратуры
Лекция 4:

Параллельная обработка стека и статическое распараллеливание в решающем поле

< Лекция 3 || Лекция 4: 123 || Лекция 5 >

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

Таблица 4.1.
Такты (шаги) Номер 0 занятого ПЭ (стека) 1 2 3 4 5 6
1
a
2
e 
a 
Ссылка 1
a
3
f 
e 
a 
Ссылка 1
l
a 
Ссылка 2
c
4
f 
e 
a 
Ссылка 1 
:+Зп у
l 
a 
Ссылка 2
x
c
Ссылка 3
l
5
e:f 
a 
Ссылка 1
+Зп у
ax l 
Ссылка 2
c 
Ссылка 3
<=
g  
l 
Ссылка 4
A
6
a+e:f 
Ссылка 1
Зп у
c 
ax l 
Ссылка 3
<=
h
g 
l
Ссылка 4
A 
Нет ссылки
x
A
7
a+e:f 
Ссылка 1
Зп у
Операция:
ax l <= c 
Ссылка 3,6
h
g
l
Ссылка 4,5
x <
A
Нет ссылки
x
1
A
Нет ссылки
c
8
a+e:f 
Ссылка 1
Зп у
Пусть
ax l=c
Ссылка 3
gx h
l
Ссылка 4,5
<
A
Нет ссылки
x
1
A
Нет ссылки
+x
c 
Нет ссылки
9
a+e:f 
Ссылка 3
Зп у
Операция:
l < gx h 
Ссылка 4,5
A 
Нет ссылки
x
A+l
Нет ссылки
x
10
a+e:f
Ссылка 3
Зп у
Пусть
l > gx h
Ссылка 5
A+l
Нет ссылки
x
11
a+e:f
Ссылка 3
Зп у
A+l
Нет ссылки
x
12
A+l
a+e:f
Нет ссылки
x Зп у

Рассмотрим работу системы по шагам (тактам), для упрощения предполагая, что каждая операция выполняется за один такт.

В первом такте процессор, анализируя программу символ за символом, начинает анализ первой цепочки имен. Из вычислительного ресурса назначается ПЭ 0, и он начинает формирование адресного стека в своем локальном СОЗУ.

Во втором такте, "запустив" формирование первой цепочки, процессор находит вторую цепочку имен. За ней закрепляется ПЭ 1. Т.к. определилось место обработки этой, правой для предыдущей цепочки имен, цепочки, то процессорному элементу 0 сообщается ссылка на свой правый подстекСсылка 1. В этом же такте в адресный стек ПЭ 0 загружается адрес e. Однако процессор зафиксировал тот факт, что он при анализе программы вошел в оператор if-then-else на первом лексикографическом уровне.

В третьем такте ПЭ 0 загружает в свой стек адрес f, ПЭ 1 загружает адрес l, а процессор находит следующую цепочку, за которой закрепляет ПЭ 2. Ссылку на этот процессорный элемент он сообщает ПЭ 1, а ПЭ 2 загружает в свой стек единственный адрес c.

В четвертом такте ПЭ 0 загружает в свой стек цепочку операций. Такие же действия выполняет и ПЭ 1. За первой цепочкой имен оператора then закрепляется ПЭ 3. Тогда ПЭ 2 получает ссылку пока только на этот процессорный элемент, на котором находится один из его правых подстеков. ПЭ 3 загружает адрес l в свой адресный стек. Однако процессор фиксирует тот факт, что он вновь входит в оператор if-then-else на втором лексикографическом уровне.

В пятом такте процессор анализирует оператор then. За первой (единственной) его цепочкой имен закрепляется ПЭ 4. Он загружает в свой адресный стек адрес А. ПЭ 3 загружает в свой стек адрес g и получает ссылку на ПЭ 4. ПЭ 0 и ПЭ 1 выполняют операции из своих цепочек операций. ПЭ 2 находится в состоянии ожидания.

В шестом такте процессор приступает к анализу первой цепочки имен оператора else на втором лексикографическом уровне. За этой цепочкой имен закрепляется процессорный элемент 5, который загружает в свой адресный стек адрес А. При этом ПЭ 4 не только не получает ссылки на правый подстек, но и получает подтверждение об отсутствии такой ссылки. Это необходимо, т.к. значение А является одним из альтернативных значений арифметического выражения. ПЭ 0 продолжает счет. Т.к. в пятом такте на стеке ПЭ 1 выполнение всех возможных операций закончилось, а ПЭ 2 пребывал в ожидании именно этого, то в соответствии со своей ссылкой ПЭ 1 переводит адресный стек ПЭ 2 в вершину своего адресного стека. Свою ссылку он заменяет ссылкой ПЭ 2. Оттуда же он берет цепочку операций. (В общем случае он спереди дополняет свою цепочку операций.) ПЭ 2 освобождается, т.е. переводится в общий ресурс системы. ПЭ 3 загружает в свой адресный стек адрес h. ПЭ 4 загружает цепочку операций, формируя тем самым не полностью вырожденный подстек.

В седьмом такте процессор закончил анализ оператора else на втором лексикографическом уровне и приступает к анализу оператора else на первом лексикографическом уровне. За цепочкой имен этого оператора закрепляется ПЭ 6. В его адресный стек загружается адрес с. ПЭ 5 загружает в свой адресный стек адрес l. Т.к. на его подстеке считается другое альтернативное значение арифметического выражения, то подтверждается отсутствие ссылки на правый подстек. Т.к. на двух лексикографических уровнях определились подстеки, на которых выполняются операторы else, то определились и вторые ссылки в ПЭ 1 и ПЭ 3. ПЭ 3 вводит цепочку операций.

Пусть при выполнении процессорным элементом 1 операции отношения в восьмом такте оказалось справедливым равенство. Тогда результат счета значения арифметического оператора определяется результатом выполнения оператора then на первом лексикографическом уровне. Т.е. ссылка на два альтернативных оператора должна определиться в соответствии с выбором, — на ПЭ 3. Это и производится в данном такте. Однако в этом же такте ПЭ 6 еще продолжает формирование информации для счета; ему процессор сообщает об отсутствии ссылки на правый подстек, т.к. это единственный подстек счета альтернативного оператора else на первом лексикографическом уровне. ПЭ 5 загружает себе цепочку операций.

Т.к. адресный стек ПЭ 1 стал полностью вырожденным, то ожидающий его левый подстек — в ПЭ 1 в девятом такте переводит его к себе, точнее, то, что от него осталось, ссылку на ПЭ 3. ПЭ 2 освобождается и переходит в ресурс системы. Теперь в ресурс системы переводится и ПЭ 6.

ПЭ 3 выполняет операцию отношения. ПЭ 4 находится в состоянии ожидания, а ПЭ 5 выполняет очередную операцию из своей цепочки операций.

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

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

В двенадцатом такте полностью определилось завершение счета процессорным элементом 0.

Рассмотренная на принципиальном уровне схема распределения работ в решающем поле ВС содержит ряд направлений развития, устраняющих ее недостатки.

Ее главным недостатком является привязанность к способу формирования польской инверсной записи выражений. Размножение "маленьких" параллельных стеков (подстеков) в системе, кроме привлечения излишне большого числа процессорных элементов к счету, с очевидностью увеличивает накладные расходы на управление их работой. Хотелось бы иметь больше возможностей управления детализацией распределяемых работ. Следовательно, программа должна быть предварительно оптимизирована.

На пути оптимизации программы на ПОЛИЗ, т.е. в безадресных командах, видны два уровня.

Первый из них предполагает "укрупнение" стеков на основе алгебры их преобразований.

Так, в нашем примере явно просматривается целесообразность замены

al x c <= -> cal x >.

Эта замена позволяет использовать один стек вместо двух.

В первом примере мы упомянули очевидную замену

gh x i x -> ghi x x.

Она также исключает излишнее "измельчение" работ.

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

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

Например, программа счета значения арифметического выражения с условиями, которую мы рассматривали выше, может после оптимизации иметь вид

\text{\boldmath{\begin{gathered}
aef:+\underline{if}(al\times c\le)\;\underline{then}\;\underline{if}\;
lgh\times\gt\underline{then}A\times\\
\underline{else}\; Al+\times\underline{else}\;
ch16+\times\times\underline{\text\itshape 3пY}
\end{gathered}}}.
Здесь выделена конструкция в таких операторных скобках.

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

< Лекция 3 || Лекция 4: 123 || Лекция 5 >