En caché L1, L2 y DRAM, ¿el acceso secuencial es más rápido que el acceso aleatorio?

En caché L1, L2 y DRAM, ¿el acceso secuencial es más rápido que el acceso aleatorio?

En caché L1, L2 y DRAM, ¿el acceso secuencial es más rápido que el acceso aleatorio debido a la posibilidad de establecer lectura anticipada? Sé que en los discos duros esto es, por supuesto, más rápido en órdenes de magnitud.

Respuesta1

, algunos iguales pero no exactamente iguales.

Según el manual del procesador :-)
http://www.intel.com/content/dam/doc/manual/64-ia-32-architectures-optimization-manual.pdf

Existe una captación previa de hardware específica, y un programador puede indicarle que realice la captación previa, además, hay formas en que funciona en fragmentos de datos de los que un programador consciente podría obtener ventajas. Además, los mismos métodos de hardware o software realizados de forma ligeramente incorrecta pueden provocar que la captación previa se descarte una y otra vez, además, cosas como esta varían para diferentes procesadores.

Mover datos a niveles superiores suponiendo que serán necesarios (como lectura anticipada) y que los datos estén allí porque estaban dentro del tamaño del fragmento que se mueve a esos niveles (ser secuencial podría ayudar).
El procesador, sabiendo qué conjunto de instrucciones ha incluido allí, o la lista de cosas que va a hacer, prepara esos datos.

2.1.5.4 Captación previa de datos Los datos se pueden cargar de forma especulativa en L1 DCache mediante la captación previa de software, la captación previa de hardware o cualquier combinación de ambas. . . .

--

Streamer: este captador previo monitorea las solicitudes de lectura de la caché L1 para secuencias de direcciones ascendentes y descendentes. Las solicitudes de lectura monitoreadas incluyen solicitudes de DCache L1 iniciadas por operaciones de carga y almacenamiento y por captadores previos de hardware, y solicitudes de ICache L1 para recuperación de código. Cuando se detecta un flujo de solicitudes hacia adelante o hacia atrás, se obtienen previamente las líneas de caché anticipadas. Las líneas de caché precargadas deben estar en la misma página 4K. . . .

--

Wide Dynamic Execution  
Smart Memory Access - prefetches data  
Branch Prediction Unit  
Instruction Fetch Unit  
Instruction PreDecode  

La lista sigue y sigue con muchas características que están pensando en el futuro.

Comience en la página 60 del documento vinculado.

https://stackoverflow.com/questions/1922249/c-cache-aware-programming Hay más archivos PDF vinculados en Stack Overflow y estoy seguro de que hay mucha más información al respecto.

Los datos sobre esto y la técnica son demasiado largos para publicarlos aquí, y todo "cómo funciona eso en la realidad" de los programadores también sería demasiado largo. No sólo eso, apenas lo entiendo. Después de leer eso (y la información del programador), no es de extrañar por qué una pieza de software que hace casi lo mismo puede ser 50 veces más rápido que otro, las cosas podrían hacerse meticulosamente y probarse y volverse a probar, para tener la optimización definitiva, o podrían Extraña algunas cosas y sé normal.

&NO, la RAM es completamente de acceso aleatorio, solo hay pequeñas cantidades de latencia, es la "Ram" la que usa un disco duro para realizar acciones de lectura anticipada y transferencias en ráfaga muchas veces más rápido de lo que se puede leer desde los platos. La secuencialidad es muy importante en los discos duros porque el movimiento del cabezal lleva tiempo y no extrae datos del plato. Una vez que el cabezal llega a la ubicación, tiene que esperar hasta que aparezcan los datos en la rotación.
Con la lectura anticipada del disco duro, es posible que se extraigan datos en la misma rotación, ahorrando muchos milisegundos de tiempo.

Podría ser un gran esfuerzo de imaginación :-) suponer que hay algo similar en el 2.

información relacionada