¿Cómo lidian las computadoras con la latencia de RAM?

1

Los relojes de la CPU se han vuelto más rápidos que la memoria RAM. Así que las computadoras tienen que esperar un número particular de ciclos de reloj entre enviar una dirección y recibir datos. Pero, ¿cómo sabe una computadora cuántos ciclos de reloj debe esperar? ¿Qué hace la computadora durante los ciclos intermedios de reloj? Además, ¿cómo administra la computadora la sincronización si cambias la velocidad del reloj (overclocking) si no cambias la velocidad del reloj por completo, ya que la memoria RAM solo funciona a una velocidad particular?

    
pregunta Derek Farkas

4 respuestas

3
  

¿Cómo sabe una computadora cuántos ciclos de reloj debe esperar?

Está codificado en alguna parte. En el hardware integrado, está codificado en el firmware. En computadoras más antiguas, estaba codificado en el BIOS, porque todos los módulos DIMM se comportaban igual. En algún momento, se convirtió en configurable en algunas computadoras, en algún menú de opciones poco claras dentro de la utilidad de configuración del BIOS. Ahora, los módulos DIMM contienen una pequeña ROM en serie llamada Serial Presence Detect para que el BIOS pueda obtener la configuración de latencia del propio módulo DIMM. Así que ahora es dinámico, pero aún está codificado en el módulo DIMM.

  

¿Qué hace la computadora durante los ciclos intermedios del reloj?

¿Quieres decir durante los ciclos de reloj de latencia DRAM? Si absolutamente requiere que los datos procedan, espera. Pero los procesadores ahora son lo suficientemente inteligentes como para hacer que la instrucción obtenga un prefetch (solicitan los códigos de operación de la RAM unos cuantos ciclos por adelantado para compensar la latencia), e incluso a veces los datos obtienen el prefetch (cuando acceden secuencialmente a un gran área de RAM). Solicítelo desde su código, siguiendo instrucciones especiales). Además, la memoria caché de nivel 1 entre la RAM y el procesador oculta esta latencia. Pero, cuando la captura previa falló (por ejemplo, debido a un salto condicional que no se predijo adecuadamente) y cuando los datos no están disponibles en el caché, tiene que esperar. Esto no sucede tan a menudo, con suerte.

  

Además, ¿cómo administra la computadora la sincronización si cambias la velocidad del reloj (overclocking) si no cambias la velocidad del reloj por completo tu computadora ya que la memoria RAM solo funciona a una velocidad particular?

No conozco los detalles de overclocking en el mundo de las PC, así que intentaré no decir cosas incorrectas. Pero creo que la memoria RAM y los núcleos de la CPU no tienen la misma base de reloj. Así que cuando overclockea el núcleo, el controlador de RAM sigue funcionando a su velocidad original y no hay ningún problema (hay interconexiones asíncronas entre ambos, para que puedan trabajar con relojes independientes). Ahora, creo que también puedes overclockear la memoria RAM. En este caso, si alcanza un cierto límite, es posible que deba aumentar la latencia para compensar y aún tener tiempo suficiente para que la RAM obtenga los bits.

    
respondido por el dim
1

La CPU recibe una respuesta positiva "aquí están los datos que querías antes". Por lo general, esperará bastante tiempo antes de marcar un error, o incluso de forma indefinida.

Todavía obtienes un rendimiento razonable del sistema mediante una combinación de multihilo, búsqueda previa y almacenamiento en caché.

El subprocesamiento múltiple, por ejemplo, "HyperThreading" de Intel significa que la CPU ejecutará dos programas utilizando un núcleo de CPU, y cuando uno está atascado esperando la memoria, el otro puede ejecutar. Por supuesto, si ambos se ejecutan a toda velocidad, cada uno de ellos solo obtiene la mitad de la velocidad normal de la CPU, pero para las cargas de trabajo que tienen muchos accesos de RAM impredecibles, esto ayuda a aumentar la utilización de la CPU.

La captura previa funciona ya sea adivinando o indicando explícitamente al controlador de memoria qué memoria se leerá pronto, y emitiendo las solicitudes de lectura por adelantado con la esperanza de que la respuesta llegue a tiempo. La implementación más primitiva asume que si un programa se está ejecutando, lo más probable es que continúe leyendo las instrucciones, por lo que los bloques grandes se pueden leer por adelantado. Algunas arquitecturas, como el Itanium, tienen instrucciones explícitas de captación previa.

El almacenamiento en caché mantiene los datos a los que se accede con frecuencia en una memoria más rápida y cercana, y al mismo tiempo, se mantienen las estadísticas para mantener los datos más relevantes a la vez que se desalojan otras cosas que ya no son necesarias.

Por lo general, se combinan, por ejemplo, la captación previa generalmente generará entradas de caché, por lo que solo hay una pieza de lógica que maneja los accesos de memoria desde el núcleo de la CPU y decide qué enviar al bus de memoria, y hay un procesador primitivo eso interpreta el programa e intenta predecir saltos: los saltos cortos hacia atrás se traducen en sugerencias para mantener las entradas de caché que contienen el objetivo de salto, mientras que los saltos más largos se establecen como un nuevo objetivo para el mecanismo de búsqueda previa de instrucciones.

La implementación real contendrá miles de otras pequeñas optimizaciones para que estos procesos interactúen bien entre sí. Muy a menudo, existe una lógica dedicada para procesar las tablas virtuales de C ++ de manera eficiente: aquí, la dirección de destino de salto se lee de la memoria, por lo que la lógica de captación previa debe manejar esto antes de que el flujo de instrucciones llegue a la CPU.

    
respondido por el Simon Richter
0

La mayoría de los accesos a la memoria se responderán desde cachés L1 / 2/3.

En cuanto al overclocking, los sistemas que lo permitan tendrán configuraciones separadas para la RAM. Puede también hacer overclocking en la memoria RAM, lo que puede funcionar o no, o dejarlo funcionando a una velocidad menor. Esto se suele denominar velocidad del "lado frontal del bus", aunque se relaciona con un diseño anterior de la placa base.

El BIOS de una PC tendrá tiempos RAM detallados , que se inicia al solicitar un pequeño chip I2C adjunto a cada módulo de memoria RAM. Los sistemas que no son PC funcionan de manera similar, o si la RAM se suelda a la placa base, se codificarán los tiempos en el firmware.

    
respondido por el pjc50
0

Las CPU de alta velocidad suelen tener caché en placa que pueden funcionar en el ciclo de reloj de las CPU. Las CPU de alta velocidad en este caso se refieren a las CPU que operan a velocidades de reloj mucho más altas que su memoria principal.

Este caché se puede dividir en varios niveles, con cada nivel inferior acercándose a la CPU. Cuanto más cerca esté la memoria caché de la CPU, más rápido será. Cuanto más rápido sea, más pequeño será el tamaño del caché. Esa es siempre la compensación en la memoria: por el mismo precio, puede ganar mucho dinero o puede hacerlo rápido. Si quieres grandes y rápido, tendrás que desembolsar algunos dólares importantes para obtenerlo.

En su sistema x86 típico, la jerarquía de memoria se ve así:

   CPU
    |
   L1 Cache
    |
   L2 Cache
    |
   L3 Cache
    |
   Main RAM
    |
   Persistent Storage (HDD, SDD, etc)

L1 a L3 es la RAM físicamente en el dado del procesador, y su contenido son copias de pequeñas secciones de la RAM principal.

Hay un módulo de hardware separado llamado Unidad de administración de memoria que, entre otras cosas, copia los datos desde y hacia los distintos cachés y RAM. Por lo general, la MMU hace un buen trabajo al predecir qué solicitará la CPU a continuación, y cuando la CPU solicita algún dato, esa información ya está en el caché L1 y puede leerse inmediatamente en el registro correcto.

Sin embargo, hay casos en los que la MMU se toma por sorpresa y no tiene los datos correctos en el caché correcto. En este punto, la MMU generalmente activa una interrupción conocida como "falta de caché". Esta interrupción le permite al software / firmware / sistema operativo saber que pasará un tiempo antes de que estén disponibles los datos para este proceso.

En ese momento, depende del software / firmware / sistema operativo decidir qué hacer a continuación. Normalmente, el sistema operativo cambiará los procesos y volverá al que causó la falta de memoria caché cuando los datos necesarios están disponibles. Todo esto es transparente para la aplicación.

  

Además, ¿cómo administra la computadora la sincronización si cambias la velocidad del reloj (overclocking) si no cambias la velocidad del reloj por completo tu computadora ya que la memoria RAM solo funciona a una velocidad particular?

Tipo de. La memoria RAM se puede overclockear o desbloquear como una CPU. Sin embargo, la RAM y la CPU (junto con algunas otras piezas) derivan todos sus relojes individuales de un reloj maestro. Esto ayuda a asegurar que todas las piezas permanezcan sincronizadas. Es una explicación muy simplista.

    
respondido por el CHendrix

Lea otras preguntas en las etiquetas