2009-10-09 5 views
0

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

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

Update:

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

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

+0

как указано, укажите более подробные сведения о алгоритме, который вы хотите распараллелить. – Alexandru

ответ

0

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

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

1

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

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

Смежные вопросы