stringtranslate.com

Анализ зависимостей

В теории компиляторов анализ зависимостей создает ограничения порядка выполнения между операторами/инструкциями. В общих чертах, оператор S2 зависит от S1 , если S1 должен быть выполнен до S2 . В общих чертах существует два класса зависимостей — зависимости управления и зависимости данных .

Анализ зависимостей определяет, безопасно ли переупорядочивать или распараллеливать операторы .

Зависимости управления

Зависимость управления — это ситуация, в которой инструкция программы выполняется, если предыдущая инструкция оценивается таким образом, что позволяет ее выполнение.

Оператор S2 является зависимым от управления S1 ( записывается ) тогда и только тогда, когда выполнение S2 условно защищено S1 . Управление S2 зависит от S1 тогда и только тогда, когда где находится граница пост-доминирования утверждения . Ниже приведен пример такой зависимости управления:

S1, если x > 2, перейти к L1S2 у := 3 S3 L1: z := y + 1

Здесь S2 выполняется только в том случае, если предикат в S1 ложен.

Зависимости данных

Зависимость данных возникает из-за двух операторов, которые обращаются к одному и тому же ресурсу или изменяют его.

Зависимость потока(True)

Оператор S2 является потокозависимым от S1 (записывается ) тогда и только тогда, когда S1 изменяет ресурс, который читает S2 , и S1 предшествует S2 в выполнении. Ниже приведен пример зависимости от потока (RAW: чтение после записи):

С1 х := 10S2 у := х + с

Антизависимость

Оператор S2 является антизависимым от S1 (записывается ) тогда и только тогда, когда S2 изменяет ресурс, который читает S1 , и S1 предшествует S2 в выполнении. Ниже приведен пример антизависимости (WAR: Write After Read):

S1 х := у + сS2 у := 10

Здесь S2 устанавливает значение, yа S1 считывает предыдущее значение y.

Выходная зависимость

Оператор S2 является выходным зависимым от S1 (записывается ) тогда и только тогда, когда S1 и S2 модифицируют один и тот же ресурс и S1 предшествует S2 в выполнении. Ниже приведен пример зависимости вывода (WAW: Write After Write):

С1 х := 10S2 х := 20

Здесь S2 и S1 устанавливают переменную x.

Входная зависимость

Оператор S2 является входным зависимым от S1 (записывается ) тогда и только тогда, когда S1 и S2 читают один и тот же ресурс и S1 предшествует S2 в выполнении. Ниже приведен пример входной зависимости (RAR: Read-After-Read):

S1 у := х + 3S2 г := х + 5

Здесь S2 и S1 оба обращаются к переменной x. Эта зависимость не запрещает переупорядочение.

Зависимости цикла

Проблема вычисления зависимостей внутри циклов, которая является важной и нетривиальной проблемой, решается с помощью анализа зависимостей цикла , который расширяет приведенную здесь структуру зависимостей.

Смотрите также

дальнейшее чтение