Хорош ли MPI для IPC с высокой громкостью в программном режиме реального времени?

StackOverflow https://stackoverflow.com/questions/1875783

Вопрос

Если бы у меня был один сервер и у меня было два типа процессов A (много процессов с большим количеством потоков) и B (один процесс из n потоков с n процессорами), и я хотел бы отправлять БОЛЬШОЕ количество односторонних сообщений от A к B.Является ли MPI лучшей реализацией для этого, чем пользовательская реализация, использующая:

  1. Доменные сокеты Unix
  2. Windows Назвала Каналы
  3. Общая память

Я подумывал о написании своей собственной библиотеки на основе 1 и 2, и мне также интересно, лучше ли 3, поскольку для общей памяти потребуется блокировка.

Процесс A предоставляет внешние службы, поэтому использование ресурсов B и передача сообщений в целом должны потреблять как можно меньше ресурсов, и A может быть реализован как в блокирующем, так и в неблокирующем режиме при отправке сообщений.Использование ресурсов B и передача сообщений должны линейно масштабироваться в соответствии с использованием A .

В конечном итоге мне также понадобится возможность вещания между машинами.Вероятно , для процесса B.

Мой прощальный вопрос таков:является ли MPI (в частности, OpenMPI) хорошей библиотекой для этого и использует ли она наиболее оптимальные примитивы ядра в различных операционных системах.

Это было полезно?

Решение

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

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

Если вы собираетесь осуществлять широковещательную передачу между несколькими компьютерами, MPI, вероятно, является лучшим подходом, чем пытаться внедрить свой собственный метод.

Кроме того, MPI поддерживает довольно много режимов связи.Это действительно поддерживает общая память для очень быстрой связи с одним компьютером, а также TCP для межмашинной связи (плюс некоторые коммерческие, более быстрые опции).

Другие советы

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

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

пса Мы использовали MPICH, потому что в то время он лучше всего работал в Windows, и нам нужна была такая гибкость, я не использовал MPICH2 или OpenMPI.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top