Las respuestas de Victor y Davesh son completamente correctas: la memoria compartida significa que un subproceso que se ejecuta en algún lugar puede acceder a todos los datos en memoria, y este concepto es completamente disjunto de si partes de la jerarquía de memoria se comparten entre núcleos o incluso procesadores.
Para ilustrar el uso de un caso extremo: incluso puede convertir un clúster de memoria distribuida en una máquina de memoria compartida.
Sin embargo, me gustaría agregar dos cosas:
- siguiendo el significado de ‘compartido’ como se plantea en su pregunta, generalmente es el caché L3 el que también se comparte, mientras que L1 y L2 generalmente son los cachés locales para núcleos individuales.
- en el mismo significado, podría ver las arquitecturas de múltiples núcleos actuales como híbridas. Considere máquinas de memoria compartida de múltiples sockets. De hecho, muchas aplicaciones informáticas de alto rendimiento utilizan procesos individuales por socket y utilizan subprocesos para permitir que cada proceso vaya en paralelo sobre los núcleos del procesador dentro de ese socket (programación de estilo MPI + OpenMP).
Pensemos en este último punto. Dice que consideramos los dominios NUMA dentro de una arquitectura de memoria compartida como una máquina de memoria distribuida. Lo dejamos a un middleware (MPI) para que la comunicación entre procesos sea eficiente (mediante el uso de la memoria compartida).
- ¿Qué ranura de RAM se está utilizando cuando ejecuto un programa en Windows?
- ¿Por qué mi SolidWorks 2016 se retrasa repentinamente? ¿Mi PC tiene 8 GB de RAM y es un procesador i5 de sexta generación?
- ¿Cuáles son las especificaciones que debemos tener en cuenta al usar dos RAM en un sistema?
- Cómo aumentar la memoria virtual en una PC con Windows 7 32bit 3GB RAM
- ¿Por qué el diseño de RAM / memoria de un programa está dividido en diferentes secciones como stack, heap y BSS? ¿Por qué no solo memoria?
Llevemos ese último punto más allá. Si estamos dispuestos a “renunciar” a la vista de memoria compartida por una híbrida, ¿por qué no programar todo como si fuera memoria distribuida para empezar?
Esto es más transparente y mucho más fácil de trabajar. Dependiendo del problema en cuestión y la arquitectura utilizada, también conduce a un rendimiento superior:
MulticoreBSP para C: una biblioteca de alto rendimiento para la programación paralela de memoria compartida, AN Yzelman, RH Bisseling, D. Roose y K. Meerbergen en International Journal of Parallel Programming 42 (4), pp. 619-642 (2014).