Code respectueux du cache ou code non convivial
Le code respectueux du cache optimise ses performances en utilisant efficacement la mémoire cache, en minimisant les échecs de cache et récupérer des données à partir de la mémoire principale plus lente. En revanche, le code peu convivial manque souvent le cache, ce qui entraîne une exécution plus lente.
Garantir l'efficacité du cache
Pour écrire du code efficace avec le cache, tenez compte des principes suivants :
-
Localité temporelle : Les données récemment consultées seront probablement à nouveau consultées bientôt. Conservez les données fréquemment utilisées dans le cache en évitant les écrasements de mémoire.
-
Localité spatiale : Les données associées doivent être stockées à proximité les unes des autres en mémoire. Utilisez des structures de données telles que des tableaux (mémoire contiguë) au lieu de listes chaînées (mémoire dispersée).
-
Conteneurs appropriés : Choisissez des conteneurs conçus pour un accès efficace au cache, tels que std::vector en C .
-
Conception de la structure des données : Adaptez les algorithmes et les structures de données pour maximiser l'utilisation du cache, comme le blocage du cache pour les données volumineuses. ensembles.
-
Ordre des données :Exploitez les structures implicites dans les données. Par exemple, stockez les matrices 2D dans l'ordre des colonnes pour de meilleures performances du cache.
-
Branches prévisibles : Évitez les branches imprévisibles qui rendent la prélecture difficile, entraînant des échecs de cache.
- Minimisation des fonctions virtuelles : Les fonctions virtuelles peuvent provoquer des échecs de cache si elles sont appelées rarement. Évitez-les dans les sections sensibles aux performances.
Problèmes de cache courants
-
Faux partage : se produit lorsque plusieurs processeurs tentent de modifier les données dans la même ligne de cache, provoquant des écrasements répétés du cache et réduisant performances.
-
Thrashing : Un symptôme extrême d'une mauvaise mise en cache où les accès à la mémoire déclenchent continuellement des erreurs de page, entraînant une exécution lente en raison de 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!