stringtranslate.com

Перейти к потоку

В вычислительной технике потоковое выполнение прыжков — это оптимизация компилятора одного прыжка напрямую во второй прыжок. Если второе условие является подмножеством или обратным первому , его можно исключить или пропустить через первый прыжок. [1] Это легко сделать за один проход по программе, следуя ациклическим цепочечным прыжкам, пока компилятор не придет к фиксированной точке.

Преимущества

Основное преимущество потоковой передачи — сокращение количества динамически выполняемых переходов. Это открывает путь для дальнейшей оптимизации, поскольку уменьшается количество условных операторов, что повышает производительность. В среднем можно ожидать, что в результате успешного удаления ветви выполнения будет пропущено 2-3 инструкции . [ 2 ]

Примеры

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

 10. a = SomeNumber(); 20. ЕСЛИ а > 10 ПЕРЕЙТИ К 50 ... 50. ЕСЛИ а > 0 ПЕРЕЙТИ К 100 ...

Переход на строку 50 всегда будет выполнен, если выполнен переход на строку 20. Поэтому, пока строка 100 находится в пределах достижимого диапазона перехода (или размер перехода не имеет значения), переход на строку 20 можно безопасно модифицировать для перехода непосредственно на строку 100.

Другой пример демонстрирует поточную передачу двух условий частичного перекрытия:

void baz ( bool x , bool y , bool z ) {        если ( х && у )    бар (); если ( у || z )    фу ();}

Вышеизложенное можно преобразовать в:

void baz ( bool x , bool y , bool z ) {        если ( х && у ) {     бар (); перейти к jmp ;  } если ( у || z ) {    прп : фу (); }}

Если взята первая ветвь, xи yобе истинны ( логическая конъюнкция ), то оценка выражения y || z не требуется ( логическая дизъюнкция ). Поэтому выполняется переход к метке . [2]jmp

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

Ссылки

  1. ^ «Оптимизация параметров — использование коллекции компиляторов GNU (GCC)».
  2. ^ ab "Небольшое введение в оптимизацию потоковой передачи | Red Hat Developer". developers.redhat.com . 2019-03-13 . Получено 2023-01-08 .