¿Tiempo de escritura / lectura de caché?

1

Me gustaría diseñar ciertas reglas generales para ayudar a resolver ciertos desafíos de diseño / arquitectura de computadoras. Por lo tanto, en la memoria, ¿qué operaciones típicamente tardan más en ejecutarse: se cargan o almacenan? Creo que esto podría ayudar a que mis elecciones sean más realistas durante el proceso de diseño.

    
pregunta xupv5

3 respuestas

3

Desde un punto de vista arquitectónico, depende de la política que use su caché.

En la política de escritura directa , el resultado de cualquier operación se almacena en la memoria caché y en la memoria física en el mismo ciclo; por lo tanto, la operación de escritura tomará más tiempo, mientras que la operación de lectura dependerá de la presencia del bloque de datos en el caché.

En la política de reescritura , el resultado se almacena en la memoria caché y se copia en la memoria física solo cuando se requiere el mismo bloque de datos. Por lo tanto, escribir y leer puede ser a la misma velocidad, o cualquiera de ellos puede ser más lento.

Más información

    
respondido por el clabacchio
3

Esto varía ampliamente entre arquitecturas. Probablemente no haya una regla de oro útil. La tecnología utilizada en las memorias de hoy generalmente proporciona el mismo tiempo de lectura y escritura. Esto definitivamente no es verdad históricamente y puede que no vuelva a serlo en el futuro. Por ejemplo, las memorias centrales son inherentemente más rápidas de escribir que de leer.

Las cosas se complican más cuando se utiliza la memoria caché. Hoy en día, probablemente pueda imaginar que la memoria caché tiene un tiempo de ciclo fijo, ya sea para leer o escribir. Sin embargo, las consideraciones a nivel del sistema cambian el costo general de una lectura o escritura.

En una lectura, parte de la memoria en algún lugar se debe leer físicamente y no se puede hacer nada hasta que se devuelva este resultado. Si los datos están en la memoria caché, puede estar disponible tan rápido como el procesador pueda utilizarlos. Si no está en el caché, entonces algo tiene que ensillar el burro, trotar hacia la memoria más distante y lenta, programar una lectura, esperar el resultado y regresar al procesador con los datos. Tenga en cuenta que puede haber múltiples niveles de caché con la latencia cada vez más larga para niveles más distantes. Si la memoria virtual está en uso (en realidad es solo otra forma de almacenamiento en caché) y los datos están actualmente intercambiados, entonces la lectura puede ser tan larga como el acceso a un disco (o cualquiera que sea su dispositivo de almacenamiento masivo).

Las escrituras tienen la ventaja de que la acción se puede iniciar, pero no es necesario esperar a que se complete. Sin embargo, esto agrega complejidad, por lo que no todos los sistemas funcionan de esta manera. Algo debe hacer un seguimiento de lo que realmente no se ha escrito en caso de que se presente una solicitud de lectura antes de que se complete el proceso de escritura. La lectura puede detenerse u obtener el valor de algún lugar parcialmente a través del proceso de escritura. Hay muchas oportunidades para aceleraciones aquí, pero tienen un costo de complejidad y hardware adicional. Por lo tanto, hay muchas implementaciones diferentes por ahí. Por ejemplo, una escritura siempre puede garantizar que la memoria caché de primer nivel se escriba antes de que finalice la operación o de que se realice una lectura. Pero entonces, ¿qué pasa si todo el caché ya está ocupado con diferentes direcciones? Esto puede requerir escribir una porción de caché en la memoria del siguiente nivel antes de completar la escritura en el caché de primer nivel. Una vez más, hay muchas compensaciones.

Las escrituras pueden aparecer más rápido inmediatamente porque el proceso puede superponerse con la ejecución posterior, pero en general pueden ser más costosas. Escribir nuevos datos en cualquier tipo de caché hace que esa sección del caché se marque como "sucia". Esto significa que debe escribirse en al menos el siguiente nivel de memoria más lenta antes de que pueda reutilizarse para almacenar en caché una parte diferente de la memoria conceptual global.

En general, no trataría de adivinar si las escrituras o las lecturas son más rápidas en una computadora moderna moderna de uso general, ya que podría haber una gran cantidad de caché sofisticado y de búsqueda previa y superpuesta. La respuesta no es determinista y puede depender de la duración de un bucle, de lo que está sucediendo y de cómo el código que le interesa esté alineado en la memoria.

Fahgeddaboudit.

    
respondido por el Olin Lathrop
3

"¿Cuál lleva más tiempo?" es una pregunta muy vaga y la respuesta depende de lo que intenta optimizar.

En la mayoría de los casos, cuando se considera el rendimiento general de un sistema, le preocupa detener la tubería de ejecución en la CPU. En ese sentido, las cargas siempre llevan más tiempo que las tiendas, en el sentido de que las tiendas no tienen operaciones futuras que dependen de ellas, mientras que las cargas sí.

En otras palabras, con una operación de almacenamiento, envía la dirección y los datos a la jerarquía de memoria y básicamente se olvida de ellos. Sin embargo, con una operación de carga, envía la dirección y luego necesita esperar los datos. El programador del compilador y / o hardware puede o no encontrar un trabajo útil para hacer mientras tanto, pero existe una probabilidad distinta de que la tubería deba detenerse cuando llegue a una operación que depende de los datos que se cargan. / p>

Puede haber otros cuellos de botella en la jerarquía de memoria, dependiendo de la cantidad de niveles de caché, sus tamaños, sus tiempos de acceso, sus políticas de reescritura, los anchos de banda de los buses que los conectan, etc. Con múltiples núcleos y memorias compartidas, La estrategia de sincronización de caché también se convierte en un problema. Todas estas cosas pueden crear un bloqueo en una operación de carga.

La única forma en que una tienda puede crear un bloqueo es si los buffers de escritura en la jerarquía de memoria se llenan, evitando que acepten otra tienda desde el canal de ejecución.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas