Полный текст
Всегда ли branchless-код даёт прирост скорости?Кажется логичным: убираем ветвления — избавляемся от промахов предсказателя. Для структур, целиком влезающих в L1-кэш, этот алгоритм работает безотказно.Но всё ломается, когда массивы выпадают в L3 или RAM. Обычный if заставляет процессор спекулятивно исполнять код и заранее вытягивать нужные кэш-линии. Безветвистый подход лишает CPU этой возможности, перенося ожидание данных прямо в критический путь. В итоге устранение точек неопределённости провоцирует серьёзную деградацию производительности.