Size: a a a

2020 October 31

AP

Antony Polukhin in pro.cxx
Условные переходы не мешают процессору делать префетчинг и спекулятивное выполнение. Но процессор вынужден угадывать, по какой ветке пойдёт выполнение, а это не всегда получается
источник

I

Ioann_V in pro.cxx
Ну вообще да, имелось в виду, что безусловный переход - угадывается всегда, а условный - нет, и это ведет свои изджержки при неугадывании, в т.ч и кеш страдает и кеш инструкций, а не только Л1-3кеши.
источник

D

Dmitriy in pro.cxx
Ioann_V
Ну вообще да, имелось в виду, что безусловный переход - угадывается всегда, а условный - нет, и это ведет свои изджержки при неугадывании, в т.ч и кеш страдает и кеш инструкций, а не только Л1-3кеши.
А какое отношение к вопросу о влиянии goto на производительность имеют условные переходы?)
источник

I

Ioann_V in pro.cxx
Dmitriy
А какое отношение к вопросу о влиянии goto на производительность имеют условные переходы?)
ну просто готу это безусловный переход, как я понимаю и я его сравнил с условным, чисто для сравнения и объяснения какие механизмы задействуются и вовлекаются в процесс, а с чем еще сравнивать, говоря о перфомансе? с call?
источник

ПК

Паша Калугин... in pro.cxx
https://habr.com/ru/post/525964/
Достаточно интересная статья, по моему мнению
источник

IA

Ilia Abernikhin in pro.cxx
Частично офтоп, но все же к вопросу о условных переходах, в 20 стандарте были введены новые атрибуты, в том числе они коснулись условных переходов, по идеи теперь можно помечать ветки if как часто используемые или же наооборот редко используемые, и на основе этих данных компиляторы должны оптимизировать выполнение однако я не в курсе реализовано ли это уже в компиляторах, хотя бы в бета версии, сильно не слежу мне и 17 с головой пока хватает)😃😂
источник

EZ

Evgenii Zheltonozhsk... in pro.cxx
Ilia Abernikhin
Частично офтоп, но все же к вопросу о условных переходах, в 20 стандарте были введены новые атрибуты, в том числе они коснулись условных переходов, по идеи теперь можно помечать ветки if как часто используемые или же наооборот редко используемые, и на основе этих данных компиляторы должны оптимизировать выполнение однако я не в курсе реализовано ли это уже в компиляторах, хотя бы в бета версии, сильно не слежу мне и 17 с головой пока хватает)😃😂
Программист часто думает что он умнее компилятора и процессора, обычно это не так
источник

I

Ioann_V in pro.cxx
Процессоры - разные, под все не подстроиться. Каждому процессору - свой билд, так видимо.
источник

И

Иλьямбда in pro.cxx
Ilia Abernikhin
Частично офтоп, но все же к вопросу о условных переходах, в 20 стандарте были введены новые атрибуты, в том числе они коснулись условных переходов, по идеи теперь можно помечать ветки if как часто используемые или же наооборот редко используемые, и на основе этих данных компиляторы должны оптимизировать выполнение однако я не в курсе реализовано ли это уже в компиляторах, хотя бы в бета версии, сильно не слежу мне и 17 с головой пока хватает)😃😂
В компиляторах это уже давно поддерживается. Например, gcc уже давно предлагает использовать __glibc_unlikely и ему подобные вещи для этих целей
источник

I

Ioann_V in pro.cxx
Иλьямбда
В компиляторах это уже давно поддерживается. Например, gcc уже давно предлагает использовать __glibc_unlikely и ему подобные вещи для этих целей
ну это же экстеншн, все же... А так gcc еще поддерживает и тернарку без true параметра и много чего
источник

И

Иλьямбда in pro.cxx
А, или вопрос был про поддержку стандартных стредств языка, а не компиляторозависимых расширений? Тогда прошу прощения
источник

IA

Ilia Abernikhin in pro.cxx
Evgenii Zheltonozhskii🇮🇱
Программист часто думает что он умнее компилятора и процессора, обычно это не так
И не подумаю спорить, однозначно так тут и говорить не о чем, но как по мне это имеет смысл существует ситуации когда определенные логические ветки ичпользуються ну уж крайне редко, вот если говорить о реальном коде то есть как минимум одно место в моем коде сейчас где я бы это приминил, я занимаюсь 3d печатью, и одна из задач которую стоит оптимизировать это разрезать треугольник на слои, так вот почти всегда в разрезе 2 точки, но существуют крайне редкие случаи когда слой попадает на вершину треугольника, и есть отдельная ветка которая описывает поведение в этом случае, она за сесию может и не вызваться не разу или вызоветься 5-6 раз против милионов вызовов когда в разрезе 2 точки, в таком случае, то почему бы и не пометить ветку как редко используемую и не дать компилятору возможность ее оптимизировать, хотя откровенно говоря для меня загадка в чем заключаетьсч оптимизация, и в чем это дает выигрыш)
источник

EZ

Evgenii Zheltonozhsk... in pro.cxx
Ilia Abernikhin
И не подумаю спорить, однозначно так тут и говорить не о чем, но как по мне это имеет смысл существует ситуации когда определенные логические ветки ичпользуються ну уж крайне редко, вот если говорить о реальном коде то есть как минимум одно место в моем коде сейчас где я бы это приминил, я занимаюсь 3d печатью, и одна из задач которую стоит оптимизировать это разрезать треугольник на слои, так вот почти всегда в разрезе 2 точки, но существуют крайне редкие случаи когда слой попадает на вершину треугольника, и есть отдельная ветка которая описывает поведение в этом случае, она за сесию может и не вызваться не разу или вызоветься 5-6 раз против милионов вызовов когда в разрезе 2 точки, в таком случае, то почему бы и не пометить ветку как редко используемую и не дать компилятору возможность ее оптимизировать, хотя откровенно говоря для меня загадка в чем заключаетьсч оптимизация, и в чем это дает выигрыш)
Ну branch predictor должен с такой штукой практически идеально справляться
источник

IA

Ilia Abernikhin in pro.cxx
Иλьямбда
А, или вопрос был про поддержку стандартных стредств языка, а не компиляторозависимых расширений? Тогда прошу прощения
Да вроде того, тоесть теоретически это введено теперьв стандарт (с 20 года) и поддерживаеться всеми компиляторами в равной мере)
источник

IA

Ilia Abernikhin in pro.cxx
Evgenii Zheltonozhskii🇮🇱
Ну branch predictor должен с такой штукой практически идеально справляться
Возможно
источник

IA

Ilia Abernikhin in pro.cxx
Только я все равно совершенно не понимаю на основе чего он делает вывод какая ветка более используема
источник

EZ

Evgenii Zheltonozhsk... in pro.cxx
Ilia Abernikhin
Только я все равно совершенно не понимаю на основе чего он делает вывод какая ветка более используема
Кто, бранч предиктор? На основании истории
источник

CD

Constantine Drozdov in pro.cxx
Evgenii Zheltonozhskii🇮🇱
Кто, бранч предиктор? На основании истории
Это если его из-за очередного мелтдауна не выключили
источник

EZ

Evgenii Zheltonozhsk... in pro.cxx
Constantine Drozdov
Это если его из-за очередного мелтдауна не выключили
Нууу
источник

I

Ioann_V in pro.cxx
Constantine Drozdov
Это если его из-за очередного мелтдауна не выключили
мелтдаун позволял читать память чужого процесса, не думаю, что тут надо выключать предиктор. Скорее как то кеши синхронизировать по доступу - но никто бренч предиктор не выключал, это точно. Бренч миспридикшн это дорого - если есть возможность обойтись без перехода условного, лучше обойтись без него., скажем умножать на ноль или единицу.
источник