¿Pueden múltiples CPU / núcleos acceder a la misma RAM simultáneamente?

15

Esto es lo que supongo que sucedería:

  1. Si dos núcleos intentaran acceder a la misma dirección en la RAM, uno tendría que esperar a que el otro acceda a la RAM. La segunda vez que cada núcleo intente acceder a la misma dirección, aún pueden tener esa RAM en caché, para que puedan acceder a sus respectivas cachés simultáneamente .

  2. Si dos núcleos intentaran acceder a diferentes direcciones en la misma RAM, uno tendría que esperar a que el otro acceda a la RAM.

En otras palabras, me imagino que para las tareas de programación intensiva de RAM, el multiprocesamiento no ayudará mucho a menos que implique la lectura de la misma dirección en RAM varias veces por núcleo.

Entonces, ¿pueden múltiples CPU / núcleos acceder simultáneamente a la misma RAM, o lo que digo es correcto?

Hobbit perdido
fuente
No puedo hablar con el nivel de hardware al que te refieres, pero puedo decir que las tareas intensivas de ram pueden ser ayudadas por el multiprocesamiento simplemente dividiendo el uso; Es decir, si tiene 500 MB de datos en RAM que necesita procesar, dele 250 MB de esos datos / RAM a un proceso y 250 MB a otro y efectivamente ha duplicado su rendimiento posible (no obstante las restricciones de ancho de banda de RAM). Además de si el hardware puede hacerlo o no, tener múltiples procesadores accediendo a la misma dirección RAM es una idea realmente mala, y la mayoría de los códigos multiproceso intentan evitarlo.
Jimmy Hoffa
1
@JimmyHoffa Pero las restricciones de ancho de banda de RAM son precisamente de lo que está hablando (ya que se supone que la tarea está vinculada a la memoria).
@ Jimmy No veo ningún problema con dos procesadores que intentan leer desde la misma dirección RAM. Solo vería un problema si intentaran escribirle al mismo tiempo.
Lost Hobbit
1
en un procesador multinúcleo particular con el que solía trabajar, los núcleos no "sabían" nada más allá de sus cachés locales; las cosas que debían sincronizarse con el caché compartido se realizaban de manera transparente en un número específico de ciclos de procesador; programador dispuesto a tener esto en cuenta acaba de agregar manualmente la cantidad necesaria de nops en su código de ensamblaje
mosquito
2
Respuesta corta: depende de la arquitectura del bus del sistema, el protocolo de coherencia de caché, la cantidad de puertos en su controlador DDR y la cantidad de controladores DDR. La respuesta larga está en la hoja de datos de su sistema.
SK-logic

Respuestas:

11

Resumen: generalmente es posible que un solo núcleo sature el bus de memoria si el acceso a la memoria es todo lo que hace.

Si establece el ancho de banda de la memoria de su máquina, debería poder ver si un proceso de subproceso único realmente puede lograr esto y, de no ser así, cómo se escala el uso efectivo del ancho de banda con la cantidad de procesadores.


Los detalles dependerán de la arquitectura que esté utilizando. Suponiendo algo como SMP y SDRAM modernos:

  1. Si dos núcleos intentaron acceder a la misma dirección en la RAM ...

    podría ir de varias maneras:

    • Ambos quieren leer, simultáneamente:

      • dos núcleos en el mismo chip probablemente compartirán un caché intermedio en algún nivel (2 o 3), por lo que la lectura solo se realizará una vez. En una arquitectura moderna, cada núcleo puede seguir ejecutando µ-ops desde una o más tuberías hasta que la línea de caché esté lista
      • dos núcleos en chips diferentes pueden no compartir una memoria caché, pero aún así necesitan coordinar el acceso al bus: idealmente, cualquier chip que no haya emitido la lectura simplemente husmeará la respuesta
    • si ambos quieren escribir:

      • dos núcleos en el mismo chip solo escribirán en el mismo caché, y eso solo necesita ser vaciado a la RAM una vez. De hecho, dado que la memoria se leerá y se escribirá en la RAM por línea de caché, las escrituras en direcciones distintas pero suficientemente cercanas se pueden combinar en una sola escritura en la RAM

      • dos núcleos en diferentes chips tienen un conflicto, y la línea de caché necesitará ser escrita nuevamente en la RAM por el chip1, recuperada en la caché del chip2, modificada y luego escrita nuevamente (no tengo idea de si la escritura / recuperación puede fusionarse por espionaje)

  2. Si dos núcleos intentaran acceder a diferentes direcciones ...

    Para un acceso único , la latencia CAS significa que dos operaciones pueden potencialmente intercalarse para que no demoren más (o tal vez solo un poco más) que si el bus estuviera inactivo.

Inútil
fuente
Otro elemento de la lista es cuando un núcleo inicia una transferencia de DMA mientras otro núcleo toca el área objetivo.
ott--
7

Entonces, ¿pueden múltiples CPU / núcleos acceder simultáneamente a la misma RAM, o lo que digo es correcto?

Existen muchas arquitecturas de máquinas diferentes, cada una con su propio conjunto de características. Una categoría de máquinas de multiprocesamiento se llama MISD , para Datos únicos de instrucción múltiple, y estas máquinas están diseñadas para proporcionar los mismos datos a varios procesadores al mismo tiempo. Una clase relacionada de máquinas conocidas como arquitecturas SIMD (Single Instruction Multiple Data) son mucho más comunes y también proporcionan acceso a la misma memoria al mismo tiempo, pero la memoria contiene instrucciones en lugar de datos. Tanto en MIMD como en SIMD, "acceso" significa acceso de lectura: ¡puede imaginar el problema que tendría si dos unidades intentaran escribir en la misma ubicación al mismo tiempo!

Caleb
fuente
3

Aunque la mayoría de las respuestas se enfocan desde el lado del modelo de software y / o hardware, la forma más limpia es considerar cómo funcionan los chips RAM físicos. (El caché está ubicado entre el procesador y la memoria, y simplemente usa el mismo bus de direcciones, y su funcionamiento es completamente transparente para el procesador). Los chips RAM tienen un decodificador de una sola dirección, que recibe la dirección de la celda de memoria, llegando al el bus de direcciones (y de manera similar un bus de datos, ya sea dentro o fuera). Las memorias actuales se construyen en el "enfoque de procesador único", es decir, un procesador está conectado a través de un bus a un chip de memoria. En otras palabras, este es el "cuello de botella de von Neumann", ya que cada instrucción debe hacer referencia a la memoria al menos una vez. Debido a esto, en un cable (o cables, también conocido como bus) solo puede existir una señal a la vez, entonces el chip RAM puede recibir una dirección de celda a la vez. Hasta que pueda asegurarse de que los dos núcleos pongan la misma dirección en el bus de direcciones, físicamente no es posible el acceso simultáneo al bus por parte de dos conductores de bus diferentes (como los núcleos). (Y, si es lo mismo, es redundante).

El resto es la llamada aceleración de hardware. El bus de coherencia, el caché, el acceso SIMD, etc. son solo algunas fachadas agradables frente a la RAM física, su pregunta fue sobre. Los aceleradores mencionados pueden cubrir la lucha por usar el bus de direcciones exclusivamente, y los modelos de programación no tienen mucho que ver con su pregunta. También tenga en cuenta que el acceso simultáneo también estaría en contra de la abstracción "espacio de direcciones privadas".

Entonces, a sus preguntas: el acceso simultáneo directo a RAM no es posible, ni con las mismas direcciones ni con las mismas. El uso de caché podría cubrir este hecho y permitir el acceso aparentemente simultáneo en algunos casos. Depende del nivel de caché y la construcción, así como de la localidad espacial y temporal de sus datos. Y sí, tiene razón: el procesamiento múltiple (núcleo) sin acceso RAM mejorado, no ayudará mucho para las aplicaciones intensivas en RAM.

Para una mejor comprensión: solo recuerde cómo funciona el Acceso directo a la memoria. Tanto la CPU como el dispositivo DMA pueden poner dirección al bus, por lo que deben excluirse mutuamente del uso simultáneo del bus.

katang
fuente
1

No le importa la RAM física, le importa más la memoria virtual y el espacio de direcciones de los procesos o subprocesos (todos los subprocesos del mismo proceso comparten un espacio de direcciones común) en la práctica.

Por supuesto, si está codificando un núcleo de sistema operativo multinúcleo, le importa mucho la coherencia de RAM y caché.

La mayoría de los procesadores multinúcleo tienen algún tipo de mecanismo de coherencia de caché . Los detalles son específicos del procesador. Dado que el procesador está utilizando cachés de CPU , a veces se comportan como si varios núcleos del procesador estuvieran accediendo a la misma ubicación de memoria simultáneamente.

Los estándares recientes de lenguajes industriales como C11 o C ++ 11 tienen algún modelo de memoria ( compatible con múltiples hilos) .

Basile Starynkevitch
fuente
0

Las CPU modernas están atadas físicamente a sus dispositivos de memoria externos para obtener el máximo ancho de banda de transferencia de datos. Esto se debe a los requisitos de integridad de señal (longitud de rastreo, terminación, sesgo de reloj, etc.) necesarios para mantener las altas velocidades de transferencia. Por ejemplo, en una placa base de varias CPU, cada CPU tiene un conjunto dedicado de ranuras DIMM. Independientemente de lo que puedan pensar los programadores de software, una CPU no puede acceder simplemente a los datos de la memoria externa de otra CPU. El software de administración de memoria de un sistema, ya sea a nivel del núcleo del sistema operativo, el hipervisor, los núcleos del plano de datos o de otro modo, maneja la transferencia de datos de memoria entre CPU.

Jeff Brower
fuente
1
esta publicación es bastante difícil de leer (muro de texto). ¿Te importaría editarlo en una mejor forma?
mosquito