Je suis un peu confus sur les significations de la localité spatiale et temporelle. J'espère que si je le regarde avec un exemple, cela m'aidera à mieux le comprendre.
Dans un exemple comme celui-ci: A [0] [1], A [0] [2], A [0] [3], etc.
Cela démontre-t-il la localité temporelle? Je vois que la même ligne est accédée plusieurs fois mais à des décalages différents ... cela signifie-t-il qu'une adresse différente est utilisée?
De plus, ai-je raison de dire qu'un exemple comme celui-ci: A [1], A [2], A [3] ... etc
Démontre la localité spatiale?
J'espère que des éclaircissements sur le fonctionnement des localisations temporelles et spatiales dans le code réel m'aideront à mieux les comprendre.
La localité spatiale et temporelle décrit deux caractéristiques différentes de la manière dont les programmes accèdent aux données (ou aux instructions). Wikipedia a un bon article sur localité de référence .
Une séquence de références a une localité spatial
si les éléments référencés dans le temps sont également proches dans l’espace (adresses de mémoire proches, secteurs proches d’un disque, etc.). Une séquence est dite à temporal
localité si les accès à la même chose sont groupés dans le temps.
Si un programme accède à chaque élément d'un grand tableau et le lit une fois, puis passe à l'élément suivant et ne répète pas l'accès à un emplacement donné tant qu'il n'a pas touché tous les autres emplacements, il s'agit alors d'un cas clair de spatial localité mais pas localité temporelle. D'autre part, si un programme passe du temps à accéder de manière répétée à un sous-ensemble aléatoire des emplacements du tableau avant de passer à un autre sous-ensemble aléatoire, il est considéré comme ayant la localité temporale mais pas la localité spatiale. Un programme bien écrit aura des structures de données qui regroupent les éléments auxquels on accède ensemble, assurant ainsi la localité spatiale. Si votre programme est susceptible d'accéder à B peu de temps après avoir accédé à A, alors A et B doivent être alloués l'un à côté de l'autre.
Votre premier exemple
A[0][1], A[0][2], A[0][3]
indique localité spatiale, les éléments auxquels on accède de près dans le temps sont proches dans l'espace. Il ne montre pas la localité temporelle car vous n'avez pas accédé à la même chose plus d'une fois.
Votre deuxième exemple
A[1], A[2], A[3]
indique également localité spatiale, mais pas localité temporelle.
Voici un exemple qui montre la localité temporale
A[1], A[2000], A[1], A[1], A[2000], A[30], A[30], A[2000], A[30], A[2000], A[30], A[4], A[4]
En des mots simples,
Localité temporelle: le concept selon lequel une ressource référencée à un moment donné __ dans le temps le sera à nouveau dans un avenir rapproché.
Localisation spatiale: Le concept selon lequel la probabilité de référencer une ressource est plus grande si une ressource proche de celle-ci vient d'être référencée.
Source (s): Wikipedia
Voici un exemple de code avec localité:
var sum = 0;
for (i = 0; i < n; i++){
for(j=0; j < m ; j++){
sum += a[i][j];
}
}
return sum;
Il existe localité temporelle car la somme est accédée fréquemment dans la boucle. La localité temporelle est exploitée en conservant les valeurs d'instruction et de données récemment utilisées dans la mémoire cache et en exploitant une hiérarchie de cache. Ou même dans un registre, pas en mémoire du tout.
Il existe localité spatiale car nous avons un tableau 'a' et nous accédons à chaque élément du tableau dans l'ordre. La localité spatiale est généralement exploitée en utilisant des blocs de cache plus volumineux et en incorporant des mécanismes de prélecture (récupération d'éléments d'utilisation anticipée) dans la logique de contrôle du cache.
localité temporelle est le cas particulier de localité spatiale.
J'ai de temps en temps du mal à me souvenir de la différence entre eux bien que je me souvienne des deux types de localité.
Localité Spatique à garder à l'esprit qu'il faut garder "séquentiellement" l'adverbe à l'esprit.
Localité temporelle pour se rappeler qu’au début de l’apprentissage des algorithmes de tri, vous voyez "une variable temporaire" à permuter. par exemple. sorte de bulle. Il a deux boucles et pour échanger il y a comme int temp = .....
.
Vous pouvez reconnaître quelle définition appartient à quoi au moyen du chemin.