Tolerancia de latencia
La velocidad de los microprocesadores se ha incrementado en más de un factor de diez por década, pero la velocidad de las memorias de productos básicos (DRAM) solo se ha duplicado, es decir, el tiempo de acceso se ha reducido a la mitad. Por lo tanto, la latencia del acceso a la memoria en términos de ciclos de reloj del procesador aumenta en un factor de seis en 10 años. Los multiprocesadores intensificaron el problema.
En los sistemas basados en bus, el establecimiento de un bus de gran ancho de banda entre el procesador y la memoria tiende a incrementar la latencia para obtener los datos de la memoria. Cuando la memoria se distribuye físicamente, la latencia de la red y la interfaz de red se suma a la del acceso a la memoria local en el nodo.
La latencia generalmente crece con el tamaño de la máquina, ya que más nodos implican más comunicación en relación con la computación, más salto en la red para la comunicación general y probablemente más contención. El objetivo principal del diseño de hardware es reducir la latencia del acceso a los datos mientras se mantiene un ancho de banda alto y escalable.
Descripción general de la tolerancia de latencia
Cómo se maneja la tolerancia de latencia se comprende mejor al observar los recursos en la máquina y cómo se utilizan. Desde el punto de vista del procesador, la arquitectura de comunicación de un nodo a otro puede verse como una canalización. Las etapas de la canalización incluyen interfaces de red en el origen y el destino, así como en los enlaces de red y conmutadores a lo largo del camino. También hay etapas en la asistencia de comunicación, el sistema de memoria / caché local y el procesador principal, dependiendo de cómo la arquitectura gestiona la comunicación.
El problema de utilización en la estructura de comunicación de línea de base es que el procesador o la arquitectura de comunicación está ocupada en un momento dado, y en la canalización de comunicación solo una etapa está ocupada a la vez, ya que la única palabra que se transmite se abre paso desde el origen al destino. El objetivo de la tolerancia de latencia es superponer el uso de estos recursos tanto como sea posible.
Tolerancia de latencia en el paso de mensajes explícitos
La transferencia real de datos en el paso de mensajes suele ser iniciada por el remitente, mediante una operación de envío. Una operación de recepción no motiva en sí misma la comunicación de datos, sino que copia los datos de un búfer entrante en el espacio de direcciones de la aplicación. La comunicación iniciada por el receptor se realiza mediante la emisión de un mensaje de solicitud al proceso que es la fuente de los datos. Luego, el proceso envía los datos a través de otro envío.
Una operación de envío síncrono tiene una latencia de comunicación igual al tiempo que se tarda en comunicar todos los datos del mensaje al destino, el tiempo para el procesamiento de recepción y el tiempo para devolver un acuse de recibo. La latencia de una operación de recepción síncrona es su sobrecarga de procesamiento; que incluye copiar los datos en la aplicación y la latencia adicional si los datos aún no han llegado. Nos gustaría ocultar estas latencias, incluidos los gastos generales si es posible, en ambos extremos.
Tolerancia de latencia en un espacio de direcciones compartido
La comunicación básica se realiza a través de lecturas y escrituras en un espacio de direcciones compartido. Por conveniencia, se denomina comunicación de lectura y escritura. La comunicación iniciada por el receptor se realiza con operaciones de lectura que dan como resultado el acceso a datos de la memoria o caché de otro procesador. Si no hay almacenamiento en caché de los datos compartidos, la comunicación iniciada por el remitente se puede realizar mediante escrituras en los datos asignados en memorias remotas.
Con la coherencia de la caché, el efecto de las escrituras es más complejo: la escritura conduce al remitente o la comunicación iniciada por el receptor depende del protocolo de coherencia de la caché. Ya sea iniciada por el receptor o iniciada por el remitente, la comunicación en un espacio de direcciones compartido de escritura de lectura admitida por hardware es naturalmente detallada, lo que hace que la latencia de tolerancia sea muy importante.
Bloquear la transferencia de datos en un espacio de direcciones compartido
En un espacio de direcciones compartido, ya sea por hardware o software, la fusión de datos y el inicio de transferencias de bloques se pueden realizar explícitamente en el programa de usuario o de forma transparente por el sistema. Las transferencias de bloques explícitas se inician ejecutando un comando similar a un envío en el programa de usuario. El comando de envío se explica mediante la asistencia de comunicación, que transfiere los datos de forma canalizada desde el nodo de origen al destino. En el destino, el asistente de comunicación extrae las palabras de datos de la interfaz de red y las almacena en las ubicaciones especificadas.
Hay dos diferencias principales entre el envío y la recepción de mensajes, los cuales surgen del hecho de que el proceso de envío puede especificar directamente las estructuras de datos del programa donde se colocarán los datos en el destino, ya que estas ubicaciones están en el espacio de direcciones compartido .
Procedimientos pasados de eventos de latencia larga en un espacio de direcciones compartido
Si la operación de memoria se realiza sin bloqueo, un procesador puede pasar de una operación de memoria a otras instrucciones. Para las escrituras, esto suele ser bastante simple de implementar si la escritura se coloca en un búfer de escritura y el procesador continúa mientras el búfer se encarga de emitir la escritura en el sistema de memoria y rastrear su finalización según sea necesario. La diferencia es que, a diferencia de una escritura, una lectura generalmente es seguida muy pronto por una instrucción que necesita el valor devuelto por la lectura.
Precomunicación en un espacio de direcciones compartido
La precomunicación es una técnica que ya ha sido ampliamente adoptada en microprocesadores comerciales y es probable que su importancia aumente en el futuro. Una instrucción de captación previa no reemplaza la lectura real del elemento de datos, y la instrucción de captación previa en sí debe ser sin bloqueo, si se pretende lograr su objetivo de ocultar la latencia a través de la superposición.
En este caso, como los datos compartidos no se almacenan en caché, los datos precargados se introducen en una estructura de hardware especial denominada búfer de captación previa. Cuando la palabra se lee realmente en un registro en la siguiente iteración, se lee desde el encabezado del búfer de captación previa en lugar de desde la memoria. Si la latencia para ocultar fuera mucho mayor que el tiempo para calcular la iteración de bucle único, precargaríamos varias iteraciones por delante y podría haber varias palabras en el búfer de precarga a la vez.
Múltiples subprocesos en un espacio de direcciones compartido
En términos de ocultar diferentes tipos de latencia, el multiproceso soportado por hardware es quizás la técnica versátil. Tiene las siguientes ventajas conceptuales sobre otros enfoques:
No requiere análisis ni soporte especiales de software.
Como se invoca dinámicamente, puede manejar situaciones impredecibles, como conflictos de caché, etc. tan bien como predecibles.
Al igual que la captación previa, no cambia el modelo de consistencia de la memoria ya que no reordena los accesos dentro de un hilo.
Si bien las técnicas anteriores tienen como objetivo ocultar la latencia de acceso a la memoria, el subproceso múltiple puede ocultar potencialmente la latencia de cualquier evento de latencia larga con la misma facilidad, siempre que el evento pueda detectarse en tiempo de ejecución. Esto también incluye sincronización y latencia de instrucciones.
Esta tendencia puede cambiar en el futuro, ya que las latencias son cada vez más largas en comparación con las velocidades del procesador. Además, con microprocesadores más sofisticados que ya proporcionan métodos que pueden extenderse para múltiples subprocesos, y con el desarrollo de nuevas técnicas de múltiples subprocesos para combinar múltiples subprocesos con paralelismo a nivel de instrucción, esta tendencia ciertamente parece estar experimentando algún cambio en el futuro.