stringtranslate.com

тест Баннерджи

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

Это значит, что единственное, что может гарантировать тест — это отсутствие зависимости.

Общая форма

Для цикла вида:

для ( i = 0 ; i < n ; i ++ ) { c [ f ( i )] = a [ i ] + b [ i ]; /* оператор s1 */ d [ i ] = c [ g ( i )] + e [ i ]; /* оператор s2 */ }               

Истинная зависимость существует между утверждением s1 и утверждением s2 тогда и только тогда, когда:

Антизависимость существует между утверждением s1 и утверждением s2 тогда и только тогда, когда:

Для цикла вида:

для ( i = 0 ; i < n ; i ++ ) { c [ i ] = a [ g ( i )] + b [ i ]; /* оператор s1 */ a [ f ( i )] = d [ i ] + e [ i ]; /* оператор s2 */ }               

Истинная зависимость существует между утверждением s1 и утверждением s2 тогда и только тогда, когда:

Пример

Ниже приведен пример теста Баннерджи.

Цикл, который необходимо проверить на зависимость, выглядит следующим образом:

для ( i = 0 ; i < 10 ; i ++ ) { c [ i + 9 ] = a [ i ] + b [ i ]; /*утверждение s1*/ d [ i ] = c [ i ] + e [ i ]; /*утверждение s2*/ }               

Позволять

Итак, поэтому,

и

Тестирование на антизависимость

Затем

что дает

Теперь границы следующие :

Очевидно, что -9 выходит за рамки, поэтому антизависимость нарушена.

Тестирование на истинную зависимость

Что дает:

Теперь границы следующие :

Очевидно, что -9 находится внутри границ, поэтому истинная зависимость не нарушена.

Заключение

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

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

Таким образом, цикл можно распараллелить, но операторы должны выполняться в порядке их (потенциальной) истинной зависимости.


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

Ссылки