Введение

Тип низкоуровневой компьютерной архитектуры

Архитектура потока данных – это компьютерная архитектура, основанная на потоке данных, которая принципиально отличается от традиционной архитектуры фон Неймана или архитектуры управления потоком. Архитектура потока данных концептуально не имеет счётчика команд: возможность и выполнение инструкций определяется исключительно наличием входных аргументов, необходимых для их выполнения, что затрудняет предсказание порядка выполнения инструкций. Хотя ни одна коммерчески успешная универсальная компьютерная система не использовала архитектуру потока данных, она успешно реализована в специализированном оборудовании, таком как цифровая обработка сигналов, сетевая маршрутизация, графическая обработка, телеметрия и, в последнее время, хранилища данных и искусственный интеллект (например, полиморфный вычислительный движок потока данных, управляемый структурой, планирование потока данных). Она также широко применяется в современных программных архитектурах, включая конструкции движков баз данных и платформы параллельных вычислений. Архитектура синхронного потока данных оптимизирована для рабочих нагрузок, характерных для приложений обработки данных в реальном времени, таких как высокоскоростная пересылка пакетов. Детерминированные архитектуры потока данных позволяют программистам эффективно управлять сложными задачами, такими как балансировка нагрузки процессора, синхронизация и доступ к общим ресурсам. При этом существует некоторая путаница в терминологии, поскольку термин "поток данных" также используется для обозначения области параллельного программирования – программирования потоком данных.

Статические и динамические машины для передачи данных

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

Компилятор

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

Программы

Программы загружаются в CAM динамического компьютера с потоковой обработкой данных. Когда все помеченные операнды инструкции становятся доступными (то есть, являются результатом предыдущих инструкций и/или пользовательского ввода), инструкция помечается как готовая к исполнению исполнительным устройством. Это называется активацией или запуском инструкции. После того, как инструкция выполнена исполнительным устройством, ее выходные данные отправляются (вместе с ее тегом) в CAM. Любые инструкции, зависящие от этих конкретных данных (определяемые по значению тега), затем помечаются как готовые к исполнению. Таким образом, последующие инструкции выполняются в правильном порядке, избегая состояния гонки. Этот порядок может отличаться от последовательного порядка, задуманного программистом, от запрограммированного порядка.

Инструкции

Инструкция вместе с необходимыми операндами данных передается в исполнительное устройство в виде пакета, также называемого токеном инструкции. Аналогично, выходные данные передаются обратно в CAM в виде токена данных. Пакетная передача инструкций и результатов обеспечивает параллельное выполнение готовых инструкций в широком масштабе. Сети потока данных доставляют токены инструкций в исполнительные устройства и возвращают токены данных в CAM. В отличие от традиционной архитектуры фон Неймана, токены данных не хранятся в памяти постоянно, а представляют собой временные сообщения, существующие только во время передачи в хранилище инструкций.