À des fins éducatives, j'essaie de battre binary search
en utilisant la ligne de cache de l'UC.Battre la recherche binaire en utilisant la ligne de cache de l'UC
https://github.com/nmmmnu/beating_binsearch/blob/master/improved.h
Si vous décommentez #define EXIT_ONLY
, la recherche fonctionne comme binary search
normale, sauf s'il y a quelques éléments, la recherche est devenu linear search
.
Comme prévu cela effectue plus rapidement que binary search
.
Cependant, je veux améliorer le futur, donc si vous commentez #define EXIT_ONLY
, alors "petit" linear search
est fait au lieu d'accéder seulement à l'élément "middle".
En théorie, les valeurs pour la recherche linéaire doivent être dans la ligne de cache de l'UC et l'accès doit être "gratuit".
Cependant, en pratique, cette recherche est beaucoup trop lente que la normale binary search
.
Si le code CACHE_COUNT_2
est égal à 1, la vitesse est comparable mais plus lente. Je n'ai jamais essayé de dérouler le cycle _linear()
.
Quelle pourrait être l'explication de l'exécution plus lente?
Repo avec tous les fichiers est ici:
https://github.com/nmmmnu/beating_binsearch
Je pense que vous pourriez obtenir de meilleures réponses dans http://codereview.stackexchange.com/ – user2079303
@ user2079303 vous pourriez, mais la question devrait être complètement refaite en premier. Les questions sur CodeReview doivent être ** a) ** fonctionnant déjà comme prévu et ** b) ** avoir le code intégré dans la question. En outre, les demandes de fonctionnalités et les explications de code sont également hors sujet. – Kaz
J'y ai pensé, mais en général tout est seulement dans le fichier 'improved.h'. les autres fichiers sont des mesures et n'est pas si important comment ils sont écrits. – Nick