Maison > développement back-end > C++ > Pourquoi le bouclage sur 8192 éléments est-il tellement plus lent que 8191 ou 8193 ?

Pourquoi le bouclage sur 8192 éléments est-il tellement plus lent que 8191 ou 8193 ?

Susan Sarandon
Libérer: 2024-12-11 08:56:10
original
848 Les gens l'ont consulté

Why is Looping Over 8192 Elements So Much Slower Than 8191 or 8193?

Impact sur les performances lors du bouclage sur 8192 éléments

Certaines opérations matricielles présentent des anomalies de performances lorsque la taille de la matrice, en particulier le nombre de lignes, est un multiple de 2048 (par exemple, 8192). Ce phénomène, appelé super-alignement, est dû aux pratiques spécifiques de gestion de la mémoire des processeurs modernes.

L'extrait de code fourni illustre ce problème, où une matrice res[][] est calculée à partir d'une matrice img[. ][]. Les performances pour différentes tailles de matrice, en particulier 8191, 8192 et 8193, révèlent un ralentissement significatif lorsque la taille de la matrice est de 8192.

Effets de super-alignement

Les performances les variations proviennent de l'accès non uniforme à la mémoire provoqué par les boucles imbriquées itérant par colonne sur la matrice img[][]. Ce modèle d'accès non séquentiel entraîne des pénalités de performances sur les processeurs modernes, qui fonctionnent plus efficacement avec un accès séquentiel à la mémoire.

Résolution : échange de boucles externes

La solution réside dans réorganiser les boucles imbriquées, en donnant la priorité à l'itération par ligne plutôt qu'à l'itération par colonne. Ce faisant, l'accès à la mémoire devient séquentiel, améliorant considérablement les performances :

for(j=1;j<SIZE-1;j++) {
    for(i=1;i<SIZE-1;i++) {
        // Code to compute res[j][i]
    }
}
Copier après la connexion

Résultats de performances

Les résultats de performances suivants démontrent l'amélioration obtenue en interchangeant les boucles externes :

Matrix Size Original Code (s) Interchanged Loops (s)
8191 1.499 0.376
8192 2.122 0.357
8193 1.582 0.351

Cette optimisation réduit considérablement l'écart de performances pour les matrices dont les dimensions sont des multiples de 2048, ce qui entraîne des performances constantes. sur différentes tailles de matrice.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal