Перейти к потоку
Эта статья нуждается в дополнительных цитатах для проверки . ( декабрь 2009 г. ) |
В технике вычислительной переход к потокам — это оптимизация компилятором одного перехода непосредственно ко второму. Если второе условие является подмножеством или обратным первому, его можно устранить или пропустить через первый переход. [1] Это легко сделать за один проход по программе, выполняя ациклические цепочки переходов, пока компилятор не достигнет фиксированной точки.
Преимущества
[ редактировать ]Основным преимуществом использования потоков переходов является уменьшение количества динамически выполняемых переходов. Это открывает возможности для дальнейшей оптимизации, поскольку количество условных операторов уменьшается, что повышает производительность. В среднем можно ожидать, что 2-3 инструкции будут пропущены в результате успешного удаления времени выполнения ветки . [2]
Примеры
[ редактировать ]Следующий псевдокод демонстрирует, когда переход может быть многопоточным.
10. а = SomeNumber(); 20. ЕСЛИ a > 10, ПЕРЕХОДИТЕ К 50. ... 50. ЕСЛИ a > 0, ПЕРЕХОДИТЕ К 100. ...
Прыжок на строке 50 всегда будет выполнен, если выполнен прыжок на строке 20. Следовательно, пока строка 100 находится в пределах досягаемости прыжка (или размер прыжка не имеет значения), переход по строке 20 можно безопасно модифицировать для перехода непосредственно к строке 100.
Другой пример показывает переходную обработку двух условий частичного перекрытия:
void baz ( bool x , bool y , bool z ) { if ( x && y ) bar (); если ( y || z ) foo (); }
Вышеуказанное можно преобразовать в:
void baz ( bool x , bool y , bool z ) { if ( x && y ) { bar (); перейти к JMP ; } if ( y || z ) { jmp : foo (); } }
Если первая ветвь взята, x
и y
оба истинны ( логическое соединение ), следовательно, оценка выражения y || z
не нужен ( логическая дизъюнкция ). Поэтому переход к метке jmp
выполняется. [2]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Параметры оптимизации — использование коллекции компиляторов GNU (GCC)» .
- ^ Jump up to: а б «Нежное введение в оптимизацию переходных потоков | Red Hat Developer» . Developers.redhat.com . Проверено 8 января 2023 г.