Архитектура потока данных — это компьютерная архитектура , основанная на потоках данных , которая прямо контрастирует с традиционной архитектурой фон Неймана или архитектурой потока управления . В архитектурах потоков данных нет программного счетчика : исполняемость и выполнение инструкций определяются исключительно на основе наличия входных аргументов инструкций [1] , поэтому порядок выполнения инструкций может быть трудно предсказать.
Хотя ни одно коммерчески успешное компьютерное оборудование общего назначения не использовало архитектуру потока данных, она была успешно реализована в специализированном оборудовании, таком как цифровая обработка сигналов , сетевая маршрутизация , обработка графики , телеметрия , а в последнее время и в хранилищах данных и искусственном интеллекте (например , в системах хранения данных и искусственного интеллекта) . : полиморфный поток данных [2] Convolution Engine, [3] структурно-управляемый, [4] планирование потока данных [5] ). Сегодня это также очень актуально во многих архитектурах программного обеспечения, включая конструкции механизмов баз данных и структуры параллельных вычислений . [ нужна цитата ]
Архитектуры синхронных потоков данных настраиваются в соответствии с рабочей нагрузкой, создаваемой приложениями передачи данных в реальном времени, такими как пересылка пакетов со скоростью проводной сети. Архитектуры потоков данных, которые по своей природе являются детерминированными, позволяют программистам управлять сложными задачами, такими как балансировка нагрузки процессора, синхронизация и доступ к общим ресурсам. [6]
Между тем, возникает противоречие в терминологии, поскольку термин поток данных используется для обозначения подобласти параллельного программирования: для программирования потоков данных .
Архитектура аппаратного обеспечения для потоков данных была основной темой исследований компьютерной архитектуры в 1970-х и начале 1980-х годов. Джек Деннис из Массачусетского технологического института был пионером в области статических архитектур потоков данных, в то время как Manchester Dataflow Machine [7] и архитектура MIT Tagged Token были крупными проектами в области динамических потоков данных.
Однако исследование так и не решило проблем, связанных с:
Инструкции и зависимости от их данных оказались слишком детализированными для эффективного распространения в большой сети. То есть время прохождения инструкций и помеченных результатов через большую сеть соединений было больше, чем время выполнения множества вычислений.
Тем не менее, выполнение вне очереди (OOE) стало доминирующей парадигмой вычислений с 1990-х годов. Это форма ограниченного потока данных. Эта парадигма представила идею окна выполнения . Окно выполнения соответствует последовательному порядку архитектуры фон Неймана, однако внутри окна инструкции могут выполняться в порядке зависимости данных. Это достигается в процессорах, которые динамически помечают зависимости данных кода в окне выполнения. Логическая сложность динамического отслеживания зависимостей данных ограничивает процессоры OOE небольшим количеством исполнительных блоков (2–6) и ограничивает размеры окна выполнения диапазоном от 32 до 200 инструкций, что намного меньше, чем предполагалось для машин с полным потоком данных. . [ нужна цитата ]
Проекты, которые используют обычные адреса памяти в качестве тегов зависимостей данных, называются машинами статического потока данных. Эти машины не позволяли одновременно выполнять несколько экземпляров одних и тех же процедур, поскольку простые теги не могли различать их.
Проекты, в которых используется память с адресацией по содержимому (CAM), называются машинами с динамическими потоками данных. Они используют теги в памяти для облегчения параллелизма.
Обычно в архитектуре потока управления компиляторы анализируют исходный код программы на наличие зависимостей между данными между инструкциями, чтобы лучше организовать последовательность инструкций в двоичных выходных файлах. Инструкции организованы последовательно, но сама информация о зависимостях не записывается в двоичные файлы. Двоичные файлы, скомпилированные для машины потока данных, содержат эту информацию о зависимостях.
Компилятор потока данных записывает эти зависимости, создавая уникальные теги для каждой зависимости вместо использования имен переменных. Присвоив каждой зависимости уникальный тег, он позволяет независимым сегментам кода в двоичном файле выполняться не по порядку и параллельно. Компилятор обнаруживает циклы, операторы прерывания и различный синтаксис программного управления потоком данных.
Программы загружаются в CAM компьютера с динамическим потоком данных. Когда все помеченные операнды инструкции становятся доступными (то есть выходные данные предыдущих инструкций и/или пользовательский ввод), инструкция помечается исполнительным модулем как готовая к выполнению .
Это известно как активация или запуск инструкции. Как только инструкция завершается исполнительным устройством, ее выходные данные отправляются (вместе с тегом) в CAM. Любые инструкции, которые зависят от этого конкретного элемента данных (идентифицированного значением его тега), затем помечаются как готовые к выполнению. Таким образом, последующие инструкции выполняются в правильном порядке, избегая состояний гонки . Этот порядок может отличаться от последовательного порядка, предусмотренного программистом-человеком, от запрограммированного порядка.
Инструкция вместе с необходимыми операндами данных передается исполнительному устройству в виде пакета, также называемого маркером инструкции . Аналогично, выходные данные передаются обратно в CAM в виде токена данных . Пакетизация инструкций и результатов позволяет параллельно выполнять готовые инструкции в больших масштабах.
Сети потоков данных доставляют токены инструкций исполнительным устройствам и возвращают токены данных в CAM. В отличие от традиционной архитектуры фон Неймана , токены данных не хранятся в памяти постоянно, а представляют собой временные сообщения, которые существуют только при передаче в хранилище инструкций.