Quelle est la différence entre le code "Cache Unfriendly" et "Cache Friendly" ?
La "convivialité du cache" fait référence au code qui maximise les performances en utilisant efficacement la hiérarchie de la mémoire de l'ordinateur, en particulier ses caches. Le code « peu convivial pour le cache », en revanche, entrave les performances en provoquant des échecs de cache.
Comment écrire du code efficace avec le cache :
-
Exploiter la localité temporelle : Accédez aux données qui ont été récemment utilisées, augmentant ainsi la probabilité de les trouver dans le cache.
-
Exploiter la localité spatiale : Regroupez les données associées en mémoire pour minimiser les lignes de cache traversant les limites des pages mémoire, ce qui peut déclencher plusieurs échecs de cache.
-
Utiliser Structures de données alignées sur le cache : Choisissez des structures de données telles que std::vector plutôt que std::list, car elles stockent les éléments de manière contiguë, améliorant ainsi le cache localité.
-
Exploiter la structure des données et l'ordre des algorithmes : Concevoir des structures de données et des algorithmes qui optimisent l'utilisation du cache. Des techniques telles que le blocage du cache et l'exploitation de l'ordre des données peuvent améliorer considérablement les performances.
-
Prédiction des branches mentales : Évitez les branches imprévisibles car elles entravent la prélecture et augmentent les échecs de cache.
-
Minimiser les appels de fonctions virtuelles : Les fonctions virtuelles introduisent une surcharge inhérente et peuvent provoquer des échecs de cache lors des recherches. Utilisez des modèles de conception alternatifs ou envisagez une liaison de fonctions manuelle pour le code critique en termes de performances.
Problèmes courants liés au cache :
-
Faux partage : Les multiprocesseurs peuvent rencontrer des échecs de cache lorsque plusieurs threads accèdent aux données dans le même cache line.
-
Thrashing : Défauts de page continus dus à une utilisation excessive de la mémoire, entraînant des ralentissements dus à l'accès au disque.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!