В информатике распределенная память относится к многопроцессорной компьютерной системе , в которой каждый процессор имеет свою собственную частную память . [1] Вычислительные задачи могут работать только с локальными данными, и если требуются удаленные данные, вычислительная задача должна взаимодействовать с одним или несколькими удаленными процессорами. Напротив, многопроцессорная система с общей памятью предлагает единое пространство памяти, используемое всеми процессорами. Процессорам не нужно знать, где находятся данные, за исключением того, что могут быть потери производительности, и что следует избегать условий гонки.
В системе распределенной памяти обычно есть процессор, память и некоторая форма взаимосвязи, которая позволяет программам на каждом процессоре взаимодействовать друг с другом. Взаимосвязь может быть организована с помощью соединений точка-точка или отдельное оборудование может обеспечить коммутационную сеть. Топология сети является ключевым фактором в определении того, как масштабируется многопроцессорная машина . Связи между узлами могут быть реализованы с использованием некоторого стандартного сетевого протокола (например, Ethernet ), с использованием заказных сетевых соединений (используемых, например, в транспьютере ) или с использованием двухпортовой памяти .
Ключевой вопрос в программировании систем распределенной памяти — как распределить данные по памяти. В зависимости от решаемой задачи данные могут быть распределены статически или могут перемещаться по узлам. Данные могут перемещаться по требованию или могут быть заранее переданы на новые узлы.
Например, если задачу можно описать как конвейер, где данные x обрабатываются последовательно через функции f , g , h и т. д. (результатом является h ( g ( f ( x )))), то это можно выразить как задачу распределенной памяти, где данные сначала передаются узлу, который выполняет f , который передает результат на второй узел, который вычисляет g , и, наконец, на третий узел, который вычисляет h . Это также известно как систолическое вычисление .
Данные могут храниться статически в узлах, если большинство вычислений происходит локально, и только изменения на ребрах должны сообщаться другим узлам. Примером этого является моделирование, где данные моделируются с использованием сетки, и каждый узел имитирует небольшую часть большей сетки. На каждой итерации узлы информируют все соседние узлы о новых данных ребер.
Аналогично, в распределенной общей памяти каждый узел кластера имеет доступ к большой общей памяти в дополнение к ограниченной неразделяемой частной памяти каждого узла.
Распределенная общая память скрывает механизм коммуникации, но не скрывает задержку коммуникации.
Распределенная память относится к вычислительной системе, в которой каждый процессор имеет свою память. Вычислительные задачи эффективно работают с локальными данными, но когда требуются удаленные данные, задача должна взаимодействовать (используя явные сообщения) с удаленными процессорами для передачи данных. Этот тип параллельных вычислений является стандартным для суперкомпьютеров, оснащенных многими тысячами вычислительных узлов.