Jump to content

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

В технике вычислительной переход к потокам — это оптимизация компилятором одного перехода непосредственно ко второму. Если второе условие является подмножеством или обратным первому, его можно устранить или пропустить через первый переход. [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]

См. также

[ редактировать ]
  1. ^ «Параметры оптимизации — использование коллекции компиляторов GNU (GCC)» .
  2. ^ Jump up to: а б «Нежное введение в оптимизацию переходных потоков | Red Hat Developer» . Developers.redhat.com . Проверено 8 января 2023 г.


Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 54b445fc2e9468d449e174cd6907a98b__1698915780
URL1:https://arc.ask3.ru/arc/aa/54/8b/54b445fc2e9468d449e174cd6907a98b.html
Заголовок, (Title) документа по адресу, URL1:
Jump threading - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)