Хелпикс

Главная

Контакты

Случайная статья





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



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

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

Ри­су­нок 13. Про­грам­ма 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-про­грам­мы. Ес­ли это по­ле пу­стое, то ис­поль­зу­ет­ся спи­сок, хра­ня­щий­ся в на­строй­ках ме­не­дже­ра про­цес­сов те­ку­ще­го уз­ла (смот­ри­те раз­дел «На­строй­ка MPICH»).

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

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

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

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

Вме­сте с MPICH по­став­ля­ет­ся об­ра­зец MPI-про­грам­мы: C: \​ Program Files\​ MPICH2\​ examples\​ cpi. exe (ис­ход­ный код так­же име­ет­ся). Это про­стая про­грам­ма, при­бли­жён­но вы­чис­ляю­щая зна­че­ние чис­ла Пи пу­тём чис­лен­но­го вы­чис­ле­ния сле­дую­ще­го ин­тег­ра­ла:

Вна­ча­ле по­про­бу­ем за­пу­стить один, два, и че­ты­ре про­цес­са на од­ном ком­пью­те­ре. Что­бы MPICH не рас­пре­де­лял за­пус­кае­мые про­цес­сы меж­ду имею­щи­ми­ся уз­ла­ми, от­клю­чим ра­бо­ту с се­тью; для это­го су­ще­ству­ет ключ ко­манд­ной стро­ки -localonly. При его до­бав­ле­нии ме­не­джер про­цес­сов не ис­поль­зу­ет­ся. Это очень по­лез­но, ес­ли по ка­ким-ли­бо при­чи­нам MPICH не уда­ёт­ся на­стро­ить. Вве­ди­те этот ключ в по­ле «extra mpiexec options» (ри­су­нок 13).

В по­ле «Application» вве­ди­те путь к про­грам­ме cpi. exe. Так как про­грам­ма за­пус­ка­ет­ся на од­ном ком­пью­те­ре, путь мож­но вво­дить ло­каль­ный.

«Number of processes» вве­ди­те рав­ным 1, и на­жми­те кноп­ку «Execute». Про­грам­ма за­пу­стит­ся и спро­сит чис­ло ин­тер­ва­лов для чис­лен­но­го ин­тег­ри­ро­ва­ния. Вве­ди­те 100000000, и на­жми­те Ctrl+Enter (по не­из­ве­ст­ным мне при­чи­нам кла­ви­ша Enter не ра­бо­та­ет). Про­грам­ма по­счи­та­ет чис­ло Пи, и вы­ве­дет вре­мя, за­тра­чен­ное на вы­чис­ле­ние (в мо­ём слу­чае при­мер­но 1. 437 се­кун­ды). Про­ве­ди­те вы­чис­ле­ния со 100 мил­ли­о­на­ми ин­тер­ва­лов ещё не­сколь­ко раз, что­бы опре­де­лить ми­ни­маль­ное вре­мя. По­сле это­го вве­ди­те 0, и на­жми­те Ctrl+Enter. Про­грам­ма за­вер­шит­ся.

К со­жа­ле­нию, на мо­ём ком­пью­те­ре по­сле за­вер­ше­ния MPI-про­грам­мы не уда­ёт­ся за­пу­стить её вновь, не за­кры­вая Wmpiexec. Мо­же­те по­про­бо­вать за­пу­стить про­грам­му ещё раз, на этот раз вы­брав 2 про­цес­са. Ес­ли не по­лу­чит­ся — пе­ре­за­пу­сти­те Wmpiexec.

Я по­лу­чил сле­дую­щие вре­ме­на вы­чис­ле­ний на од­ном ком­пью­те­ре: 1 про­цесс — 1. 424 се­кун­ды, 2 про­цес­са — 0. 7801 се­кун­ды, 4 про­цес­са — 0. 7766 се­кун­ды. Вид­но, что два про­цес­са вы­пол­ни­ли вы­чис­ле­ния по­чти в 2 ра­за быст­рее, чем один про­цесс, в то вре­мя как ис­поль­зо­ва­ние 4-х про­цес­сов не да­ло даль­ней­ше­го вы­иг­ры­ша в ско­ро­сти. Это вы­зва­но тем, что ком­пью­тер, на ко­то­ром я за­пус­кал про­грам­му, име­ет двухъ­ядер­ный про­цес­сор.

Те­перь за­пу­стим MPI-про­грам­му на двух ком­пью­те­рах. Для это­го ско­пи­руй­те про­грам­му cpi. exe на об­щий се­те­вой диск (в мо­ём слу­чае это \\192. 168. 1. 4\​ MPI\). Убе­ди­тесь, что про­грам­ма вид­на со всех ком­пью­те­ров по од­но­му и то­му же се­те­вом ад­ре­су.

Те­перь са­мое глав­ное. Так как эк­зем­пля­ры MPI-про­грам­мы ра­бо­та­ют и об­ме­ни­ва­ют­ся дан­ны­ми по се­ти не­за­ви­си­мо от ме­не­дже­ра про­цес­сов, их то­же нуж­но вне­сти в спи­сок ис­клю­че­ний бранд­мау­э­ра Windows. До­бавь­те cpi. exe (пря­мо с се­те­во­го ре­сур­са) в спи­сок ис­клю­че­ний бранд­мау­э­ра на всех ком­пью­те­рах се­ти (ри­су­нок 7). Я про­бо­вал про­сто от­клю­чить бранд­мау­эр на всех ком­пью­те­рах — не по­мог­ло.

Ука­жи­те се­те­вой ад­рес про­грам­мы cpi. exe (в мо­ём слу­чае это \\192. 168. 1. 4\MPI\cpi. exe) в по­ле «Application» про­грам­мы Wmpiexec. Вы­бе­ри­те чис­ло про­цес­сов и на­жми­те кноп­ку Execute.

Я по­лу­чил сле­дую­щие вре­ме­на вы­чис­ле­ний на двух ком­пью­те­рах: 1 про­цесс — 1. 424 се­кун­ды, 2 про­цес­са — 1. 023 се­кун­ды, 4 про­цес­са — 0. 5714 се­кун­ды. На этот раз 4 про­цес­са да­ли вы­иг­рыш в ско­ро­сти по срав­не­нию с дву­мя про­цес­са­ми. Ко­неч­но же, бес­про­вод­ная сеть, на ко­то­рой я те­сти­ро­вал вы­чис­ле­ния, пе­ре­да­ёт дан­ные очень мед­лен­но (10 МБит/сек), и име­ет огром­ные за­держ­ки. Од­на­ко, не­ко­то­рое уско­ре­ние уда­лось по­лу­чить да­же на та­кой се­ти.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.