За счёт предсказаний.
а ну так вы если поставите больше итераций чем число ветвлений которое может предсказать процессор то алгоритм обогнать может
xadd в районе 10 тактов кушает, толстая инструкция. А clang сгенерировал код, который через хитрые манипуляции высчитывал заранее значение. Да ещё и в цикле выполнял независимые от друг друга сразу 3 сложения. А значения высчитывал через условие c and, мол, если меньше 10 - то и нефиг там считать. Вот так и получилось, что меньше 10 тактов исполняет.
xadd обгоняет только на 5 итерациях, и всё. Как раз из-за предсказаний. Поиск чисел больше 5 - начинаются провалы, и чем больше число - тем далеко в точку уходит clang. Но у clang несложный алгоритм, важно это понимать. Такой и самому легко написать, до такого и самому легко додуматься, можно даже лучше (таблица), так что тут нечему гордиться ЯВУшникам.
недавно мне казалось что алгоритм с xadd самый гениальный и быстрый
Руками я бы кланговский алгоритм точно не стал писать.
Конечно, потому что ты бы просто написал таблицу, и ушёл бы в точку, оставив алгоритм clang на старте.
Хочу максимум скорости - делаю табличку, хочу минимальный размер - использую xadd
Обсуждают сегодня