Sé por qué la DRAM es más lenta para escribir que para leer, pero ¿por qué la RAM de caché L1 y L2 es más lenta para escribir?

La DRAM es más lenta para escribir que para leer porque lleva tiempo cargar o descargar una celda de memoria DRAM. Pero, ¿qué pasa con la SRAM en las cachés L1 y L2 de mi procesador? También es más lento de escribir, pero AFAIK, SRAM es una memoria bloqueada basada en puertas.

Entonces, ¿por qué la velocidad de escritura SRAM es más lenta?

Gracias.

Sería bueno incluir el programa (nombre y enlace) que utilizó para realizar las observaciones en cuestión y algunos detalles reales sobre la configuración en la que observa este comportamiento, como el modelo de CPU, etc.
En realidad, leer DRAM es más complicado que escribir. De hecho, leer una celda DRAM destruye su carga y volver a escribir la celda es parte del proceso de lectura . Así que soy bastante escéptico de su afirmación de que las escrituras DRAM son más lentas que las lecturas. Tienes una fuente?

Respuestas (3)

¿Está realmente seguro de que los cachés son más lentos para escribir que para leer? Sospecho que lo que escuchó fue la operación general, no solo el tiempo de lectura o escritura de SRAM. Escribir en un caché es una operación más costosa porque eventualmente se debe escribir en la memoria más lenta que respalda el caché. También significa que un bloque de caché no se puede reutilizar sin vaciarlo primero si se ha escrito y esa escritura no se ha propagado a la memoria principal.

La operación de escritura real es probablemente la misma velocidad, pero el proceso general de escritura, y todo lo que finalmente pone en marcha, es más largo.

Corrección, el L1 escribe tan rápido como lee, pero el L2 escribe más lento. Ahora que lo pienso, la asociatividad de conjuntos de 4 vías de la memoria caché L2 probablemente también tenga un retraso para elegir dónde escribir, mientras que la lectura probablemente lea los cuatro conjuntos y luego elija. Pero sí, estoy de acuerdo en que un nuevo dato empujará lo que esté ahí y eso supondrá un retraso. Por cierto, utilicé esta utilidad para medir el rendimiento de mi RAM: home.comcast.net/~fbui/bandwidth.html

En un sistema de memoria caché, el tiempo requerido para leer o escribir físicamente datos de la RAM caché representa solo una parte del tiempo requerido para realizar un acceso de lectura o escritura de caché. Especialmente en un sistema multiprocesador, también es necesario determinar qué se supone que debe hacer el caché en cualquier acceso dado. Considere, por ejemplo, una memoria caché asociativa de conjuntos que es asociativa de cuatro vías, dividida entre cuatro bancos de memoria. Cuando el procesador realiza una solicitud de lectura, el controlador de caché sabe instantáneamente que si los datos están en el caché deben provenir de una dirección conocida en uno de los cuatro bancos. El controlador de caché podría iniciar de inmediato una solicitud de lectura a los cuatro bancos en paralelo (sin activar la habilitación de salida) antes de determinar qué chip, si es que hay alguno, contiene realmente los datos. Al menos tres de los bancos obtendrán datos inútiles, pero obtener datos inútilmente es inofensivo (aparte de desperdiciar algo de electricidad). Lo importante es que para cuando el controlador descubra qué banco (si lo hay) contiene los datos y activa la habilitación de salida, las memorias ya habrán tenido tiempo para procesar la solicitud de acceso.

Sin embargo, con una solicitud de escritura, el controlador de caché no puede comenzar a realizar una operación de memoria hasta que sepa qué chip se supone que se debe escribir. Una lectura inútil es inofensiva; uno puede decir efectivamente "no importa" y descartar los datos obtenidos erróneamente. Sin embargo, una escritura inútil no se puede deshacer. Por lo tanto, es importante que los datos no se escriban hasta después de que el controlador haya descubierto dónde se supone que debe ir la escritura.

Si uno solo estuviera realizando escrituras en la memoria, podría realizarlas tan rápido como las lecturas canalizando el proceso. En el ciclo n, el controlador averiguaría dónde se suponía que debía ir el byte n en la memoria, mientras que el byte n-1 se escribía en la ubicación calculada en el ciclo anterior. Sin embargo, muy pocas situaciones involucran muchas escrituras de memoria consecutivas sin lecturas intermedias. Si la escritura real en la memoria ocurre en el ciclo posterior a una solicitud de escritura y el procesador desea realizar una lectura durante ese ciclo, la lectura tendrá que esperar.

Las escrituras, en muchos casos, se retrasan aún más por el hecho de que muchos sistemas no permiten que los bytes de memoria se escriban individualmente. Un sistema puede tener un bus de 64 bits entre la memoria caché y la memoria principal, y puede requerir que la memoria principal solo se escriba en fragmentos de 64 bits. Si el código quiere escribir un solo byte, será necesario leer 64 bits de la RAM, escribir un byte en el caché y luego, en algún momento posterior, volver a escribir los 64 bits en la RAM. Es posible que un caché realice la escritura mientras se obtienen los datos de la RAM principal, y luego, una vez que los datos de la RAM principal estén disponibles, solo copie los 56 bits no escritos del bus de memoria principal en el caché, pero dicha lógica agrega complejidad. En muchos casos, es más sencillo simplemente retrasar la escritura hasta que la línea de caché se haya leído de la RAM.

En los sistemas multiprocesador, las cosas se complican aún más por el hecho de que dos procesadores pueden leer repetidamente la misma línea de caché sin interferencias, pero si un procesador escribe una línea de caché, no se debe permitir que el otro procesador use esa línea de caché hasta que el primero el procesador lo ha escrito en la RAM principal y el segundo procesador lo ha leído, o el primer procesador ha proporcionado los datos al segundo procesador a través de algún otro medio. Una secuencia de operaciones que consista enteramente en lecturas se ejecutará mucho más rápido que una secuencia de operaciones que consista en una combinación de lecturas y escrituras (teniendo en cuenta que, en muchos casos, las operaciones que parecen implicar solo escrituras en realidad implicarán tanto lecturas como escrituras). ). El problema no es tanto que las escrituras en sí sean más lentas,

La página web de este Bandwidthprograma en la que aparentemente basa su observación, que no menciona en su pregunta original, responde a su pregunta en la sección Comentarios , bajo el encabezado Computadoras , observación 6 .

Si la memoria caché L2 está en modo de escritura simultánea, la escritura L2 será muy lenta y más a la par con las velocidades de escritura de la memoria principal.

Por lo tanto, normalmente la caché L2 es más rápida, pero en el caso de que la caché L2 esté en modo de escritura directa ( explicación alternativa de Oracle ), la escritura pura no es más rápida, pero si luego se accede a esa misma memoria, se recupera rápidamente como ya ha sido almacenado en caché.

Si hubiera revisado los gráficos y las tablas proporcionadas, habría visto que normalmente la mayoría de las computadoras se comportan como cabría esperar, cuanto más cerca está la memoria de la CPU, más rápida es (siendo la CPU la más rápida) registers.