Файл: Принципы работы mpi в операционной системе Windows Краткая теория.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 06.12.2023

Просмотров: 37

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

}


Принципы работы MPI в операционной системе Windows
Краткая теория
MPI (Message Passing Interface) — ин­тер­фейс об­ме­на со­об­ще­ни­я­ми (ин­фор­ма­ци­ей) меж­ду од­но­вре­мен­но ра­бо­таю­щи­ми вы­чис­ли­тель­ны­ми про­цес­са­ми. Он ши­ро­ко ис­поль­зу­ет­ся для со­зда­ния па­ра­л­лель­ных про­грамм для вы­чис­ли­тель­ных си­стем с рас­пре­де­лён­ной па­мя­тью (кла­сте­ров).

MPICH — са­мая из­ве­ст­ная реа­ли­за­ция MPI, со­здан­ная в Ара­гон­ской на­цио­наль­ной ла­бо­ра­то­рии (США). Су­ще­ству­ют вер­сии этой биб­лио­те­ки для всех по­пу­ляр­ных опе­ра­ци­он­ных си­стем. К то­му же, она бес­плат­на. Пе­ре­чис­лен­ные фак­то­ры де­ла­ют MPICH иде­аль­ным ва­ри­ан­том для то­го, что­бы на­чать прак­ти­че­ское освое­ние MPI.

В дан­ной практической работе речь пой­дёт об MPICH. MPICH со­от­вет­ству­ет стан­дар­ту MPI, от­сю­да и на­зва­ние.

MPICH — это быст­ро­дей­ствую­щая и ши­ро­ко пор­ти­ру­е­мая реа­ли­за­ция стан­др­та MPI . Це­ли со­зда­ния MPICH сле­дую­щие:

  1. Предо­ста­вить реа­ли­за­цию MPI, ко­то­рая эф­фек­тив­но под­дер­жи­ва­ет раз­лич­ные вы­чис­ли­тель­ные и ком­му­ни­ка­ци­он­ные плат­фор­мы, вклю­чая об­ще­до­ступ­ные кла­сте­ры (на­столь­ные си­сте­мы, си­сте­мы с об­щей па­мя­тью, мно­го­ядер­ные ар­хи­тек­ту­ры), вы­со­ко­ско­ро­ст­ные се­ти (Ethernet 10 ГБит/с, InfiniBand, Myrinet, Quadrics) и экс­клю­зив­ные вы­чис­ли­тель­ные си­сте­мы .

  2. Сде­лать воз­мож­ны­ми пе­ре­до­вые ис­сле­до­ва­ния тех­но­ло­гии MPI с по­мо­щью лег­ко рас­ши­ря­е­мой мо­дуль­ной ст­рук­ту­ры для со­зда­ния про­из­вод­ных реа­ли­за­ций.

В ка­че­стве сре­ды раз­ра­бот­ки ис­поль­зуется Visual Studio или Dev C++. Для удоб­ства из­ло­же­ния со­здан­ную ва­ми про­грам­му, ис­поль­зу­ю­щую MPI, и пред­на­зна­чен­ную для за­пус­ка на не­сколь­ких вы­чис­ли­тель­ных уз­лах, бу­дем на­зы­вать MPI-про­грам­мой.

Прин­ци­пы ра­бо­ты MPICH


Начнем из­ло­же­ние материала о программе MPICH, с прин­ци­пов её ра­бо­ты.

MPICH для Microsoft Windows со­сто­ит из сле­дую­щих ком­по­нен­тов:

  • Ме­не­джер про­цес­сов smpd.exe, ко­то­рый пред­став­ля­ет со­бой си­стем­ную служ­бу (сер­вис­ное при­ло­же­ние). Ме­не­джер про­цес­сов ве­дёт спи­сок вы­чис­ли­тель­ных уз­лов си­сте­мы, и за­пус­ка­ет на этих уз­лах MPI-про­грам­мы, предо­став­ляя им не­об­хо­ди­мую ин­фор­ма­цию для ра­бо­ты и об­ме­на со­об­ще­ни­я­ми.

  • За­го­ло­воч­ные фай­лы (.h) и биб­лио­те­ки ста­дии ком­пи­ля­ции (.lib), не­об­хо­ди­мые для раз­ра­бот­ки MPI-про­грамм.

  • Биб­лио­те­ки вре­ме­ни вы­пол­не­ния (.dll), не­об­хо­ди­мые для ра­бо­ты MPI-про­грамм.

  • До­пол­ни­тель­ные ути­ли­ты (.exe), не­об­хо­ди­мые для на­строй­ки MPICH и за­пус­ка MPI-про­грамм.


Все ком­по­нен­ты, кро­ме биб­лио­тек вре­ме­ни вы­пол­не­ния, уста­нав­ли­ва­ют­ся по умол­ча­нию в пап­ку C:\Program Files\MPICH; dll-биб­лио­те­ки уста­нав­ли­ва­ют­ся в C:\Windows\System32.

Ме­не­джер про­цес­сов яв­ля­ет­ся ос­нов­ным ком­по­нен­том, ко­то­рый дол­жен быть уста­нов­лен и на­стро­ен на всех ком­пью­те­рах се­ти (биб­лио­те­ки вре­ме­ни вы­пол­не­ния мож­но, в край­нем слу­чае, ко­пи­ро­вать вме­сте с MPI-про­грам­мой). Осталь­ные фай­лы тре­бу­ют­ся для раз­ра­бот­ки MPI-про­грамм и на­строй­ки не­ко­то­ро­го «го­лов­но­го» ком­пью­те­ра, с ко­то­ро­го бу­дет про­из­во­дить­ся их за­пуск.

Ме­не­джер ра­бо­та­ет в фо­но­вом ре­жи­ме и ждёт за­про­сов к не­му из се­ти со сто­ро­ны «го­лов­но­го» ме­не­дже­ра про­цес­сов (по умол­ча­нию ис­поль­зу­ет­ся се­те­вой порт 8676). Что­бы как-то обезопа­сить се­бя от ха­ке­ров и ви­ру­сов, ме­не­джер тре­бу­ет па­роль при об­ра­ще­нии к не­му. Ко­гда один ме­не­джер про­цес­сов об­ра­ща­ет­ся к дру­го­му ме­не­дже­ру про­цес­сов, он пе­ре­да­ёт ему свой па­роль.



Ри­с. 1.1. Схе­ма ра­бо­ты MPICH на кла­сте­ре.
В со­вре­мен­ных кла­сте­рах «сеть пе­ре­да­чи дан­ных» обыч­но от­де­ля­ет­ся от «управ­ляю­щей се­ти»

За­пуск MPI-про­грам­мы про­из­во­дит­ся сле­дую­щим об­ра­зом 

(смот­ри­те ри­с. 1.1.):

  1. Поль­зо­ватель с по­мо­щью про­грам­мы Mpirun (или Mpiexec, при ис­поль­зо­ва­нии MPICH2 под Microsoft Windows) ука­зы­ва­ет имя ис­пол­ня­е­мо­го фай­ла MPI-про­грам­мы и тре­бу­е­мое чис­ло про­цес­сов. Кро­ме то­го, мож­но ука­зать имя поль­зо­ва­те­ля и па­роль: про­цес­сы MPI-про­грам­мы бу­дут за­пус­кать­ся от име­ни это­го поль­зо­ва­те­ля.

  2. Mpirun пе­ре­да­ёт све­де­ния о за­пус­ке ло­каль­но­му ме­не­дже­ру про­цес­сов, у ко­то­ро­го име­ет­ся спи­сок до­ступ­ных вы­чис­ли­тель­ных уз­лов.

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

  4. Ме­не­дже­ры про­цес­сов за­пус­ка­ют на вы­чис­ли­тель­ных уз­лах не­сколь­ко ко­пий MPI-про­грам­мы (воз­мож­но, по не­сколь­ко ко­пий на каж­дом уз­ле), пе­ре­да­вая про­грам­мам не­об­хо­ди­мую ин­фор­ма­цию для свя­зи друг с дру­гом.

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

. Вме­сто это­го ме­не­джер про­цес­сов пе­ре­да­ёт уз­лам путь к ис­пол­ня­е­мо­му фай­лу про­грам­мы точ­но в том ви­де, в ко­то­ром поль­зо­ватель ука­зал этот путь про­грам­ме Mpirun. Это озна­ча­ет, что ес­ли, на­при­мер, за­пус­тить про­грам­му C:\proga.exe, то все ме­не­дже­ры про­цес­сов на вы­чис­ли­тель­ных уз­лах бу­дут пы­тать­ся за­пу­стить файл C:\proga.exe. Ес­ли хо­тя бы на од­ном из уз­лов та­ко­го фай­ла не ока­жет­ся, про­изой­дёт ошиб­ка за­пус­ка MPI-про­грам­мы.

Что­бы каж­дый раз не ко­пи­ро­вать вруч­ную про­грам­му и все не­об­хо­ди­мые для её ра­бо­ты фай­лы на вы­чис­ли­тель­ные уз­лы кла­сте­ра, обыч­но ис­поль­зу­ют об­щий се­те­вой ре­сурс. В этом слу­чае поль­зо­ватель ко­пи­ру­ет про­грам­му и до­пол­ни­тель­ные фай­лы на се­те­вой ре­сурс, ви­ди­мый все­ми уз­ла­ми кла­сте­ра, и ука­зы­ва­ет путь к фай­лу про­грам­мы на этом ре­сур­се. До­пол­ни­тель­ным удоб­ством та­ко­го под­хо­да яв­ля­ет­ся то, что при на­ли­чии воз­мож­но­сти за­пи­си на об­щий се­те­вой ре­сурс за­пу­щен­ные ко­пии про­грам­мы мо­гут за­пи­сы­вать ту­да ре­зуль­та­ты сво­ей ра­бо­ты.
Ра­бо­та MPI-про­грам­мы про­ис­хо­дит сле­дую­щим об­ра­зом:

  1. Про­грам­ма за­пус­ка­ет­ся и ини­циа­ли­зи­ру­ет биб­лио­те­ку вре­ме­ни вы­пол­не­ния MPICH пу­тём вы­зо­ва функ­ции MPI_Init.

  2. Биб­лио­те­ка по­лу­ча­ет от ме­не­дже­ра про­цес­сов ин­фор­ма­цию о ко­ли­че­стве и ме­сто­по­ло­же­нии дру­гих про­цес­сов про­грам­мы, и уста­нав­ли­ва­ет с ни­ми связь.

  3. По­сле это­го за­пу­щен­ные ко­пии про­грам­мы мо­гут об­ме­ни­вать­ся друг с дру­гом ин­фор­ма­ци­ей по­сред­ством биб­лио­те­ки MPICH. С точ­ки зре­ния опе­ра­ци­он­ной си­сте­мы биб­лио­те­ка яв­ля­ет­ся ча­стью про­грам­мы (ра­бо­та­ет в том же про­цес­се), по­это­му мож­но счи­тать, что за­пу­щен­ные ко­пии MPI-про­грам­мы об­ме­ни­ва­ют­ся дан­ны­ми на­пря­мую друг с дру­гом, как лю­бые дру­гие при­ло­же­ния, пе­ре­даю­щие дан­ные по се­ти.

  4. Кон­соль­ный ввод-вы­вод всех про­цес­сов MPI-про­грам­мы пе­ре­на­прав­ля­ет­ся на кон­соль, на ко­то­рой за­пу­ще­на Mpirun. Пе­ре­на­прав­ле­ни­ем вво­да-вы­во­да за­ни­ма­ют­ся ме­не­дже­ры про­цес­сов, так как имен­но они за­пу­сти­ли ко­пии MPI-про­грам­мы, и по­это­му мо­гут по­лу­чить до­ступ к по­то­кам вво­да-вы­во­да про­грамм.

  5. Пе­ред за­вер­ше­ни­ем все про­цес­сы вы­зы­ва­ют функ­цию MPI_Finalize, ко­то­рая кор­рект­но за­вер­ша­ет пе­ре­да­чу и при­ём всех со­об­ще­ний, и от­клю­ча­ет MPICH.


Все опи­сан­ные вы­ше прин­ци­пы дей­ству­ют, да­же ес­ли за­пустить

MPI-про­грам­му на од­ном ком­пью­те­ре.

За­пуск MPI-про­грамм


Для за­пус­ка MPI-про­грамм в ком­плект MPICH вхо­дит про­грам­ма с гра­фи­че­ским ин­тер­фей­сом Wmpiexec, ко­то­рая пред­став­ля­ет со­бой обо­лоч­ку во­круг со­от­вет­ствую­щей ути­ли­ты ко­манд­ной стро­ки Mpiexec. К со­жа­ле­нию, Wmpiexec не всегда работает корректно, по­это­му са­мый подходящий спо­соб за­пус­кать MPI-про­грам­мы — это поль­зо­вать­ся не­по­сред­ствен­но Mpiexec. Од­на­ко, рассмотрим Wmpiexec, так как эта про­грам­ма ин­ту­и­тив­но по­нят­нее.

Ок­но про­грам­мы Wmpiexec по­ка­за­но на ри­с. 1.2. (об­ра­ти­те вни­ма­ние, что вклю­чён фла­жок «more options»).





Ри­с. 1.2. Про­грам­ма Wmpiexec

Эле­мен­ты управ­ле­ния ок­на име­ют сле­дую­щий смысл:

  • По­ле вво­да «Application»: сю­да вво­дит­ся путь к MPI-про­грам­ме. Как уже бы­ло ска­за­но ра­нее, путь пе­ре­да­ёт­ся в не­из­мен­ном ви­де на все ком­пью­те­ры се­ти, по­это­му же­ла­тель­но, что­бы про­грам­ма рас­по­ла­га­лась в об­щей се­те­вой пап­ке.

  • «Number of processes»: чис­ло за­пус­кае­мых про­цес­сов. По умол­ча­нию про­цес­сы рас­пре­де­ля­ют­ся по­ров­ну меж­ду ком­пью­те­ра­ми се­ти, од­на­ко это по­ве­де­ние мож­но из­ме­нить при по­мо­щи кон­фи­гу­ра­ци­он­но­го фай­ла.

  • Кноп­ка «Execute» за­пус­ка­ет про­грам­му; кноп­ка «Break» при­ну­ди­тель­но за­вер­ша­ет все за­пу­щен­ные эк­зем­пля­ры.

  • Фла­жок «run in a separate window» пе­ре­на­прав­ля­ет вы­вод всех эк­зем­пля­ров MPI-про­грам­мы в от­дель­ное кон­соль­ное ок­но.

  • Кноп­ка «Show Command» по­ка­зы­ва­ет в по­ле спра­ва ко­манд­ную стро­ку, ко­то­рая ис­поль­зу­ет­ся для за­пус­ка MPI-про­грам­мы (Wmpiexec — обо­лоч­ка над Mpiexec). Ко­манд­ная стро­ка со­би­ра­ет­ся из всех на­стро­ек, вве­дён­ных в осталь­ных по­лях ок­на.

  • Да­лее идёт боль­шое тек­сто­вое по­ле, в ко­то­рое по­па­да­ет ввод-вы­вод всех эк­зем­пля­ров MPI-про­грам­мы, ес­ли не уста­нов­лен фла­жок «run in a separate window».

  • Фла­жок «more options» по­ка­зы­ва­ет до­пол­ни­тель­ные па­ра­мет­ры.

  • «working directory»: сю­да мож­но вве­сти ра­бо­чий ка­та­лог про­грам­мы. Опять же, этот путь дол­жен быть ве­рен на всех вы­чис­ли­тель­ных уз­лах. Ес­ли путь не ука­зан, то в ка­че­стве ра­бо­че­го ка­та­ло­га бу­дет ис­поль­зо­вать­ся ме­сто на­хож­де­ния MPI-про­грам­мы.

  • «hosts»: здесь мож­но ука­зать че­рез про­бел спи­сок вы­чис­ли­тель­ных уз­лов, ис­поль­зуе­мых для за­пус­ка MPI-про­грам­мы. Ес­ли это по­ле пу­стое, то ис­поль­зу­ет­ся спи­сок, хра­ня­щий­ся в на­строй­ках ме­не­дже­ра про­цес­сов те­ку­ще­го уз­ла.

  • «environment variables»: в этом по­ле мож­но ука­зать зна­че­ния до­пол­ни­тель­ных пе­ре­мен­ных окру­же­ния, уста­нав­ли­вае­мых на всех уз­лах на вре­мя за­пус­ка MPI-про­грам­мы. Син­так­сис сле­дую­щий: имя_1=зна­че­ние_1, имя_2=зна­че­ние_2.

  • «drive mappings»: здесь мож­но ука­зать се­те­вой диск, под­клю­чае­мый на каж­дом вы­чис­ли­тель­ном уз­ле на вре­мя ра­бо­ты MPI-про­грам­мы. Син­та­кис: Z:\\winsrv\wdir.

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

  • «extra mpiexec options»: в это по­ле мож­но вве­сти до­пол­ни­тель­ные клю­чи для ко­манд­ной стро­ки Mpiexec.