En informática , la memoria distribuida se refiere a un sistema informático multiprocesador en el que cada procesador tiene su propia memoria privada . [1] Las tareas computacionales solo pueden operar sobre datos locales y, si se requieren datos remotos, la tarea computacional debe comunicarse con uno o más procesadores remotos. Por el contrario, un multiprocesador de memoria compartida ofrece un único espacio de memoria utilizado por todos los procesadores. Los procesadores no tienen que saber dónde residen los datos, excepto que puede haber penalizaciones de rendimiento y que se deben evitar las condiciones de carrera.
En un sistema de memoria distribuida, normalmente hay un procesador, una memoria y alguna forma de interconexión que permite que los programas de cada procesador interactúen entre sí. La interconexión se puede organizar con enlaces punto a punto o con hardware independiente que puede proporcionar una red de conmutación. La topología de red es un factor clave para determinar cómo se escala la máquina multiprocesador . Los enlaces entre nodos se pueden implementar utilizando algún protocolo de red estándar (por ejemplo, Ethernet ), utilizando enlaces de red a medida (utilizados, por ejemplo, en el transputer ) o utilizando memorias de doble puerto .
La cuestión clave en la programación de sistemas de memoria distribuida es cómo distribuir los datos entre las memorias. Dependiendo del problema resuelto, los datos pueden distribuirse estáticamente o pueden moverse a través de los nodos. Los datos pueden moverse a demanda o pueden enviarse a los nuevos nodos con anticipación.
Por ejemplo, si un problema se puede describir como una tubería donde los datos x se procesan posteriormente a través de las funciones f , g , h , etc. (el resultado es h ( g ( f ( x )))), entonces esto se puede expresar como un problema de memoria distribuida donde los datos se transmiten primero al nodo que realiza f que pasa el resultado al segundo nodo que calcula g , y finalmente al tercer nodo que calcula h . Esto también se conoce como cálculo sistólico .
Los datos se pueden mantener de forma estática en los nodos si la mayoría de los cálculos se realizan de forma local y solo es necesario informar a otros nodos sobre los cambios en los bordes. Un ejemplo de esto es la simulación, en la que los datos se modelan mediante una cuadrícula y cada nodo simula una pequeña parte de la cuadrícula más grande. En cada iteración, los nodos informan a todos los nodos vecinos sobre los nuevos datos de los bordes.
De manera similar, en la memoria compartida distribuida, cada nodo de un clúster tiene acceso a una gran memoria compartida además de la memoria privada no compartida limitada de cada nodo.
La memoria compartida distribuida oculta el mecanismo de comunicación, no oculta la latencia de la comunicación.
La memoria distribuida se refiere a un sistema informático en el que cada procesador tiene su propia memoria. Las tareas computacionales funcionan de manera eficiente con datos locales, pero cuando se requieren datos remotos, la tarea debe comunicarse (usando mensajes explícitos) con procesadores remotos para transferir datos. Este tipo de computación paralela es estándar en supercomputadoras equipadas con muchos miles de nodos de computación.