2009-06-03 17 views
28

Tengo algunas preguntas con respecto a las memorias de caché utilizadas en CPU multinúcleo o sistemas multiprocesador. (Aunque no directamente relacionado con la programación, que tiene muchas repercusiones, mientras que uno escribe el software para los procesadores multi-núcleo/sistemas multiprocesadores, por lo tanto, preguntando aquí!)¿Cómo se comparten las memorias caché en CPU Intel multinúcleo?

  1. En un sistema multiprocesador o un procesador multi-núcleo (Intel Quad Core, Core dos Duo, etc.) ¿cada núcleo/procesador de la CPU tiene su propia memoria caché (datos y caché del programa)?

  2. Puede un procesador/núcleo acceder a la memoria caché de cada uno, porque si se les permite acceder a la caché mutua, entonces creo que puede haber menos errores de caché, en el caso de que ese caché de procesadores en particular no tenga datos pero algún otro segundo caché de procesadores podría tenerlo evitando así una lectura de memoria en el caché del primer procesador? ¿Es esta suposición válida y verdadera?

  3. ¿Habrá algún problema para permitir que cualquier procesador acceda a la memoria caché de otro procesador?

+0

Semirelacionado: [¿Cuáles son los costos de latencia y rendimiento del intercambio entre productores y consumidores de una ubicación de memoria entre hiper-hermanos versus no hiperactivos?] (Https://stackoverflow.com/questions/45602699/what-are -the-latency-and-throughput-costs-of-producer-consumer-sharing-of-a-memo). y también [¿Qué se usará para el intercambio de datos entre hilos se está ejecutando en un Core con HT?] (https://stackoverflow.com/questions/32979067/what-will-be-used-for-data-exchange-between- threads-are-executing-on-one-core-wi) –

Respuesta

2

para responder a su primera, sé que el Core 2 Duo tiene un sistema de almacenamiento en caché de 2 niveles, en el que cada procesador tiene su propia caché de primer nivel, y comparten una memoria caché de segundo nivel. Esto ayuda tanto con la sincronización de datos como con la utilización de la memoria.

Para responder a su segunda pregunta, creo que su suposición es correcta. Si los procesadores pudieran acceder a la memoria caché de los demás, obviamente habría menos errores de caché, ya que habría más datos para que los procesadores pudieran elegir. Considere, sin embargo, la memoria caché compartida. En el caso de Core 2 Duo, tener memoria caché compartida permite a los programadores colocar las variables comúnmente utilizadas de forma segura en este entorno, de modo que los procesadores no tengan que acceder a sus cachés de primer nivel individuales.

Para responder a su tercera pregunta, podría haber un problema al acceder a la memoria caché de otros procesadores, que va al principio "Escritura múltiple de lectura simple". No podemos permitir que más de un proceso escriba en la misma ubicación en la memoria al mismo tiempo.

Para obtener más información sobre el núcleo 2, lea este artículo prolijo.

http://software.intel.com/en-us/articles/software-techniques-for-shared-cache-multi-core-systems/

10

Respuestas rápidas 1) Sí 2) No, pero todo puede depender de lo que la memoria instancia/recurso se está refiriendo, pueden existir datos en varios lugares al mismo tiempo. 3) Sí. Para obtener una explicación completa del problema, debe leer el artículo de 9 partes titulado "Lo que todo programador debe saber sobre la memoria" por Ulrich Drepper (http://lwn.net/Articles/250967/), obtendrá una imagen completa de los problemas sobre los que parece estar interesado. en un buen y accesible detalle.

+1

+1 para señalar el excelente papel. – sybreon

29

En un sistema multiprocesador o un procesador multi-núcleo (Intel Quad Core, Core Duo de dos etc ..) tiene cada núcleo de CPU/procesador tiene su propia memoria caché (datos y la memoria caché del programa)?

  1. Sí. Varía según el modelo de chip exacto, pero el diseño más común es que cada núcleo de CPU tenga sus propias cavidades de datos e instrucciones L1 privadas. La memoria caché unificada L2 generalmente se comparte entre todos los núcleos.acceso a la memoria caché

¿Puede un procesador/núcleo de cada uno, porque si que se les permite acceder a la caché de cada uno, entonces yo creo que hay podría ser menor fallos de caché, en el escenario que si esa particular la memoria caché de los procesadores no tiene algunos datos, pero algunos otros caché de los procesadores pueden tenerla evitando así una lectura de la memoria en el caché del primer procesador? ¿Es esta suposición válida y verdadera?

  1. No. cachés L1 de cada núcleo de CPU son en el mismo chip como el núcleo y no se puede acceder por otros núcleos. Cada uno de los núcleos está conectado a la memoria caché L2 a través del bus de datos compartido.

¿Habrá algún problema en permitir que cualquier procesador para acceder a otra memoria caché del procesador?

  1. Sí - simplemente no hay cables que conectan las diferentes memorias caché de la CPU a los otros núcleos. Si un núcleo quiere acceder a los datos en el caché de otro núcleo, la única ruta de datos a través de la cual puede hacerlo es el bus del sistema.

Un problema relacionado muy importante es el cache coherency problem. Considere lo siguiente: suponga que un núcleo de la CPU tiene una ubicación de memoria particular en su caché, y escribe en esa ubicación de la memoria. Luego, otro núcleo lee esa ubicación de memoria. ¿Cómo se asegura de que el segundo núcleo vea el valor actualizado? Ese es el problema de coherencia de caché. Hay una variedad de soluciones; ver Wikipedia et al.

+1

La "variedad" de soluciones realmente no es tan variada. Prácticamente todo usa una pequeña variación en [el protocolo MESI] (https://en.wikipedia.org/wiki/MESI_protocol).Muchas memorias caché pueden tener una copia de una línea compartida, pero solo una memoria caché en el dominio de coherencia (es decir, el sistema) puede tener una línea en estado modificado o exclusivo. Entonces, para escribir una línea, una CPU hace una Lectura por Propiedad para asegurarse de que ninguna otra memoria caché en el sistema tenga una copia de esa línea. Relacionado: cómo funciona atomic read-modify-write ('lock inc [mem]'): https://stackoverflow.com/questions/39393850/can-num-be-atomic-for-int-num –

+1

Actualización 8 años después : en estos días, es típico que las CPU tengan cachés privados por núcleo L1 y L2, con un L3 compartido. (Intel desde Nehalem.) El L3 puede detener el tráfico de coherencia para que no tenga que recorrer todo el camino hasta la memoria. –

+1

También NUMA (https://en.wikipedia.org/wiki/Non-uniform_memory_access) es un tema interesante y relevante. – HongboZhu

3

Intel llama a la tecnología de intercambio de memoria caché central Intel Smart Cache. Hay un trozo de página wiki al respecto: https://en.wikipedia.org/wiki/Smart_Cache

Luego, por ejemplo, para el procesador i5-3210M, el ark page tiene un campo "Intel Smart Cache: 3 MB".

Y los Datasheet Volume 1 1.1 "Procesador Detalles de la característica" dice:

  • una instrucción de 32 KB y 32 KB de caché de datos de primer nivel (L1) para cada núcleo
  • A 256 KB caché de instrucciones/datos de segundo nivel compartido (L2) para cada núcleo
  • hasta 8-MB compartida de instrucciones/datos de la caché de tercer nivel (L3), compartida entre todos los núcleos
Cuestiones relacionadas