Maison > développement back-end > C++ > Pourquoi l'ordre des boucles est-il crucial pour le traitement efficace d'une matrice 8 192 x 8 192 ?

Pourquoi l'ordre des boucles est-il crucial pour le traitement efficace d'une matrice 8 192 x 8 192 ?

DDD
Libérer: 2024-12-06 16:03:16
original
230 Les gens l'ont consulté

Why is Loop Order Crucial for Efficient Processing of an 8192x8192 Matrix?

Bouclage lent sur 8192 éléments : comprendre la pénalité de performance

Le code fourni traite une matrice, img, en calculant la moyenne des neuf cellules environnantes pour chaque élément non frontalier et stocke le résultat dans la matrice res. Lorsque la taille de la matrice est de 8192x8192, le programme présente une baisse de performances significative.

Ce ralentissement est attribué à des problèmes de gestion de la mémoire liés au super-alignement. Le compilateur aligne les structures de données en mémoire pour améliorer les performances, et dans ce cas, la disposition matricielle peut entraîner un accès mémoire inefficace.

Pour résoudre ce problème, l'ordre des boucles dans l'opération de moyenne doit être interchangé. Au lieu d'itérer par colonne, la boucle doit itérer par ligne.

Voici le code modifié :

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

En changeant l'ordre de la boucle, la mémoire séquentielle l'accès est maintenu, éliminant ainsi la pénalité de performance associée à l'accès non séquentiel.

Performance Comparaison :

La structure de boucle échangée améliore considérablement les performances :

Code original :

  • 8191 : 1,499 secondes
  • 8192 : 2,122 secondes
  • 8193 : 1,582 secondes

Boucles échangées :

  • 8191 : 0,376 secondes
  • 8192 : 0,357 secondes
  • 8193 : 0,351 secondes

Cette modification garantit une gestion efficace de la mémoire et résout la lenteur des performances lors du bouclage sur 8192 éléments.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal