Anomalie de performances dans la transposition matricielle : 512x512 vs 513x513
Certains modèles de performances émergent lorsque vous travaillez avec des matrices carrées de différentes tailles, conduisant à une intrigante phénomène : transposer des matrices de dimensions 2^n (par exemple, 512x512) présente systématiquement des temps d'exécution plus lents par rapport aux matrices de dimensions 2^n 1 (par exemple, 513x513).
Plonger dans la mécanique
La disparité des performances provient de l'interaction complexe entre les modèles d'accès aux données et la fonctionnalité du cache. Plus précisément, les caches sont organisés en ensembles et en lignes :
Les adresses de données sont mappées à des ensembles spécifiques à l'aide d'une formule. Le chevauchement des plages d'adresses peut entraîner des conflits pour l'occupation définie, entraînant des échecs de cache.
La foulée critique
Un facteur crucial dans cette équation est la « foulée critique ». qui mesure la distance entre les emplacements mémoire qui rivalisent effectivement pour les lignes de cache. Lorsque des éléments de données sont stockés à des intervalles égaux à la foulée critique, cela déclenche un conflit de cache appelé « faux alias » ou « foulée artificielle ».
L'impasse 512x512
Une matrice de 512x512, occupant un cache avec 4 lignes par ensemble et une taille de ligne de 64 octets, rencontre cet écueil. La foulée critique pour cette configuration est de 2048 octets (4 lignes * 64 octets), alignés avec une ligne sur quatre dans la matrice.
Lors de la transposition, l'accès aux éléments successifs d'une colonne entraîne l'affichage des lignes de cache de la première opération. expulsé. En conséquence, les éléments situés à des intervalles de foulée critiques dans la ligne suivante subissent des échecs de cache, ce qui dégrade les performances.
L'évasion 513x513
En revanche, une matrice de 513x513, avec une dimension étrange, perturbe la foulée critique. Les éléments ne sont plus espacés à des intervalles de foulée critiques, réduisant ainsi le risque de conflits de cache. Cela conduit à une amélioration des performances lors de la transposition.
Conclusion
Le phénomène de transpositions matricielles plus lentes pour les dimensions de 2^n par rapport à 2^n 1 découle des caractéristiques de la mémoire cache . Comprendre l'étape critique et l'impact de l'alignement des données sur l'utilisation du cache est crucial pour optimiser les temps d'exécution du code.
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!