2013-08-05 3 views
1

Я изучаю различные модели параллельного программирования, и я просто наткнулся на MPI. Есть несколько вещей, о которых я не уверен. Из того, что я понимаю:Нужно уточнить на MPI

  1. Основная функция MPI - обеспечить связь между связанными процессами, выполняющимися параллельно в кластере. Это верно? На главном узле запускаются программы
  2. , которые, в свою очередь, связывают конкретные задачи с рабочими узлами и получают результаты. Нет необходимости в копировании кода на каждом рабочем узле.

Кроме того, несколько обновленных фреймворков MPI, которые я нашел, как представляется, поддерживают ограниченный набор языков. Я смотрел на эксперименты с этим на Java, но все библиотеки Java MPI, которые я нашел, были либо датированы, либо, похоже, не имели зрелости для C и Fortran. Почему это? Я думаю, что передача сообщений была бы очень полезной функцией для тех, кто пишет параллельную или распределенную программу, поэтому почему MPI не является более популярным за пределами своей ниши?

+0

MPI больше используется в научном программировании, у него есть история использования, а язык выбора (в течение длительного времени) научного сообщества был/является C/Fortran. – arynaq

+0

(1) является правильным; (2) нет. –

+0

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

ответ

3

MPI традиционно является моделью SPMD, где один код работает на множестве процессов (обычно распределяется по нескольким узлам/процессорам/ядрам и т. Д.). Эти процессы явно передают сообщения, используя вызовы в MPI (Интерфейс передачи сообщений). Затем отдельные процессы могут уйти, чтобы выполнять свою работу и сообщать снова, когда это необходимо. Это не язык задач, где задания могут автоматически распределяться на рабочие узлы. Существуют и другие языки, которые делают такие вещи (Hadoop/MapReduce, Charm ++ и т. Д. Могут вписаться в эту модель).

В стандарте MPI (http://www.mpi-forum.org/docs/docs.html), который определен Форумом MPI, указаны конкретные требования к языку. До настоящего времени для реализации MPI было всего три языка: C, C++ и FORTRAN (и фактически требование C++ было удалено). Причина этого в том, что это языки, наиболее часто используемые научными приложениями, использующими MPI. Это не препятствует существованию других языковых привязок, но поддержка каждого языка является большой нагрузкой для реализаций и не всегда возможна. Есть много других языковых привязок в наличии:

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

+0

Да, но я только что проверил ссылку Java, которую вы опубликовали. Это все «временное», «все еще работающее», «продолжающееся» ... Не создается впечатление, что оно популярно или зрело. – spacitron

+0

Вы правы. Это не было в течение долгого времени, поэтому оно не будет столь же зрелым, как «официально поддерживаемые» языки. Однако он будет работать (AFAIK). Возможно, вам понадобится получить ночные tarballs вместо последнего выпуска, но вы можете идти в тупик. Я не могу говорить о его популярности. –

+1

Вы правы, что реализация Open MPI Java является «временной». FWIW, мы буквально собираемся перенести новую версию на Open MPI SVN trunk - возможно, на этой неделе. Он намного более совершенен, чем предыдущая версия, имеет немного лучшую производительность, отличный вкус, меньше заполняет и т. Д. Зайдите на http://www.open-mpi.org/nightly/trunk/ для ночных снимков с моментальным снимком позже на этой неделе. Там будет README для Java, который описывает, как его использовать и т. Д. –

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