Для образовательных целей я пытаюсь победить binary search
с использованием строки кэша ЦП.Избиение бинарного поиска с использованием строки кэша ЦП
https://github.com/nmmmnu/beating_binsearch/blob/master/improved.h
Если вы раскомментировать #define EXIT_ONLY
, поиск работает как обычный binary search
, за исключением, если есть несколько элементов, поиск стал linear search
.
Как и ожидалось, это выполняет быстрее, чем binary search
.
Однако я хочу улучшить будущее, поэтому, если вы прокомментируете #define EXIT_ONLY
, то вместо небольшого элемента «средний» будет создан «маленький» linear search
.
Теоретически значения для линейного поиска должны быть в строке кэша ЦП, и доступ должен быть «бесплатным».
Однако на практике этот поиск слишком медленный, чем обычный binary search
.
Если I hardcode CACHE_COUNT_2
будет равен 1, то скорость сравнима, но все же медленнее.
Примечание. Я никогда не пытался развернуть цикл for в _linear()
.
Что может быть объяснением более медленного выполнения?
Repo со всеми файлами здесь:
https://github.com/nmmmnu/beating_binsearch
Я думаю, что вы могли бы получить более качественные ответы в http://codereview.stackexchange.com/ – user2079303
@ user2079303, возможно, но вопрос должен быть полностью переделан первым. Вопросы по CodeReview должны быть ** a) ** уже работающими по назначению и ** b) ** имеют встроенный в вопрос код. Кроме того, запросы функций и объяснения кода также не соответствуют теме. – Kaz
Я думал об этом, но в целом все только в файле 'Impro.h'. другие файлы являются измерениями и не так важны, как они написаны. – Nick