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

14

Esto es lo que supongo que sucedería:

  1. Si dos núcleos intentaron acceder a la misma dirección en la RAM, uno tendría que esperar para que el otro acceda a la RAM. La segunda vez que cada Core intente acceder a la misma dirección, es posible que aún tengan esa memoria RAM en caché, de modo que puedan acceder a sus respectivas cachés simultáneamente .

  2. Si dos núcleos intentaron acceder a direcciones diferentes en la misma RAM, uno tendría que esperar para que la otra acceda a la RAM.

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

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

    
pregunta Lost Hobbit 15.01.2013 - 16:29

5 respuestas

7

Resumen: en general, 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 memoria de su máquina, debería poder ver si un proceso de un solo hilo 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és usando. Suponiendo algo como SMP moderno y SDRAM:

  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 un caché, pero aún necesitan coordinar el acceso al bus: idealmente, cualquier chip que no emitiera, la lectura simplemente detendrá la respuesta
    • si ambos quieren escribir:

      • dos núcleos en el mismo chip solo se escribirán en el mismo caché, y eso solo se debe vaciar en la RAM una vez. De hecho, como la memoria se leerá y escribirá en la RAM por línea de caché, las escrituras en direcciones distintas pero lo suficientemente cercanas se pueden unir en una sola escritura en la RAM

      • dos núcleos en chips diferentes tienen un conflicto, y la línea de caché tendrá que volver a escribirse en la RAM mediante chip1, se buscará en el caché de chip2, se modificará y luego se escribirá de nuevo (no tengo idea si la escritura / búsqueda se puede unir por espionaje)

  2.   

    Si dos núcleos intentaron acceder a diferentes direcciones ...

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

respondido por el Useless 15.01.2013 - 17:41
7
  

Entonces, ¿pueden varias CPU / núcleos acceder a la misma memoria RAM simultáneamente, o es lo que digo que 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 individuales de instrucción múltiple, y dichas máquinas están diseñadas para proporcionar los mismos datos a Varios procesadores todos al mismo tiempo. Una clase relacionada de máquinas conocidas como arquitecturas SIMD (datos múltiples de instrucción única) son mucho más comunes y también proporcionan acceso a las mismas memoria al mismo tiempo, pero la memoria contiene instrucciones en lugar de datos. Tanto en MIMD como en SIMD, "acceso" significa acceso de lectura. ¡Puedes imaginar los problemas que tendrías si dos unidades intentaran escribir en la misma ubicación al mismo tiempo!

    
respondido por el Caleb 15.01.2013 - 17:21
1

Aunque la mayoría de las respuestas se abordan desde el lado del software y / o el modelo de hardware, la forma más limpia es considerar cómo funcionan los chips físicos de RAM. (El caché se ubica 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 de RAM tienen un solo decodificador de dirección, que recibe la dirección de la celda de memoria, que llega al bus de direcciones (y de manera similar a un bus de datos, ya sea dentro o fuera). Las memorias actuales están integradas 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, por lo que el chip RAM puede recibir una dirección de celda a la vez. Hasta que no pueda asegurarse de que los dos núcleos ponen la misma dirección en el bus de direcciones, el acceso simultáneo al bus por dos conductores de bus diferentes (como los núcleos) no es físicamente posible. (Y, si es lo mismo, es redundante).

El resto es la llamada aceleración de hardware. El bus de coherencia, el caché, el acceso a SIMD, etc. son solo algunas fachadas agradables frente a la memoria RAM física, de lo que se trataba su pregunta. Los aceleradores mencionados pueden cubrir la lucha por el uso exclusivo del bus de direcciones, 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 sería contrario a la abstracción del "espacio privado de direcciones".

Por lo tanto, a sus preguntas: el acceso directo a la memoria RAM no es posible, ni con la misma dirección ni con direcciones diferentes. El uso de la memoria caché puede cubrir este hecho y permitir el acceso aparentemente simultáneo en algunos casos. Depende del nivel y la construcción del caché, así como de la localidad espacial y temporal de sus datos. Y sí, tiene razón: el procesamiento multi (núcleo) sin acceso RAM mejorado no ayudará mucho a las aplicaciones que utilizan mucha RAM.

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

    
respondido por el katang 10.04.2015 - 21:37
0

Las CPU modernas están físicamente conectadas a sus dispositivos de memoria externa para obtener el máximo ancho de banda de transferencia de datos. Esto se debe a los requisitos de integridad de la señal (longitud de rastreo, terminación, sesgo del reloj, etc.) necesarios para mantener las altas tasas de transferencia. Por ejemplo, en una placa madre con 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 simplemente acceder a los datos de la memoria externa de otra CPU. El software de administración de memoria de un sistema, ya sea a nivel de kernel del sistema operativo, hipervisor, núcleos de plano de datos, o de otro modo, maneja la transferencia de datos de memoria entre CPU.

    
respondido por el Jeff 26.03.2015 - 13:13
0

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

Por supuesto, si está codificando un kernel de sistema operativo de múltiples núcleos, le preocupa mucho la memoria RAM y la coherencia de la caché.

La mayoría de los procesadores de varios núcleos 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. / p>

Estándares recientes de lenguajes industriales como C11 o C ++ 11 tiene algunos (conscientes de varios hilos) modelo de memoria .

    
respondido por el Basile Starynkevitch 26.03.2015 - 13:20

Lea otras preguntas en las etiquetas