хех, только недавно на эту тему видео попалось
Интересно, спасибо
Я ничего не понял
Процессор заранее подгружает в память инструкции, которые будет исполнять, чтобы не простаивать зря, потому что сама загрузка тоже требует времени.
Если в коде есть условие "if condition is true then do A else do B", то непонятно, что подгружать - инструкции из ветки А или В. Тогда помогает предсказатель переходов -гном-медиум модуль процессора, считающий количество исполнений каждой ветки во время исполнения программы. В итоге, если есть условие, то загружается ветка, в которую ранее было больше переходов.
Но предсказатель все равно ошибается. В видео рассказывается, как можно схлопнуть две ветки в одну, чтобы предсказатель был вообще не нужен. В примере "if condition then A else B" condition можно представить как числовое значение, 1 - true, 0 - false. Тогда его можно переписать примерно как "condition * A + not(condition) * B". Оператор not(...) меняет 1 на 0 и наоборот.
Если в коде есть условие "if condition is true then do A else do B", то непонятно, что подгружать - инструкции из ветки А или В. Тогда помогает предсказатель переходов -
Но предсказатель все равно ошибается. В видео рассказывается, как можно схлопнуть две ветки в одну, чтобы предсказатель был вообще не нужен. В примере "if condition then A else B" condition можно представить как числовое значение, 1 - true, 0 - false. Тогда его можно переписать примерно как "condition * A + not(condition) * B". Оператор not(...) меняет 1 на 0 и наоборот.
И тогда вычисляются оба. И если это трудно-вычислимые операции, то нахуй это надо? Сохранишь 51 нс, но потратитшь 50-100мс на лишнее вычисление.
Это не говоря уже о читаемости кода.
Это не говоря уже о читаемости кода.
Хотя, какая нафиг читаемость кода в ассемблере....
Ты не проверишь, но говнокодить можно даже в ассемблере
А вот для этого и нужен программист, который заранее знает, тяжелая операция, или нет.
Ну, будем четсны, прогеры, которые не оценивают время выполнения операции не будут заморачиваться с Branchless programming.
У Prescott с этим туго было
Когда в процессорах интел нашли уязвимость связанную с предсказанием инструкций:
"Этот патч будет стоить нам 20% производительности".
"Этот патч будет стоить нам 20% производительности".
Чтобы написать коммент, необходимо залогиниться