Jump to content

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

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

Описание [ править ]

Предполагаемое заявление и , зависит от если:

где:

  • это набор ячеек памяти, считываемых ,
  • это набор ячеек памяти, записанный , и
  • существует возможный путь выполнения во время выполнения от к .

Это состояние называется условием Бернштейна, названным А. Дж. Бернштейном.

Существуют три случая:

  • Антизависимость: , и читает что-то раньше перезаписывает его
  • Зависимость потока (данных): , и пишет перед тем, как что-то прочитает
  • Выходная зависимость: , и оба записывают одно и то же место памяти.

Типы [ править ]

Истинная зависимость (чтение после записи) [ править ]

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

1. A = 3
2. B = A
3. C = B

Инструкция 3 действительно зависит от инструкции 2, поскольку окончательное значение C зависит от обновления инструкции B. Инструкция 2 действительно зависит от инструкции 1, поскольку окончательное значение B зависит от обновления инструкции A. Поскольку инструкция 3 действительно зависит если инструкция 2 и инструкция 2 действительно зависят от инструкции 1, то инструкция 3 также действительно зависит от инструкции 1. Поэтому параллелизм на уровне инструкций в этом примере невозможен. [1]

Антизависимость (запись после чтения) [ править ]

Антизависимость возникает, когда инструкция требует значения, которое позже обновляется. Нарушение антизависимости приводит к опасности записи после чтения (WAR) .

В следующем примере инструкция 2 антизависима от инструкции 3 — порядок этих инструкций нельзя изменить, и они не могут выполняться параллельно (возможно, изменение порядка инструкций), так как это повлияет на конечное значение A.

1. B = 3
2. A = B + 1
3. B = 7

Пример:

 MUL R3,R1,R2
 ADD R2,R5,R6

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

Антизависимость является примером зависимости имени . То есть переименование переменных может удалить зависимость, как в следующем примере:

1. B = 3
N. B2 = B
2. A = B2 + 1
3. B = 7

Новая переменная B2 была объявлена ​​как копия B в новой инструкции N. Антизависимость между 2 и 3 была удалена, а это означает, что теперь эти инструкции могут выполняться параллельно. Однако эта модификация ввела новую зависимость: инструкция 2 теперь действительно зависит от инструкции N, которая действительно зависит от инструкции 1. Поскольку эти новые зависимости являются зависимостями потока, эти новые зависимости невозможно безопасно удалить. [1]

Зависимость вывода (запись после записи) [ править ]

Зависимость вывода возникает, когда порядок инструкций влияет на окончательное выходное значение переменной. Нарушение зависимости вывода приводит к опасности записи после записи (WAW) .

В приведенном ниже примере существует зависимость вывода между инструкциями 3 и 1 — изменение порядка инструкций в этом примере приведет к изменению конечного значения A, поэтому эти инструкции не могут выполняться параллельно.

1. B = 3
2. A = B + 1
3. B = 7

Как и в случае с антизависимостями, выходные зависимости — это зависимости по именам . То есть их можно удалить путем переименования переменных, как в приведенной ниже модификации приведенного выше примера:

1. B2 = 3
2. A = B2 + 1
3. B = 7

Последствия [ править ]

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

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

в вычислениях Актуальность

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

Конструкция процессора [ править ]

Конструкция компилятора [ править ]

Зависимости данных актуальны для различных оптимизаций компилятора , например

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

См. также [ править ]

Ссылки [ править ]

  1. Перейти обратно: Перейти обратно: а б Джон Л. Хеннесси ; Дэвид А. Паттерсон (2003). Компьютерная архитектура: количественный подход (3-е изд.) . Морган Кауфманн . ISBN  1-55860-724-2 . {{cite book}}: CS1 maint: несколько имен: список авторов ( ссылка )
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 696cb27a47a4e0b317771c7bf0c18a06__1709474280
URL1:https://arc.ask3.ru/arc/aa/69/06/696cb27a47a4e0b317771c7bf0c18a06.html
Заголовок, (Title) документа по адресу, URL1:
Data dependency - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)