close

Явное выполнение графа данных

Перейти к навигации Перейти к поиску

Explicit Data Graph Execution или EDGE — это набор инструкций, который вместо использования традиционного подхода инструкций/регистров, типичного для RISC и CISC -архитектур , идет по новому пути. Процессоры на основе EDGE делят программы на базовые блоки, эти блоки представляют собой группы инструкций, которые работают с общими операндами и не имеют внутри себя условий перехода или других условий, останавливающих поток инструкций. Эти блоки распределяются внутри блоков, которые обрабатывают их самостоятельно, результаты передаются блокам, которым они нужны для продолжения обработки. Распределение блоков осуществляется динамически и такая философия выполнения позволяет разрабатывать программы, которым не нужно постоянно обращаться к регистрам для обмена данными между блоками, это устраняет узкое место, присутствующее в классических микропроцессорах. Этот тип процессора, разделяющий программу на независимые блоки, демонстрирует большую способность выполнять параллельный код.

Набор инструкций EDGE определяет серию инструкций для управления отдельными блоками, набор инструкций управляет кодированием данных внутри блока, чтобы уменьшить зависимости от данных (через предикативное выполнение ) и позволяет указать зависимости между блоками. Данные используются для определения потока управления инструкциями, данные определяют граф зависимостей, которым процессор должен удовлетворять во время выполнения. Отдельные инструкции, определенные с помощью EDGE, в среднем дороже, чем инструкции, определенные процессором RISC или CISC, но более высокая стоимость снижается за счет использования блоков среднего и большого размера (в реализации EDGE используются блоки из 1024 инструкций) и с возможностью использования много параллельных вычислительных единиц.

EDGE.png
На изображении показан фрагмент кода C (зеленый прямоугольник), соответствующий ассемблерный код (синий прямоугольник) и граф зависимостей, сгенерированный инструкциями EDGE (белый прямоугольник). Обратите внимание, что условный переход (IF) преобразуется в предикативные операторы (выделены пунктирными сегментами).

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

Связанные элементы

Внешние ссылки