Las computadoras con CPU de múltiples núcleos tienen múltiples capas de caché en cada núcleo y una memoria global compartida (RAM). ¿Esto los hace memoria híbrida (distribuida compartida) o todavía son arquitecturas de memoria compartida?

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:

  1. 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.
  2. 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).

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).

Cuando dice Memoria compartida distribuida, se refiere a una organización que sigue a NUMA. Déjame explicarte con un simple ejemplo.

NUMA : Digamos que hay 4 personas ubicadas en la Casa A, B, C, D (cada casa está ubicada en diferentes lugares). Ahora consideremos que hay tiendas cerca de cada casa como Shop_A, Shop_B, Shop_C, Shop_D. Si A y B quieren obtener algo de Shop_A, entonces A lo obtendrá más rápido ya que está presente físicamente más cerca de A que B. Ahora considere que Shop_A a Shop_D son una gran tienda o algún gran complejo comercial. Lo mismo ocurre con la memoria en NUMA. Reemplace la casa con procesadores y compre con bancos de memoria.
(Información sobre los bancos de memoria : la memoria se divide en bancos, es decir, área de almacenamiento a la que se puede acceder en paralelo con otros bancos. Por lo tanto, el acceso al Banco 1 es independiente del acceso al Banco 2 y se puede hacer en paralelo. Por lo tanto, parte de la dirección se dividirá en dirección bancaria, dirección de fila, dirección de columna, etc.)

Ahora centrémonos en su pregunta: tener varias capas de caché en cada núcleo y una memoria global compartida no lo convierte en un DSM. Lo que lo hace DSM es que tiene una única memoria física organizada en bancos de manera que cada núcleo tiene un banco físico presente cerca y su tiempo de acceso a ese banco es más rápido en comparación con otros bancos. Este tipo de organización también se usa en cachés, cuando hay una gran cantidad de procesadores. En 64 procesadores principales, LLC también se divide en bancos para tener un acceso más rápido. (Obviamente, el código necesita explotar eso)

La arquitectura de memoria compartida es un término generalizado que sugiere que la memoria se comparte entre los procesadores. Incluye UMA y NUMA.
La memoria compartida es la terminología del concepto del sistema operativo.

El término “memoria compartida” generalmente se refiere a cómo el programador ve el sistema. Y en ese sentido, un multinúcleo es memoria compartida: si genera dos hilos donde uno escribe “x = 1” y luego el otro “imprime x”, el segundo imprimirá 1, porque ve la misma variable x que el otro hilo .

El término que generalmente se usa para describir la hibridación del sistema es “NUMA”: acceso no uniforme a la memoria. Esto se refiere al hecho de que si una variable está en un caché, es rápido acceder al núcleo que tiene ese caché, mientras que el otro núcleo puede acceder a él, pero solo con una penalización del protocolo de coherencia. Por lo tanto, ambos núcleos pueden acceder a la misma memoria, simplemente no es igual de rápido. Este término también se aplica a múltiples zócalos de procesador en un nodo / placa base: cada uno tiene su propia memoria y puede acceder a la memoria del otro, pero no tan rápido como el suyo.