Compensaciones de hardware y software
Existen muchos métodos para reducir el costo del hardware. Un método consiste en integrar la red y la asistencia de comunicación de forma menos estrecha en el nodo de procesamiento y aumentar la latencia y la ocupación de la comunicación.
Otro método es proporcionar coherencia y replicación automática en el software en lugar del hardware. El último método proporciona replicación y coherencia en la memoria principal y puede ejecutarse en una variedad de granularidades. Permite el uso de componentes básicos listos para usar para los nodos y la interconexión, minimizando el costo de hardware. Esto ejerce presión sobre el programador para lograr un buen rendimiento.
Modelos de consistencia de memoria relajada
El modelo de consistencia de memoria para un espacio de direcciones compartido define las restricciones en el orden en que las operaciones de memoria en la misma ubicación o en diferentes ubicaciones parecen ejecutarse unas con respecto a otras. En realidad, cualquier capa del sistema que admita un modelo de nomenclatura de espacio de direcciones compartido debe tener un modelo de consistencia de memoria que incluya la interfaz del programador, la interfaz usuario-sistema y la interfaz hardware-software. El software que interactúa con esa capa debe conocer su propio modelo de consistencia de memoria.
Especificaciones del Sistema
La especificación del sistema de una arquitectura especifica el orden y el reordenamiento de las operaciones de memoria y cuánto rendimiento se puede obtener realmente de ella.
A continuación se muestran algunos modelos de especificación que utilizan las relajaciones en el orden del programa:
Relaxing the Write-to-Read Program Order- Esta clase de modelos permite que el hardware suprima la latencia de las operaciones de escritura que se perdió en la memoria caché de primer nivel. Cuando el error de escritura está en el búfer de escritura y no es visible para otros procesadores, el procesador puede completar las lecturas que ingresan en su memoria caché o incluso una sola lectura que falla en su memoria caché.
Relaxing the Write-to-Read and Write-to-Write Program Orders- Permitir que las escrituras omitan las escrituras pendientes anteriores en varias ubicaciones permite fusionar varias escrituras en el búfer de escritura antes de actualizar la memoria principal. Por lo tanto, varios errores de escritura se superponen y se vuelven visibles fuera de servicio. La motivación es minimizar aún más el impacto de la latencia de escritura en el tiempo de interrupción del procesador y aumentar la eficiencia de la comunicación entre los procesadores al hacer que los nuevos valores de datos sean visibles para otros procesadores.
Relaxing All Program Orders- No se aseguran órdenes de programa por defecto, excepto datos y dependencias de control dentro de un proceso. Por lo tanto, el beneficio es que las múltiples solicitudes de lectura pueden estar pendientes al mismo tiempo, y en el orden del programa pueden ser omitidas por escrituras posteriores y pueden completarse fuera de orden, lo que nos permite ocultar la latencia de lectura. Este tipo de modelos son particularmente útiles para procesadores programados dinámicamente, que pueden continuar más allá de los fallos de lectura a otras referencias de memoria. Permiten muchos de los reordenamientos, incluso la eliminación de accesos que se realizan mediante optimizaciones del compilador.
La interfaz de programación
Las interfaces de programación asumen que las órdenes del programa no tienen que mantenerse en absoluto entre las operaciones de sincronización. Se garantiza que todas las operaciones de sincronización se etiqueten o identifiquen explícitamente como tales. La biblioteca de tiempo de ejecución o el compilador traduce estas operaciones de sincronización en las operaciones adecuadas de conservación del orden solicitadas por la especificación del sistema.
A continuación, el sistema asegura ejecuciones coherentes secuencialmente aunque pueda reordenar las operaciones entre las operaciones de sincronización de la forma que desee sin interrumpir las dependencias de una ubicación dentro de un proceso. Esto le permite al compilador suficiente flexibilidad entre los puntos de sincronización para los reordenamientos que desea, y también le otorga al procesador para realizar tantos reordenamientos como lo permita su modelo de memoria. En la interfaz del programador, el modelo de coherencia debe ser al menos tan débil como el de la interfaz de hardware, pero no tiene por qué ser el mismo.
Mecanismos de traducción
En la mayoría de los microprocesadores, traducir etiquetas para ordenar mecanismos de mantenimiento equivale a insertar una instrucción de barrera de memoria adecuada antes y / o después de cada operación etiquetada como sincronización. Guardaría instrucciones con cargas / tiendas individuales que indican qué pedidos hacer cumplir y evitar instrucciones adicionales. Sin embargo, dado que las operaciones suelen ser poco frecuentes, esta no es la forma en que la mayoría de los microprocesadores han tomado hasta ahora.
Superar las limitaciones de capacidad
Hemos discutido los sistemas que proporcionan replicación automática y coherencia en hardware solo en la memoria caché del procesador. Un caché de procesador, sin que se replique primero en la memoria principal local, replica los datos asignados de forma remota directamente sobre la referencia.
Un problema con estos sistemas es que el alcance de la replicación local se limita a la caché de hardware. Si se reemplaza un bloque de la memoria caché, debe recuperarse de la memoria remota cuando se necesite nuevamente. El propósito principal de los sistemas discutidos en esta sección es resolver el problema de la capacidad de replicación, pero aún proporcionando coherencia en el hardware y una granularidad fina de los bloques de caché para mayor eficiencia.
Cachés terciarios
Para resolver el problema de la capacidad de replicación, un método es utilizar una caché de acceso remoto grande pero más lenta. Esto es necesario para la funcionalidad, cuando los nodos de la máquina son en sí mismos multiprocesadores a pequeña escala y simplemente pueden agrandarse para el rendimiento. También contendrá bloques remotos replicados que se hayan reemplazado desde la memoria caché del procesador local.
Arquitecturas de memoria de solo caché (COMA)
En las máquinas COMA, cada bloque de memoria de toda la memoria principal tiene una etiqueta de hardware vinculada. No existe un nodo fijo en el que siempre se garantice que se asignará espacio para un bloque de memoria. Los datos migran o se replican dinámicamente en las memorias principales de los nodos que los acceden / atraen. Cuando se accede a un bloque remoto, se replica en la memoria de atracción y se lleva a la caché, y el hardware lo mantiene constante en ambos lugares. Un bloque de datos puede residir en cualquier memoria de atracción y puede moverse fácilmente de uno a otro.
Reducir el costo de hardware
Reducir el costo significa trasladar algunas funciones del hardware especializado al software que se ejecuta en el hardware existente. Es mucho más fácil para el software administrar la replicación y la coherencia en la memoria principal que en la caché del hardware. Los métodos de bajo costo tienden a proporcionar replicación y coherencia en la memoria principal. Para que la coherencia se controle de manera eficiente, cada uno de los demás componentes funcionales de la asistencia puede beneficiarse de la especialización e integración del hardware.
Los esfuerzos de investigación apuntan a reducir el costo con diferentes enfoques, como realizar el control de acceso en hardware especializado, pero asignando otras actividades al software y al hardware básico. Otro enfoque consiste en realizar el control de acceso en software, y está diseñado para asignar una abstracción coherente del espacio de direcciones compartidas en nodos y redes de productos básicos sin soporte de hardware especializado.
Implicaciones para el software paralelo
El modelo de consistencia de memoria relajada necesita que los programas paralelos etiqueten los accesos conflictivos deseados como puntos de sincronización. Un lenguaje de programación proporciona soporte para etiquetar algunas variables como sincronización, que luego serán traducidas por el compilador a la instrucción adecuada para preservar el orden. Para restringir el propio reordenamiento de los accesos a la memoria compartida de los compiladores, el compilador puede usar etiquetas por sí mismo.