Esto es lo que supongo que sucedería:
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 .
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?
fuente
nop
s en su código de ensamblajeRespuestas:
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:
podría ir de varias maneras:
Ambos quieren leer, simultáneamente:
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)
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.
fuente
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!
fuente
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.
fuente
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) .
fuente
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.
fuente