Затраты MPI в настройке общей памяти - PullRequest
0 голосов
/ 10 октября 2009

Я хочу распараллелить программу. Это не так сложно с потоками, работающими с одной большой структурой данных в разделяемой памяти. Но я хочу иметь возможность использовать его для распространения по кластеру, и мне нужно выбрать технологию для этого. MPI - это одна идея.

Вопрос в том, какие накладные расходы будут иметь MPI (или другую технологию), если я пропущу реализацию специализированной версии для разделяемой памяти и разрешу MPI обрабатывать все случаи?

Обновление:

Я хочу вырастить большую структуру данных (игровое дерево) одновременно на многих компьютерах. Большинство его частей будет находиться только на одном узле кластера, но некоторые из них (нерегулярная вершина дерева) будут время от времени использоваться и синхронизироваться.

На машине с разделяемой памятью я бы хотел, чтобы это было достигнуто с помощью разделяемой памяти. Можно ли сделать это в общем?

Ответы [ 2 ]

1 голос
/ 13 ноября 2009

Все популярные реализации MPI будут взаимодействовать локально через разделяемую память. Производительность очень хорошая, если вы не тратите все свое время на упаковку и распаковку буферов (т. Е. Ваш дизайн приемлемый). Фактически конструкция, навязанная вам MPI, может работать лучше, чем большинство многопоточных реализаций, поскольку отдельное адресное пространство улучшает согласованность кэша. Чтобы постоянно превосходить MPI, многопоточные реализации должны знать иерархию кэша и над чем работают другие ядра.

При хорошем сетевом оборудовании (например, InfiniBand) HCA отвечает за включение и отключение ваших буферов в сети, чтобы процессор мог выполнять другие функции. Кроме того, поскольку многие задания имеют ограниченную пропускную способность памяти, они будут работать лучше при использовании, например, 1 ядро ​​на каждый сокет на нескольких узлах, чем при использовании нескольких ядер на сокет.

0 голосов
/ 10 октября 2009

Это зависит от алгоритма. Чистая межкластерная связь на несколько порядков медленнее, чем общая память, либо как межпроцессное взаимодействие, либо как несколько потоков внутри процесса. Поэтому вы хотите минимизировать межкластерный трафик, например, дублируя данные, где это возможно и практически осуществимо, или разбивая проблему таким образом, чтобы свести к минимуму обмен данными между узлами.

Для «смущающих» параллельных алгоритмов с небольшим межузловым обменом это простой выбор - это такие проблемы, как перебор поиска ключа шифрования методом перебора, когда каждый узел может обрабатывать числа в течение длительных периодов и периодически отчитываться перед центральным узлом, но без связи требуется для проверки ключей.

...