



Next: Ordre de boucles Up: Optimisation de fluide Previous: Conversions int-float Contents
Les accès mémoire
L'ordre de chargement des données de la mémoire est très important pour optimiser le temps de calculs. Les systèmes de mémoire des ordinateurs modernes sont très optimisés pour certains ordres spécifiques.
Une grande partie des accès mémoire dans un programme est aux adresses proches ou adresses linéaires. C'est à dire qu'un programme accède à des données soit à des adresses aléatoires mais proches soit à des adresses ,
,
,
,
, .... Ainsi, le matériel est très optimisé pour ces deux cas.
Un système de mémoire moderne possède plusieurs niveaux de caches. Un cache est un morceau de mémoire proche du CPU qui est petit mais très rapide. Quand une adresse de mémoire est chargée, le contenu de cette adresse et ses voisins sont chargés dans le cache. Donc, quand le processeur veut charger un voisin de cette adresse, il est déjà présent dans le cache, et son accès est beaucoup plus rapide.
Souvent les processeurs modernes ont aussi un module de prefetching (pré-chercher). Ce module, à partir de l'ordre d'accès à la mémoire du processeur, lorsque cet accès est séquentiel, est capable d'effectuer du préchargement. Alors, pendant que le processeur est en train de traiter les données à l'adresse , le module de prefetching charge en même temps les données à l'adresse
. Ce recouvrement chargement/calcul permet d'augmenter notablement les performances du processeur.
Pour une architecture qui utilise une hiérarchie de caches et un module de prefetching, architecture classique pour les ordinateurs modernes et hautes performances, il est très important d'organiser les accès mémoire dans un ordre qui convient au matériel. Et ceci afin d'exploiter au mieux les ressources CPU.
Subsections




Next: Ordre de boucles Up: Optimisation de fluide Previous: Conversions int-float Contents Michael Ash 2005-09-21