2012-08-30 16 views
7

Estoy ajustando el rendimiento de mi programa Java paralelo. Tengo curiosidad sobre los efectos de la Arquitectura.¿Cómo se comunican las CPU en diferentes sockets?

dado una máquina con dos sockets de CPU, cada uno con una de cuatro núcleos Intel Xeon CPU, entonces:

  • ¿Cómo se comunican las dos CPU, lo rápido que habría que comunicar?
  • ¿Qué tan rápido se comunicarían dos núcleos en el mismo chip?
  • ¿Los cuatro núcleos en el mismo chip son equivalentes en términos de comunicación o acceso a la memoria?
+0

¿Está pasando mucha información? ¿Cómo se pasan los datos (por ejemplo, se usa 0MQ)? – osgx

Respuesta

3

1) ¿Cómo se comunican las dos CPU, qué tan rápido se comunicarían?

La mayoría del tiempo se comunican a través de la memoria o el nivel de jerarquía de memoria compartida más cercano. (La memoria del sistema, tanto en SMP y NUMA es considerado como el nivel compartido;., Aunque en la NUMA se accede a través de un controlador de memoria de otro chip esto es sólo no uniforme = acceso más lento)

2) ¿A qué velocidad lo haría dos núcleos en el mismo chip se comunican?

Los núcleos en el mismo chip suelen compartir caché L2 o L3. Los núcleos en diferentes chips se comunican a través de la memoria o con interacciones de caché a caché utilizando el protocolo de coherencia de caché.

Por lo tanto, en el caso 1 (chips diferentes) la velocidad (ancho de banda) de la memoria que pasa entre las CPU será de lectura/escritura de memoria casi normal. Y en el caso 2 (mismo chip), esta velocidad puede ser mayor, hasta la velocidad de lectura/escritura del caché.

Latencia de la comunicación será de varios cientos de CPU garrapatas en el caso 1 y varias decenas en el caso 2.

3) son las cuatro núcleos en el mismo chip de equivalente en términos de la comunicación o acceder a la memoria?

Los cuatro núcleos del mismo chip generalmente tienen una distancia equivalente a la RAM. Depende de la arquitectura y la implementación del chip; para algunos Intels antiguos, p. chip multinúcleo fue realmente dos chips empaquetados en un solo paquete.

+0

Por lo tanto, al asignar dos hilos a dos núcleos, uno de cada dos chips podría ser diez veces más lento que uno en uno, ¿no? – JackWM

+0

¿Cuál es la interacción entre hilos? ¿Cuánto trabajo harán entre las interacciones? ¿Están enviando muchos datos o simplemente están trabajando en una estructura de datos compartida? – osgx

8

Cómo programar los hilos en los núcleos para lograr un rendimiento de la memoria óptimo depende del patrón de acceso a la memoria y, por lo general, no vale la pena. Si su programa está en Java, probablemente no tendrá el nivel de control requerido para acercarse al rendimiento óptimo.

Las CPU modernas tienen controladores de memoria integrados, y los modernos sistemas multi-socket tienen memoria distribuida. Esto se llama

Non-Uniform Memory Access (NUMA)

En la moderna multi-socket Intel procesadores de comunicación entre los zócalos se hace con QPI

QuickPath Interconnect (QPI)

QPI es la arquitectura Intel que especifica cómo funciona esto. El equivalente de AMD es HyperTransport.Usted puede aprender más acerca de las diversas arquitecturas aquí:

System Architecture

un acceso a memoria que se pierde en la memoria caché de datos de nivel 1 puede ser reparado por la caché de datos de nivel 2 (en el mismo socket) o podría ser atendido por lo que Intel llama el "último nivel de caché (LLC)" que estaría en el socket que tiene el controlador de memoria para esa dirección de memoria. Golpear en la LLC en otro zócalo podría ser unas pocas decenas de ciclos de procesador, pero aún mucho más rápido que acceder a DRAM (más de cien ciclos de procesador).

+1

Muy buen resumen. La "Arquitectura del sistema" también parece un gran recurso. –

Cuestiones relacionadas