Выполнение любой операции складывается из нескольких последовательных этапов, каждый из которых может выполняться своим функциональным узлом. Это легко показать на операциях сложения и умножения. Выполнение деления мантисс (порядки вычитаются) чаще всего производятся с помощью вычитания из делимого делителя, сдвига влево полученного остатка, нового вычитания делителя из результата сдвига и т.д. В некоторых ВС находится обратная величина делителя с помощью аппроксимирующих полиномов. Затем делимое умножается на эту величину.
Пусть задана операция, выполнение которой разбито на n
последовательных этапов. Пусть ti — время выполнения i -го этапа.
При последовательном их выполнении операция выполняется за время$$t_\text{посл}=\sum_{i=1}^{n} t_{i}[c]
,$$
а быстродействие ЭВМ или одного процессора ВС, выполняющего только эту операцию, составит$$S_\text{посл} = \frac{1}{t_\text{посл}} = \frac{1}{\sum_{i=1}^{n}t_i} [\text{операций/с}]
.$$
Выберем tT = max ti}
и потребуем при разбиении на этапы, чтобы для
любого i = 1, ...,n выполнялось условие ti + t(i+1) mod n > tT. Т.е. чтобы никакие два последовательных этапа (включая конец и
новое начало операции) не могли быть выполнены за время одного такта.
Функциональные узлы, выполняющие последовательные этапы одной операции, целесообразно выстроить в единую конвейерную линию, где устройство, выполняющее некоторый этап, закончив его для операции над одним набором данных, переходило бы в следующем такте к выполнению этого же этапа той же операции для другого набора исходных данных.
Например, на рис. 3.1 представлен конвейер выполнения операции сложения.
(рис 3.1) Выполнение операции сложения на конвейере
Пусть реализуется поток команд одного процессора или существует доступ к этому устройству нескольких процессоров так, что в каждом такте возможно задание на выполнение сложения новой пары чисел. Тогда временная диаграмма работы конвейера может иметь вид, представленный на рис. 3.2.
(рис 3.2) Схема заполнения конвейера
Максимальное быстродействие процессора при полной загрузке конвейера составляет$$S_{\text{кон}} =\frac{1}{t_{T}}[\text{операций}/c].$$
Число n — n операций. Чем больше число уровней (станций), тем больший выигрыш в
быстродействии может быть получен.
В проекте МВК "Эльбрус-3" АЛУ его ЦП имеет конвейерные ИУ
сложения ( n=5 ), умножения ( n=5 ), деления ( n=8
для полусловного формата, — 32 разряда, n=16 для словного формата). Логические
операции также выполняются на конвейере с n=2.
Известна оценка$$\frac{n}{2} < \frac{S_{\text{кон}} }{S_{\text{посл}} } \le n,$$ т.е. выигрыш в быстродействии получается в $$\frac{n}{2} - n$$ раз.
Реальный выигрыш в быстродействии оказывается всегда меньше, чем указанный выше, поскольку:
Наряду с использованием конвейеров для обработки единичных (скалярных)
данных, используют так называемые
Для эффективности
В основе векторного конвейера лежит то же самое разбиение операции на уровни или этапы выполнения, но он дополняется средствами аппаратной поддержки, позволяющими по информации о векторах организовать последовательную загрузку конвейера элементами векторов, учитывая их длину.
Пусть необходимо выполнить операцию C = A x B,
т.е. cj = aj + bj, j = 1, ...,N.
Пусть на регистрах СОЗУ записаны вектора A и B.
Группа регистров отведена для результатов C. Для управления
этим процессом известны дескрипторы векторов DA ,DB ,DC, где $$D_{\alpha } = \{ a_{\alpha }, h_{\alpha }, N\}$$, $$\alpha = A,B,C,h_{\alpha }$$ — шаг
переадресации. Если загрузка векторов производится всегда в одни и те же
регистры АЛУ, то достаточно знать значение N. Может задаваться
маска M длиной N, состоящая из нулей и единиц. Каждый
элемент M соответствует элементу вектора-результата C. Если элемент mj = 1 (логическая переменная), то операция
получения cj производится, в противном случае соответствующие
элементы векторов пропускаются. Это применимо для альтернативного счёта в
соответствии со значением логических переменных.
Пусть операция умножения выполняется за три этапа. Тогда можно представить
временную диаграмму получения N результатов при предположении о
назначении функциональных устройств (рис. 3.3).
(рис 3.3) Умножение векторов на конвейере
В составе АЛУ может быть два и более конвейерных устройств,
специализированных каждое для выполнения некоторой операции. Тогда
возможно и эффективно D=Ax B+C.
(рис 3.4) "Зацепление" векторов
Здесь два конвейера образовали один, с n = nx + n+. Очередной результат
умножения немедленно направляется на конвейер сложения, куда параллельно
направляется необходимый сомножитель.
В вычислительной технике повсеместно используется такая структура данных, как стек. Его применение при выполнении арифметических и логических операций в арифметическо-логическом устройстве (АЛУ) позволяет реализовать безадресную систему команд, что, в свою очередь, дает возможность минимизировать число обращений к оперативной памяти, осуществить буферизацию при многоуровневой памяти, кодировать большое число команд в одном слове.
Рассмотрим механизмы обработки информации на стеке и формирования безадресных команд.
Прежде всего - об идее применения безадресных команд.
Рассматривая структуру команд, мы можем отметить, что практически команды бывают одно-, двух-, трехадресные. Трехадресная команда, как правило, по законченности соответствует одному оператору, т.к. отображает действие над двумя операндами и результат. Двухадресная команда — это такая команда, где один из адресов подразумевается (например, аккумулятор или сумматор), или результат направляется по одному из указанных адресов. То же касательно одноадресной команды: по числу адресов - число обращений к памяти, не считая считывания самой команды.
Возникает вопрос: можно ли отделить загрузку регистров сверхоперативного запоминающего устройства (СОЗУ) от собственно выполнения команды, сделать эту загрузку опережающей, выполнение команды производить только с использованием подразумеваемых адресов СОЗУ и при этом в целом минимизировать количество обращений к ОП? Ответ приводит к структуре безадресных команд и к выполнению операций на стеке.
Адреса памяти фигурируют только в командах
Значения выражений можно вычислять полностью безадресным способом.
Команда, состоящая только из кода операции, извлекает из стека один или два операнда, выполняет операцию и заносит результат в стек. На рис. 3.5 приведен пример преобразования стека при выполнении трех команд программы.
(рис 3.5) Выполнение команд на стеке
Например,
y := (k + (l - mn))(a - b) -> yklmn x - + ab - x :=
Последовательность символов в :=,
тогда это имя определяет запись из стека), а под знаками операций —
безадресные команды, содержащие только коды операций. Удобно ввести
команду вида Зп У — записи из стека по адресу У.
Тогда мы получим окончательный вид программы
klmn x - + ab - x Зп Y (3.1)
Не будем отображать УВС, интерпретируя стек магазинной памятью. Тогда схема выполнения данной программы сводится к представленной на рис. 3.6.
(рис 3.6) Выполнение программы на стеке
В многопроцессорном вычислительном комплексе "Эльбрус-2" используется динамическое распределение работ между исполнительными устройствами АЛУ. При этом успешно разрешается противоречие между безадресной системой команд, предполагающей их выполнение на стеке, и возможностью одновременной загрузки многих исполнительных устройств.
При ближайшем рассмотрении стек представляется сугубо последовательностной структурой. Работа со стеком, как через "узкое горло", производится с использованием его вершины, и в случае многофункциональных АЛУ (т.е. АЛУ, состоящих из набора нескольких специализированных по операциям исполнительных устройств) представляется проблематичной. Казалось бы, стек по самой своей природе не предназначен для распараллеливания. Однако это не так, что и было продемонстрировано в МВК "Эльбрус-2". Здесь мы обобщим данный опыт.
В ИУ АЛУ в основном выполняются двуместные операции. Для выполнения такой операции надо знать код операции, адреса двух операндов (как правило, — в СОЗУ) и адрес результата. Т.е. АЛУ в общем случае оперирует трехадресными командами вида $$\theta A_{1}A_{2}A_{3}$$.
Для эффективного использования многофункционального АЛУ надо в каждый момент иметь в рассмотрении большое число таких команд, чтобы на их основе производилась полная загрузка заданиями и параллельная работа всех ИУ.
Значит, надо иметь некоторый буфер команд АЛУ (рис. 3.7), в котором формируется и поддерживается в достаточном количестве множество команд данной структуры. Готовые к выполнению команды из этого буфера назначаются на ИУ. Буфер "снизу" пополняется устройством управления новыми командами взамен назначенных для выполнения.
(рис 3.7) Обработка буфера команд АЛУ
В ЦП МВК "Эльбрус-2" для загрузки 10 ИУ разной специализации просматривается до 30 команд.
Такой буфер и есть "окно просмотра", через которое проходят
исполнительные команды, сформированные на основе выполняемой программы, m —
максимальное число команд в "окне просмотра". Буфер может
заполняться УУ после базирования и индексации команд.
Выше говорилось, что стек максимально снижает число обращений к ОП. Кроме
того,
Значит, чтобы распараллелить выполнение программы на стеке, надо выполнить промежуточный перевод$$\fbox{программа в ПОЛИЗ} \to \fbox{поток команд через "окно просмотра"}$$ — динамически, в процессе выполнения программы. Т.е. от безадресной системы необходимо перейти к системе программирования, использующей адреса. Тогда команды будут иметь вид тех процедур, о которых говорилось выше.
Подобная общая схема работы АЛУ представлена на рис. 3.8.
(рис 3.8) Схема распараллеливания выполнения команд
Рассмотрим работу
Он обрабатывает два списка адресов регистров СОЗУ:
Ранее мы видели, что в программе
Пример.
$$\text{\boldmath{$k l \colorbox[gray]{0.8}{\boldmath$m n \times$} - + \colorbox[gray]{0.8}{\boldmath$a b -$} \times \text{\itshape\bfseries Зп } Y$}}$$ $$\begin{center} \tabcolsep=2pt \begin{tabular}{ccccc} \bf\itshape ПОЛИЗ \bf\itshape программа\\ \boldmath{$A:= (a+b):(m\times n)$} $\to$ \boldmath{$Aab+mn\times ::=$} $\to$ \boldmath{$ab+mn\times:3nA$} \end{tabular} \end{center}$$
В таблице 3.1 представлен перевод программы из безадресной системы команд в трехадресную.
Nk |
Адресный стек | Формируемые команды | ||||
|---|---|---|---|---|---|---|
| $$\theta$$ | A1 |
A2 |
A3 | |||
| 1 | r1,r2,r3,r4,r5,r6 |
Сч |
<a> |
r1 |
||
| 2 | r1 |
r2,r3,r4,r5,r6 |
Сч |
<b> |
r2 |
|
| 3 | r2,r1 |
r3,r4,r5,r6 |
+ |
r1 |
r2 |
r3 |
| 4 | r3 |
r4,r5,r6,r1,r2 |
Сч |
<m> |
r4 |
|
| 5 | r4,r3 |
r5,r6,r1,r2 |
Сч |
<n> |
r5 |
|
| 6 | r5,r4,r3 |
r6,r1,r2 |
x |
r4 |
r5 |
r6 |
| 7 | r6,r3 |
r1,r2,r4,r5 |
: | r3 |
r6 |
r1 |
| 8 | r1 |
r2,r4,r5,r3,r6 |
Зп |
r1 |
<A> |
|
Продемонстрируем общий подход при реализации
Пусть в буфере команд АЛУ, или в "окне просмотра", формируется поток трехадресных команд, как рассматривалось выше:
$$\{ \theta _{j}A_{j1}A_{j2}A_{j2}\}$$.
Очевидно, что одновременно или с перекрытием во времени могут выполняться такие две команды, каждая из которых не использует в качестве операнда результат выполнения другой. Если же команда меняет значение некоторой величины, то предшествующие команды в "окне просмотра" должны раньше выполнения данной команды успеть использовать предыдущее значение. При этом должна соблюдаться последовательность присваивания значений одной величине.
Пусть $$\alpha _{j}$$ — логическая переменная
(признак), соответствующая возможности назначения j -й команды для
выполнения. Тогда в процессе назначения команд на ИУ j -я команда
может быть назначена для выполнения в соответствии со значением истинности
следующих предикатов:$$\begin{gathered}
\alpha_1=1\\
\alpha_j=(A_{j1}\ne A_{13})\wedge(A_{j2}\ne A_{13})\wedge(A_{j1}\ne
A_{23})\wedge\\
\wedge (A_{j2}\ne A_{23})\wedge\ldots\wedge (A_{j1}\ne A_{j-1,3})
\wedge (A_{j2}\ne A_{j-1,3})\wedge \\
\wedge (A_{j3}\ne A_{11}) \wedge (A_{j3}\ne
A_{12})\wedge \ldots\wedge (A_{j3}\ne A_{j-1,1})\wedge\\
\wedge (A_{j3}\ne A_{j-1,2})
\wedge (A_{j3}\ne A_{j-1,3})\\
j=2,\ldots,m.
\end{gathered}$$
При наличии незанятых ИУ необходимой специализации или при наличии свободных регистров в буферах этих ИУ, команды с признаком $$\alpha _{j}=1$$ назначаются для выполнения. Так, в АЛУ процессора МВК "Эльбрус-2" каждое специализированное конвейерное ИУ имеет небольшой буфер, в которые записываются назначенные команды.
Назначенные команды снабжаются признаком назначения $$\beta _{j}$$ и не исключаются из "окна просмотра" до сигнала ИУ о завершении выполнения. Это необходимо для исключения преждевременного начала выполнения других команд, использующих результат данной.
Легко видеть, что в каждой из одновременно выполняющихся команд, на разных
ИУ, в данном случае используются адреса СОЗУ, которых нет ни в одной из
других команд. Т.е. одновременно работающие ИУ используют непересекающиеся
множества адресов. Это исключает конфликты обращения к регистрам СОЗУ,
ускоряет работу. В таком случае говорят, что ИУ
Пример. Пусть "окно просмотра" вместило в себя весь фрагмент ранее рассмотренной программы. АЛУ содержит необходимые устройства сложения, умножения и деления, а также два одновременно работающих канала обращения к ОП. Последовательное преобразование содержимого "окна просмотра" показано на рис. 3.9.
(рис 3.9) Распределение работ между исполнительными устройствами
Данный способ распределения команд, потребовавший промежуточного перевода безадресных команд в трехадресные, эффективен в случае многофункционального АЛУ. Универсальные исполнительные устройства, образующие АЛУ, — решающие поля, могут потребовать разработки других способов распределения работ.
Выполнение любой операции складывается из нескольких последовательных этапов, каждый из которых может выполняться своим функциональным узлом. Это легко показать на операциях сложения и умножения. Выполнение деления мантисс (порядки вычитаются) чаще всего производятся с помощью вычитания из делимого делителя, сдвига влево полученного остатка, нового вычитания делителя из результата сдвига и т.д. В некоторых ВС находится обратная величина делителя с помощью аппроксимирующих полиномов. Затем делимое умножается на эту величину.
Пусть задана операция, выполнение которой разбито на n
последовательных этапов. Пусть ti — время выполнения i -го этапа.
При последовательном их выполнении операция выполняется за время$$t_\text{посл}=\sum_{i=1}^{n} t_{i}[c]
,$$
а быстродействие ЭВМ или одного процессора ВС, выполняющего только эту операцию, составит$$S_\text{посл} = \frac{1}{t_\text{посл}} = \frac{1}{\sum_{i=1}^{n}t_i} [\text{операций/с}]
.$$
Выберем tT = max ti}
и потребуем при разбиении на этапы, чтобы для
любого i = 1, ...,n выполнялось условие ti + t(i+1) mod n > tT. Т.е. чтобы никакие два последовательных этапа (включая конец и
новое начало операции) не могли быть выполнены за время одного такта.
Функциональные узлы, выполняющие последовательные этапы одной операции, целесообразно выстроить в единую конвейерную линию, где устройство, выполняющее некоторый этап, закончив его для операции над одним набором данных, переходило бы в следующем такте к выполнению этого же этапа той же операции для другого набора исходных данных.
Например, на рис. 3.1 представлен конвейер выполнения операции сложения.
(рис 3.1) Выполнение операции сложения на конвейере
Пусть реализуется поток команд одного процессора или существует доступ к этому устройству нескольких процессоров так, что в каждом такте возможно задание на выполнение сложения новой пары чисел. Тогда временная диаграмма работы конвейера может иметь вид, представленный на рис. 3.2.
(рис 3.2) Схема заполнения конвейера
Максимальное быстродействие процессора при полной загрузке конвейера составляет$$S_{\text{кон}} =\frac{1}{t_{T}}[\text{операций}/c].$$
Число n — n операций. Чем больше число уровней (станций), тем больший выигрыш в
быстродействии может быть получен.
В проекте МВК "Эльбрус-3" АЛУ его ЦП имеет конвейерные ИУ
сложения ( n=5 ), умножения ( n=5 ), деления ( n=8
для полусловного формата, — 32 разряда, n=16 для словного формата). Логические
операции также выполняются на конвейере с n=2.
Известна оценка$$\frac{n}{2} < \frac{S_{\text{кон}} }{S_{\text{посл}} } \le n,$$ т.е. выигрыш в быстродействии получается в $$\frac{n}{2} - n$$ раз.
Реальный выигрыш в быстродействии оказывается всегда меньше, чем указанный выше, поскольку:
Наряду с использованием конвейеров для обработки единичных (скалярных)
данных, используют так называемые
Для эффективности
В основе векторного конвейера лежит то же самое разбиение операции на уровни или этапы выполнения, но он дополняется средствами аппаратной поддержки, позволяющими по информации о векторах организовать последовательную загрузку конвейера элементами векторов, учитывая их длину.
Пусть необходимо выполнить операцию C = A x B,
т.е. cj = aj + bj, j = 1, ...,N.
Пусть на регистрах СОЗУ записаны вектора A и B.
Группа регистров отведена для результатов C. Для управления
этим процессом известны дескрипторы векторов DA ,DB ,DC, где $$D_{\alpha } = \{ a_{\alpha }, h_{\alpha }, N\}$$, $$\alpha = A,B,C,h_{\alpha }$$ — шаг
переадресации. Если загрузка векторов производится всегда в одни и те же
регистры АЛУ, то достаточно знать значение N. Может задаваться
маска M длиной N, состоящая из нулей и единиц. Каждый
элемент M соответствует элементу вектора-результата C. Если элемент mj = 1 (логическая переменная), то операция
получения cj производится, в противном случае соответствующие
элементы векторов пропускаются. Это применимо для альтернативного счёта в
соответствии со значением логических переменных.
Пусть операция умножения выполняется за три этапа. Тогда можно представить
временную диаграмму получения N результатов при предположении о
назначении функциональных устройств (рис. 3.3).
(рис 3.3) Умножение векторов на конвейере
В составе АЛУ может быть два и более конвейерных устройств,
специализированных каждое для выполнения некоторой операции. Тогда
возможно и эффективно D=Ax B+C.
(рис 3.4) "Зацепление" векторов
Здесь два конвейера образовали один, с n = nx + n+. Очередной результат
умножения немедленно направляется на конвейер сложения, куда параллельно
направляется необходимый сомножитель.
В вычислительной технике повсеместно используется такая структура данных, как стек. Его применение при выполнении арифметических и логических операций в арифметическо-логическом устройстве (АЛУ) позволяет реализовать безадресную систему команд, что, в свою очередь, дает возможность минимизировать число обращений к оперативной памяти, осуществить буферизацию при многоуровневой памяти, кодировать большое число команд в одном слове.
Рассмотрим механизмы обработки информации на стеке и формирования безадресных команд.
Прежде всего - об идее применения безадресных команд.
Рассматривая структуру команд, мы можем отметить, что практически команды бывают одно-, двух-, трехадресные. Трехадресная команда, как правило, по законченности соответствует одному оператору, т.к. отображает действие над двумя операндами и результат. Двухадресная команда — это такая команда, где один из адресов подразумевается (например, аккумулятор или сумматор), или результат направляется по одному из указанных адресов. То же касательно одноадресной команды: по числу адресов - число обращений к памяти, не считая считывания самой команды.
Возникает вопрос: можно ли отделить загрузку регистров сверхоперативного запоминающего устройства (СОЗУ) от собственно выполнения команды, сделать эту загрузку опережающей, выполнение команды производить только с использованием подразумеваемых адресов СОЗУ и при этом в целом минимизировать количество обращений к ОП? Ответ приводит к структуре безадресных команд и к выполнению операций на стеке.
Адреса памяти фигурируют только в командах
Значения выражений можно вычислять полностью безадресным способом.
Команда, состоящая только из кода операции, извлекает из стека один или два операнда, выполняет операцию и заносит результат в стек. На рис. 3.5 приведен пример преобразования стека при выполнении трех команд программы.
(рис 3.5) Выполнение команд на стеке
Например,
y := (k + (l - mn))(a - b) -> yklmn x - + ab - x :=
Последовательность символов в :=,
тогда это имя определяет запись из стека), а под знаками операций —
безадресные команды, содержащие только коды операций. Удобно ввести
команду вида Зп У — записи из стека по адресу У.
Тогда мы получим окончательный вид программы
klmn x - + ab - x Зп Y (3.1)
Не будем отображать УВС, интерпретируя стек магазинной памятью. Тогда схема выполнения данной программы сводится к представленной на рис. 3.6.
(рис 3.6) Выполнение программы на стеке
В многопроцессорном вычислительном комплексе "Эльбрус-2" используется динамическое распределение работ между исполнительными устройствами АЛУ. При этом успешно разрешается противоречие между безадресной системой команд, предполагающей их выполнение на стеке, и возможностью одновременной загрузки многих исполнительных устройств.
При ближайшем рассмотрении стек представляется сугубо последовательностной структурой. Работа со стеком, как через "узкое горло", производится с использованием его вершины, и в случае многофункциональных АЛУ (т.е. АЛУ, состоящих из набора нескольких специализированных по операциям исполнительных устройств) представляется проблематичной. Казалось бы, стек по самой своей природе не предназначен для распараллеливания. Однако это не так, что и было продемонстрировано в МВК "Эльбрус-2". Здесь мы обобщим данный опыт.
В ИУ АЛУ в основном выполняются двуместные операции. Для выполнения такой операции надо знать код операции, адреса двух операндов (как правило, — в СОЗУ) и адрес результата. Т.е. АЛУ в общем случае оперирует трехадресными командами вида $$\theta A_{1}A_{2}A_{3}$$.
Для эффективного использования многофункционального АЛУ надо в каждый момент иметь в рассмотрении большое число таких команд, чтобы на их основе производилась полная загрузка заданиями и параллельная работа всех ИУ.
Значит, надо иметь некоторый буфер команд АЛУ (рис. 3.7), в котором формируется и поддерживается в достаточном количестве множество команд данной структуры. Готовые к выполнению команды из этого буфера назначаются на ИУ. Буфер "снизу" пополняется устройством управления новыми командами взамен назначенных для выполнения.
(рис 3.7) Обработка буфера команд АЛУ
В ЦП МВК "Эльбрус-2" для загрузки 10 ИУ разной специализации просматривается до 30 команд.
Такой буфер и есть "окно просмотра", через которое проходят
исполнительные команды, сформированные на основе выполняемой программы, m —
максимальное число команд в "окне просмотра". Буфер может
заполняться УУ после базирования и индексации команд.
Выше говорилось, что стек максимально снижает число обращений к ОП. Кроме
того,
Значит, чтобы распараллелить выполнение программы на стеке, надо выполнить промежуточный перевод$$\fbox{программа в ПОЛИЗ} \to \fbox{поток команд через "окно просмотра"}$$ — динамически, в процессе выполнения программы. Т.е. от безадресной системы необходимо перейти к системе программирования, использующей адреса. Тогда команды будут иметь вид тех процедур, о которых говорилось выше.
Подобная общая схема работы АЛУ представлена на рис. 3.8.
(рис 3.8) Схема распараллеливания выполнения команд
Рассмотрим работу
Он обрабатывает два списка адресов регистров СОЗУ:
Ранее мы видели, что в программе
Пример.
$$\text{\boldmath{$k l \colorbox[gray]{0.8}{\boldmath$m n \times$} - + \colorbox[gray]{0.8}{\boldmath$a b -$} \times \text{\itshape\bfseries Зп } Y$}}$$ $$\begin{center} \tabcolsep=2pt \begin{tabular}{ccccc} \bf\itshape ПОЛИЗ \bf\itshape программа\\ \boldmath{$A:= (a+b):(m\times n)$} $\to$ \boldmath{$Aab+mn\times ::=$} $\to$ \boldmath{$ab+mn\times:3nA$} \end{tabular} \end{center}$$
В таблице 3.1 представлен перевод программы из безадресной системы команд в трехадресную.
Nk |
Адресный стек | Формируемые команды | ||||
|---|---|---|---|---|---|---|
| $$\theta$$ | A1 |
A2 |
A3 | |||
| 1 | r1,r2,r3,r4,r5,r6 |
Сч |
<a> |
r1 |
||
| 2 | r1 |
r2,r3,r4,r5,r6 |
Сч |
<b> |
r2 |
|
| 3 | r2,r1 |
r3,r4,r5,r6 |
+ |
r1 |
r2 |
r3 |
| 4 | r3 |
r4,r5,r6,r1,r2 |
Сч |
<m> |
r4 |
|
| 5 | r4,r3 |
r5,r6,r1,r2 |
Сч |
<n> |
r5 |
|
| 6 | r5,r4,r3 |
r6,r1,r2 |
x |
r4 |
r5 |
r6 |
| 7 | r6,r3 |
r1,r2,r4,r5 |
: | r3 |
r6 |
r1 |
| 8 | r1 |
r2,r4,r5,r3,r6 |
Зп |
r1 |
<A> |
|
Продемонстрируем общий подход при реализации
Пусть в буфере команд АЛУ, или в "окне просмотра", формируется поток трехадресных команд, как рассматривалось выше:
$$\{ \theta _{j}A_{j1}A_{j2}A_{j2}\}$$.
Очевидно, что одновременно или с перекрытием во времени могут выполняться такие две команды, каждая из которых не использует в качестве операнда результат выполнения другой. Если же команда меняет значение некоторой величины, то предшествующие команды в "окне просмотра" должны раньше выполнения данной команды успеть использовать предыдущее значение. При этом должна соблюдаться последовательность присваивания значений одной величине.
Пусть $$\alpha _{j}$$ — логическая переменная
(признак), соответствующая возможности назначения j -й команды для
выполнения. Тогда в процессе назначения команд на ИУ j -я команда
может быть назначена для выполнения в соответствии со значением истинности
следующих предикатов:$$\begin{gathered}
\alpha_1=1\\
\alpha_j=(A_{j1}\ne A_{13})\wedge(A_{j2}\ne A_{13})\wedge(A_{j1}\ne
A_{23})\wedge\\
\wedge (A_{j2}\ne A_{23})\wedge\ldots\wedge (A_{j1}\ne A_{j-1,3})
\wedge (A_{j2}\ne A_{j-1,3})\wedge \\
\wedge (A_{j3}\ne A_{11}) \wedge (A_{j3}\ne
A_{12})\wedge \ldots\wedge (A_{j3}\ne A_{j-1,1})\wedge\\
\wedge (A_{j3}\ne A_{j-1,2})
\wedge (A_{j3}\ne A_{j-1,3})\\
j=2,\ldots,m.
\end{gathered}$$
При наличии незанятых ИУ необходимой специализации или при наличии свободных регистров в буферах этих ИУ, команды с признаком $$\alpha _{j}=1$$ назначаются для выполнения. Так, в АЛУ процессора МВК "Эльбрус-2" каждое специализированное конвейерное ИУ имеет небольшой буфер, в которые записываются назначенные команды.
Назначенные команды снабжаются признаком назначения $$\beta _{j}$$ и не исключаются из "окна просмотра" до сигнала ИУ о завершении выполнения. Это необходимо для исключения преждевременного начала выполнения других команд, использующих результат данной.
Легко видеть, что в каждой из одновременно выполняющихся команд, на разных
ИУ, в данном случае используются адреса СОЗУ, которых нет ни в одной из
других команд. Т.е. одновременно работающие ИУ используют непересекающиеся
множества адресов. Это исключает конфликты обращения к регистрам СОЗУ,
ускоряет работу. В таком случае говорят, что ИУ
Пример. Пусть "окно просмотра" вместило в себя весь фрагмент ранее рассмотренной программы. АЛУ содержит необходимые устройства сложения, умножения и деления, а также два одновременно работающих канала обращения к ОП. Последовательное преобразование содержимого "окна просмотра" показано на рис. 3.9.
(рис 3.9) Распределение работ между исполнительными устройствами
Данный способ распределения команд, потребовавший промежуточного перевода безадресных команд в трехадресные, эффективен в случае многофункционального АЛУ. Универсальные исполнительные устройства, образующие АЛУ, — решающие поля, могут потребовать разработки других способов распределения работ.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.