LINUX.ORG.RU

Прояснение некоторых мест насчёт MPI и параллельности.

 


0

1

Правильно ли я понимаю, что все реализации MPI позволяют создать параллельную программу, для запуска которой нужно обязательно использовать mpirun (hydra, etc)?
Таким образом с её помощью не получится сделать параллельную библиотеку, функции которой будет вызывать приложение на другом языке?
Есть ли то, что мне нужно, т.е. возможность создать кроссплатформенную параллельную библиотеку?

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

★★★★

Последнее исправление: aptyp (всего исправлений: 1)

Да поправят меня более сведущие в этом вопросе, но вроде бы MPI заточена на запуск множества копий _приложения_ на разных машинах/ядрах проца. И без mpirun там никак. Возможно, что-то нужное Вам найдется в расширениях конкретных реализаций: MPICH-2 или OpenMPI.

anonymous
()

а в чем ты видишь некроссплатформенность? mpirun есть везде, даже в венде (есть реализация mpi от микрософт),

Reset ★★★★★
()
Ответ на: комментарий от Reset

Некроссплатформенности я не вижу. Куча реализаций MPI есть под кучу платформ. Мне интересно, можно ли с помощью MPI-реализации сделать параллельную библиотеку.

aptyp ★★★★
() автор топика

Наверное, придётся создавать эту кроссплатформенную библиотеку на том же другом языке при условии, что тот язык имеет биндинги к mpi.

gag ★★★★★
()

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

tailgunner ★★★★★
()
Ответ на: комментарий от aptyp

можно, но программа, которая её использует должна запускаться через mpirun на той версии mpi, которую ты использовал при сборке библиотеки

Reset ★★★★★
()

Другой вопрос

Чтобы не создавать новую тему, задам следующий вопрос здесь, как реализовать сообщение между mpi и обычной программой? Вот здесь stackoverflow задан практически такой же вопрос, но ни один ответ галочкой не отмечен. Вариант

mpirun -n 1 big_program : -n 20 little_program
не подходит, так запуск mpi будет не всё время, и делаться это будет модулем апача.

aptyp ★★★★
() автор топика
Ответ на: Другой вопрос от aptyp

MPI-программы ровно так же могут общаться по сети, как и обычные. За счет того, что неизвестно, на каком узле запускается конкретная программа, тебе может понадобиться брокер.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Процесс с нулевым рангом разве не на текущем узле запускается. Ну да, большое спасибо.

aptyp ★★★★
() автор топика
Ответ на: комментарий от aptyp

Процесс с нулевым рангом разве не на текущем узле запускается. Ну да, большое спасибо.

Что именно тебе непонятно в термине «брокер»?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

В моём понимании брокер определяет какой процесс на каком узле, как это реализовать мне непонятно.

aptyp ★★★★
() автор топика
Ответ на: комментарий от aptyp

В моём понимании брокер определяет какой процесс на каком узле, как это реализовать мне непонятно.

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

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

и к которому подсоединяется «обычная программа» и спрашивает «где на этот раз MPI-приложение».

уж лучше заставить «брокера» проксировать запросы к реальному приложению.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

уж лучше заставить «брокера» проксировать запросы к реальному приложению.

Это уже «прокси», а не «брокер» :) Но, конечно, это тоже вариант.

ЕМНИП, в MPI есть какие-то похожие механизмы.

tailgunner ★★★★★
()
Ответ на: комментарий от i-rinat

в смысле реальное приложение? или имеешь ввиду, чтобы в случае, если mpi-проге те же самые параметры подсовывать, заново не вычислялось?

aptyp ★★★★
() автор топика
Ответ на: комментарий от aptyp

А каким образом MPI-приложение передаст брокеру свой адрес?

Кхм. Это замаскированный вопрос «как мне узнать адрес хоста, на котором запущена программа» или что? Можешь просто соединиться с брокером, а он сам вытащит имя хоста, с которого пришло соединение (getpeername) %).

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Да, этот самый вопрос:-) Чтобы соединиться с брокером нужно знать, где он находится. Видимо самое простое: брокер запускает mpirun ..., и при запуске передавать информацию о брокере.

aptyp ★★★★
() автор топика
Ответ на: комментарий от aptyp

Видимо самое простое: брокер запускает mpirun ...,

Я не вижу выгоды.

и при запуске передавать информацию о брокере.

При запуске MPI-программы можно передавать ей адрес долгоживущего брокера.

tailgunner ★★★★★
()

Блин, сложности какие. 0й процесс запускается на том хосте, на котором mpirun, если специально не приняты меры против этого.

Во вторых mpi это не какоето шаманско астральное чорное колдунство, а обычные юникс-процессы. По сути, один и тот же бинарь программа mpirun запускает на разных хостах с разными параметрами. И эти процессы далее открывают к друг другу сокеты(если драйвер tcp/ip) и общаются друг с другом.

Учитывая что вы упомянули слово apache, у вас речь идет не о библиотеке а о том что предложил tailgunner - запускаете при помощи mpirun ваше mpi приложение и общаетесь с ним через сокет. Код взаимодействия через сокет пихаете в нулевой процесс.

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

kernel ★★☆
()
Ответ на: комментарий от kernel

да, я уже это понял всё из разговора с tailgunnerом. вообще, надо будет почитать Таненбаума)

aptyp ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.