Pull to refresh

Comments 9

Чтобы не посылать длину строки до посылки самой строки можно использовать MPI_Probe(), а вообще по-хорошему рекоммендую всем использовать Boost.MPI (reminder: оно не билдится by default когда собираете Boost), т.к. в этом случае посылка и получение композитных объектов становятся тривиальными, и плюс вы получаете дополнительные плюшки, как например возможность не вызывать больше MPI_Initialize()/MPI_Finalize(). Плюс к этому все становится такое «объектно-ориентированное, упорядоченное и вообще няшное»™.
А разве boost.mpi билдится с intel'евской либой? Как то пробывал собрать буст с Microsoft MPI, пришлось пилить напильником скрипты инсталяции буста, т.к. он не саппортил последние версии msmpi
Шикарно билдится. У меня по крайней мере. Другое дело что я периодически подпиливаю сам буст т.к. он за Intel C++ не всегда успевает. Но в целом все работает «на ура».
А поддержка UDP/Multicast есть? Как-то нелогично делать массовую рассылку по TCP.
UDP/Mulicast не поддерживаются.
TCP — лишь один из поддерживаемых видов транспорта, причем не основной.
К основным относятся специфичные для Infiniband программно-аппаратные интерфейсы и протоколы, например, DAPL (Direct Access Programming Library).
В частности в DAPL есть режим UD (User Datagram), который похож по концепции на UDP.
Полный список поддерживаемых интерфейсов транспорта доступен в Intel® MPI Library Reference Manual (на англ.).
Infiniband-это ко «взрослым» кластерам. Типичный «студенческий» вариант — 30-60 персоналок в компьютерном классе, воткнутые в хороший коммутатор с поддержкой мультикаста. Не зря я видимо свой велосипед ваял.
Динамическое подключение/отключение узлов возможно? Допустим идёт долгий (сутками) расчёт без промежуточного сохранения, и не хочется потерять данные при отказе одного из узлов. Или добавить мощности «на ходу» за счёт подключения нового сервера
Это существенно более высокоуровневая задача — сам алгоритм должен позволять динамически добавлять и убирать узлы. MPI, фактически, только отвечает за доставку, причем классический MPI своей близостью к фортрану-77 способен вызвать тошноту:
int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)


Полное собрание гадостей, начиная со знакового int в качестве счетчика элементов массива (конечно, кто бы мог подумать, что в массиве может быть больше 2147483647 элементов, на 64 разрядной машине-то) и заканчивая тем, что приходится работать с сырым указателем, а тип передавать отдельной константой — широчайшее поле для отстрела конечностей.

Очень жаль, что большинство вузовских курсов по параллельному программированию излагают именно классический MPI вместе с 77 фортраном (boost? Не знаем такое! Хотя какой там boost, некоторые и об STL понятия не имеют), Остается только надеяться на энтузиазм студентов.
Sign up to leave a comment.