Solución:
La localidad espacial y temporal describen dos características diferentes de cómo los programas acceden a los datos (o instrucciones). Wikipedia tiene un buen artículo sobre la localidad de referencia.
Se dice que una secuencia de referencias tiene spatial
localidad si las cosas a las que se hace referencia cerca en el tiempo también están cerca en el espacio (direcciones de memoria cercanas, sectores cercanos en un disco, etc.). Se dice que una secuencia tiene temporal
localidad si los accesos a la misma cosa están agrupados en el tiempo.
Si un programa accede a cada elemento en una matriz grande y lo lee una vez y luego pasa al siguiente elemento y no repite un acceso a una ubicación dada hasta que ha tocado todas las demás ubicaciones, entonces es un caso claro de espacial localidad pero no temporal localidad. Por otro lado, si un programa pasa tiempo accediendo repetidamente a un subconjunto aleatorio de las ubicaciones en la matriz antes de pasar a otro subconjunto aleatorio, se dice que tiene temporal localidad pero no espacial localidad. Un programa bien escrito tendrá estructuras de datos que agrupen las cosas a las que se accede, asegurando así espacial localidad. Si es probable que su programa acceda B poco después de que accede A entonces ambos A y B deben asignarse cerca uno del otro.
Tu primer ejemplo
A[0][1], A[0][2], A[0][3]
muestra espacial localidad, las cosas a las que se accede cerca en el tiempo están cerca en el espacio. No se nota temporal localidad porque no ha accedido a lo mismo más de una vez.
Tu segundo ejemplo
A[1], A[2], A[3]
también muestra espacial localidad, pero no temporal localidad.
Aquí hay un ejemplo que muestra temporal localidad
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 palabras simples,
Localidad temporal: el concepto de que un recurso al que se hace referencia en un momento determinado se volverá a hacer referencia en algún momento en un futuro próximo.
Localidad espacial: el concepto de que la probabilidad de hacer referencia a un recurso es mayor si se acaba de hacer referencia a un recurso cercano.
Fuente (s): Wikipedia
Aquí hay un ejemplo de código con localidad:
var sum = 0;
for (i = 0; i < n; i++){
for(j=0; j < m ; j++){
sum += a[i][j];
}
}
return sum;
-
Existe localidad temporal porque se accede a sum con frecuencia en el bucle. La localidad temporal se explota manteniendo las instrucciones y los valores de datos usados recientemente en la memoria caché y explotando una jerarquía de caché. O incluso en un registro, no en la memoria en absoluto.
-
Existe localidad espacial porque tenemos una matriz ‘a’ y accedemos a cada elemento de la matriz en orden. Por lo general, la localidad espacial se explota mediante el uso de bloques de caché más grandes e incorporando mecanismos de captación previa (obtención de elementos de uso anticipado) en la lógica de control de la caché.