Комментарии 8
https://yarchive.net/comp/linux/cmov.html
Линус называл инструкцию CMOV "a piece of CRAP". Интересно, с тех пор что-то изменилось?
Могу ошибаться, но вроде многие процы, если сравнение короткое, типа Clamp, Min, Мах, выполняют обе ветки и это быстро. По сути как и условный мув.
А можно посмотреть код бенчмарков и на каких тестовых данных строились эти графики?
Можно убрать ветвление внутри цикла поменяв:
if (compare(begin[step], value))
begin += step;
на
begin += step * compare(begin[step], value)
Тогда компилятору будет сложнее ошибиться
Одиозный автор libmdbx говорит, цитирую:
есть чуть более быстрая реализация branch-less bsearch/lower_bound, в том числе с workaround для clang. https://gitflic.ru/project/erthink/bsearch-try
Хм, похоже астрологи объявили неделю branchless кодинга
При ссылках из текста на номера строк в коде, очень хочется их видеть, а не считать строки самостоятельно. Нельзя ли их добавить в цитаты кода в статье?
Красивый двоичный поиск без ветвления