Принцип действия машин потоков данных
Машины потоков данных производят наиболее сильное впечатление тем, что принципы их проектирования не базируются на основных свойствах и характеристиках традиционных машин и языков программирования. В архитектуре машин потоков данных отсутствует понятие «пассивная память данных», а в языке потоков данных нет понятия «переменная»: данные перемещаются из команды в команду по мере выполнения программы.
Кроме того, в данном случае не используются понятия «передача управления», «счетчик команд» и «ветвление вычислительного процесса». Вместо этого команды (операторы) управляются данными. Считается, что команда готова к выполнению» (т. е. ее выполнение разрешено), если данные присутствуют в каждом из ее входных портов и отсутствуют в выходном порте. Выполнение команды приводит к исчезновению данных в ее входных портах и появлению результата в выходном порте. Программа представляет собой направленный граф, образованный соединенными между собой командами: выходной порт одной команды соединен с входным портом другой команды. Таким образом, порядок выполнения команды определяется не счетчиком команд, а движением потока данных в командах.
Указанные принципы выполнения команд иллюстрирует рис. 22.1. Здесь окружности обозначают команды, стрелки— линии связи между командами, а зачерненные круги—данные.
Первые три команды показаны в состоянии запрета на выполнение. У первой команды нет входных данных, у второй данные присутствуют не на всех входных линиях, а в третьей команде имеются данные—предыдущий результат—на выходной линии. Четвертая команда имеет все, что необходимо для получения разрешения на выполнение, т. е. готова к выполнению. Выполнение команды приводит к исчезновению данных с» входных линий и появлению результата на выходной линии.
На рис. 22.2 с помощью рассмотренных символических обозначений описывается решение квадратного уравнения. Возникает необходимость ввести два дополнительных понятия. Первым является размножитель, который представляет собой операцию с одним входом и несколькими выходами. Он готов к работе, когда на входной линии данные присутствуют, а выходные линии пусты. Его функции—распределять входные данные по всем выходным линиям. Размножитель обозначается небольшим зачерненным кругом. (Не путать с обозначением данных (рис. 22.1)!—Прим. перев.) Вторым новым понятием является бесконечный источник констант для команды. Например, после выполнения операции умножения 2 на А, константа 2 немедленно снова воссоздается на одной из входных линий.
Рис.22.1. Возможные состояния Рис.22.2. Алгоритм решения квадратного
команд в машине потоков данных. уравнения в машине потоков данных.
У читателя может возникнуть желание проследить путь перемещения данных по графу. (Отметим, что некоторые вопросы, такие, как порядок выполнения операций вычитания и деления, .здесь не рассматриваются.) Следует обратить внимание на то, что целый ряд операций может оказаться готовым к выполнению в один и тот же момент времени и, следовательно, возможно их параллельное выполнение. Схема рис. 22.2 иллюстрирует •тот принцип, что команды не запрашивают операнды традиционным способом, а указывают посредством соединительных линий, к каким командам направляются результаты их работы— их выходные линии. Таким образом, принципы построения графа потока данных во многом подобны принципам построения сетей Петри [3].
Граф потоков данных можно рассматривать и на более высоком уровне абстракции, или обобщения. Примером является схема, приведенная на рис. 22.3. Следовательно, и подлежащая решению задача, может быть представлена с различной степенью обобщения, например такой, когда граф потоков данных полностью заменен единственным оператором на графе более высокого уровня .
Рис.22.3. Обобщенное представление алгоритма решения квадратного уравнения.