Efficient and Scalable Cache Coherence for Many-Core Chip Multiprocessors
Alberto Ros Bardisa · TDR (Tesis Doctorales en Red) · 2009
Los continuos avances en la escala de integracion permiten reducir cada vez mas el tamano de los transistores y, por tanto, cada vez podemos encontrar chips con un mayor numero de transistores. Los fabricantes de chips han decidido dedicar estos transistores a aumentar el numero de procesadores en lugar de a incrementar el rendimiento de un unico procesador, dando lugar a los multiprocesadores en un unico chip o CMPs (Chip-multiprocessors). Aunque actualmente los CMPs estan formados por un numero reducido de procesadores (entre 2 y 8), se espera que CMPs con decenas de procesadores, llamados many-core CMPs, salgan al mercado en un futuro cercano. La mayoria de los many-core CMPs mantendran la coherencia de las caches privadas a cada procesador via hardware y, por tanto, el protocolo de coherencia de caches tomara gran importancia en estos sistemas. Hoy en dia, la mejor manera de mantener la coherencia en sistemas con decenas de procesadores es mediante los protocolos basados en directorio. Sin embargo, estos protocolos tienen dos grandes problemas: una gran sobrecarga de memoria y una alta latencia para los fallos de cache. La sobrecarga de memoria es provocada por el mantenimiento del directorio, o informacion de coherencia. Dependiendo de como se organice esta informacion, la cantidad de memoria requerida puede resultar prohibitiva para CMPs de gran escala. Las altas latencias para los fallos de cache vienen como consecuencia de la indireccion introducida por la necesidad de acceder al directorio antes de realizar las acciones de coherencia necesarias. Por otro lado, los many-core CMPs suelen organizar el ultimo nivel de cache, que normalmente comparten todos los procesadores, de un modo distribuido. Esto provoca que el acceso a esta cache dependa del banco donde se almacena el bloque accedido, lo que puede incrementar su latencia de acceso. En esta tesis nuestros esfuerzos se han centrado en estos tres problemas claves para la eficiencia y escalabilidad del CMP. En primer lugar, hemos presentado una organizacion para directorios distribuidos que es escalable, es decir, que el tamano de la estructura de directorio incluida en cada cache no depende del numero de procesadores del sistema. Ademas, hemos implementado un nuevo mecanismo de reemplazos, que elimina todos los mensajes de coherencia causados por los reemplazos, realizandolos de forma implicita con los mensajes generados por la peticion que causa el reemplazo. En segundo lugar, hemos propuesto una nueva familia de protocolos de coherencia de cache, llamados protocolos de coherencia directa. Estos protocolos evitan la indireccion para la mayoria de los fallos de cache. Para ello, es necesario que la informacion de directorio se almacene junto con el bloque de datos y que los mensajes se envien directamente al nodo que almacena dicho bloque de datos. De este modo se reducen las latencias de fallo de cache y, por tanto, el tiempo de ejecucion de las aplicaciones. Por ultimo, hemos desarrollado una politica de mapeo para caches compartidas que se encuentran fisicamente distribuidas en el chip. Esta politica intenta reducir la distancia entre los procesadores que acceden a un bloque y el banco de cache donde se encuentra dicho bloque. Ademas, esta politica intenta garantizar una distribucion uniforme de la memoria almacenada por los diferentes bancos con el fin de reducir la tasa de fallos de la cache. Estas dos mejoras se traducen finalmente en reducciones en el tiempo de ejecucion de las aplicaciones.