MPICH и Windows

Автор: Антон Сухинов


Источник: http://iproc.ru/programming/mpich-windows/


Ес­ли вы сде­ла­ли всё воз­мож­ное, а MPICH так и не за­ра­бо­тал, — по­про­буй­те ана­ло­гич­ное ре­ше­ние от Microsoft.

Смот­ри­те так­же мою ста­тью об OpenMP, пред­на­зна­чен­ном для вы­чис­ли­тель­ных си­стем с об­щей па­мя­тью

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

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

В дан­ной ста­тье речь пой­дёт об MPICH2. Двой­ка в на­зва­нии — это не вер­сия про­граммно­го обес­пе­че­ния, а но­мер то­го стан­дар­та MPI, ко­то­рый реа­ли­зо­ван в биб­лио­те­ке. MPICH2 со­от­вет­ству­ет стан­дар­ту MPI 2.0, от­сю­да и на­зва­ние. Здесь умест­но при­ве­сти ци­та­ту с офи­ци­аль­но­го сай­та (в мо­ём пе­ре­во­де):

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

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

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

В даль­ней­шем бу­дем пред­по­ла­гать, что у вас име­ет­ся сеть из не­сколь­ких до­маш­них ком­пью­те­ров (бу­дем на­зы­вать их вы­чис­ли­тель­ны­ми уз­ла­ми), ра­бо­таю­щих под управ­ле­ни­ем Windows. Мож­но да­же на­стро­ить си­сте­му на двух но­ут­бу­ках, со­еди­нён­ных бес­про­вод­ной се­тью. Ес­ли у вас нет не­сколь­ких ком­пью­те­ров, объ­еди­нён­ных в сеть, — не от­чаи­вай­тесь. Для учеб­ных це­лей мож­но за­пус­кать все вы­чис­ли­тель­ные про­цес­сы и на од­ном ком­пью­те­ре. Ес­ли ком­пью­тер од­но­ядер­ный, то, ес­те­ствен­но, при­ро­ста быст­ро­дей­ствия вы не по­лу­чи­те, — толь­ко за­мед­ле­ние.

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

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

Что­бы про­яс­нить осталь­ные раз­де­лы ста­тьи, я ре­шил на­чать из­ло­же­ние не с ин­ст­рук­ций по уста­нов­ке MPICH, а с прин­ци­пов её ра­бо­ты.

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

Су­ще­ству­ет мне­ние, что smpd.exe — ни­ка­кой не «ме­не­джер про­цес­сов», а про­сто сред­ство для их за­пус­ка. Это мне­ние обос­но­ва­но тем, что пол­но­цен­ный ме­не­джер про­цес­сов дол­жен со­став­лять рас­пи­са­ние за­пус­ка про­цес­сов, осу­ществ­лять мо­ни­то­ринг и ба­лан­си­ров­ку за­груз­ки уз­лов.

В этой ста­тье я при­дер­жи­ва­юсь тер­ми­но­ло­гии Ара­гон­ской ла­бо­ра­то­рии, ко­то­рая на­зы­ва­ет smpd.exe, как «Process manager service for MPICH2 applications»

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

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

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

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

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

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

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

Схе­ма ра­бо­ты MPICH на кла­сте­ре

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

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

  1. Поль­зо­ватель с по­мо­щью про­грам­мы Mpirun (или Mpiexec, при ис­поль­зо­ва­нии MPICH2 под 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-про­грам­му на од­ном ком­пью­те­ре.

Уста­нов­ка MPICH в Windows

Вна­ча­ле нуж­но ска­чать по­след­нюю вер­сию MPICH2 с этой стра­ни­цы: http://​www.​mcs.​anl.​gov/​research/​projects/​mpich2/​downloads/​index.php?​s=downloads. Ес­ли у вас 32-х бит­ная вер­сия Windows, то вам по­дой­дёт дис­три­бу­тив под на­зва­ни­ем «Win32 IA32 (binary)».

За­гру­жен­ный ин­стал­ля­тор не­об­хо­ди­мо за­пу­стить с при­ви­ле­ги­я­ми ад­ми­ни­стра­то­ра на всех ком­пью­те­рах, на ко­то­рых вы пла­ни­ру­е­те за­пус­кать MPI-про­грам­мы. Ес­ли у вас Windows Vista с вклю­чён­ным User Account Control (UAC), то для за­пус­ка ин­стал­ля­то­ра с при­ви­ле­ги­я­ми ад­ми­ни­стра­то­ра вы­пол­ни­те сле­дую­щие дей­ствия:

  1. Най­ди­те в ме­ню Пуск → Про­грам­мы → Стан­дарт­ные про­грам­му «Ко­манд­ная стро­ка», на­жми­те на неё пра­вой кноп­кой мы­ши, и вы­бе­ри­те пункт «За­пуск от име­ни ад­ми­ни­стра­то­ра» (ри­су­нок 2). Под­твер­ди­те свои на­ме­ре­ния и вве­ди­те па­роль, ес­ли не­об­хо­ди­мо.

  2. Вве­ди­те в ко­манд­ной стро­ке пол­ный путь к про­грам­ме ин­стал­ля­ции и на­жми­те Enter (ри­су­нок 3).

За­пуск ко­манд­ной стро­ки с при­ви­ле­ги­я­ми ад­ми­ни­стра­то­ра

Ри­су­нок 2. За­пуск ко­манд­ной стро­ки с при­ви­ле­ги­я­ми ад­ми­ни­стра­то­ра

За­пуск ин­стал­ля­то­ра из ко­манд­ной стро­ки

Ри­су­нок 3. За­пуск ин­стал­ля­то­ра из ко­манд­ной стро­ки

Во вре­мя уста­нов­ки вам нуж­но бу­дет вве­сти па­роль для до­сту­па к ме­не­дже­ру про­цес­сов SMPD. Вы долж­ны вве­сти оди­на­ко­вый па­роль на всех ком­пью­те­рах:

Ука­за­ние па­ро­ля для до­сту­па к ме­не­дже­ру про­цес­сов

Ри­су­нок 4. Ука­за­ние па­ро­ля для до­сту­па к ме­не­дже­ру про­цес­сов

В ок­не ука­за­ния пу­ти уста­нов­ки ре­ко­мен­дую оста­вить ка­та­лог по умол­ча­нию. Кро­ме то­го, по­ставь­те точ­ку в пунк­те «Everyone»:

Ука­за­ние пу­ти уста­нов­ки

Ри­су­нок 5. Ука­за­ние пу­ти уста­нов­ки

Ес­ли Windows спро­сит, раз­ре­шить ли до­ступ в сеть про­грам­ме smpd.exe, то на­жми­те «Раз­ре­шить».

Те­перь, ско­рее все­го, MPICH2 пра­виль­но уста­нов­лен на ваш ком­пью­тер. Од­на­ко, пре­жде чем пе­ре­хо­дить к на­строй­ке, обя­за­тель­но сле­ду­ет про­ве­рить две ве­щи: за­пу­ще­на ли служ­ба «MPICH2 Process Manager», и раз­ре­шён ли этой служ­бе до­ступ в сеть.

На­жми­те Пуск → На­строй­ка → Па­нель управ­ле­ния → Ад­ми­ни­стри­ро­ва­ние → Служ­бы. Вы долж­ны уви­деть «MPICH2 Process Manager» в спис­ке служб (ри­су­нок 6). Эта служ­ба долж­на ра­бо­тать. Ес­ли служ­ба в спис­ке от­сут­ству­ет, то вы, ви­ди­мо, не за­пу­сти­ли ин­стал­ля­тор от име­ни ад­ми­ни­стра­то­ра.

Служ­ба «MPICH2 Process Manager» в спис­ке служб

Ри­су­нок 6. Служ­ба «MPICH2 Process Manager» в спис­ке служб

Те­перь про­ве­рим, раз­ре­шён ли до­ступ в сеть для MPICH. Зай­ди­те в Пуск → На­строй­ка → Па­нель управ­ле­ния → Бранд­мау­эр Windows. Там на­жми­те «Раз­ре­ше­ние за­пус­ка про­грам­мы че­рез бранд­мау­эр Windows». Вы долж­ны уви­деть в спис­ке раз­ре­шён­ных про­грамм «Pro­cess laun­cher for MPICH2 ap­pli­ca­tions» и «Pro­cess ma­nager ser­vice for MPICH2 ap­pli­ca­tions»:

Про­грам­мы MPICH в спис­ке ис­клю­че­ний бранд­мау­э­ра

Ри­су­нок 7. Про­грам­мы MPICH в спис­ке ис­клю­че­ний бранд­мау­э­ра

Ес­ли ка­кая-то из пе­ре­чис­лен­ных про­грамм от­сут­ству­ет в спис­ке раз­ре­шён­ных про­грамм, то вы мо­же­те до­ба­вить её вруч­ную. Для это­го на­жми­те кноп­ку «До­ба­вить про­грам­му...», и до­бавь­те C:\​program files\​mpich2\​bin\​mpiexec.exe, ес­ли от­сут­ству­ет «Pro­cess laun­cher for MPICH2 ap­pli­ca­ti­ons», и C:\​program files\​mpich2\​bin\​smpd.exe, ес­ли от­сут­ству­ет «Pro­cess ma­na­ger ser­vice for MPICH2 ap­pli­ca­ti­ons».

На­строй­ка MPICH

Рас­смот­рим на­строй­ку MPICH на при­ме­ре кон­фи­гу­ра­ции из двух ком­пью­те­ров, объ­еди­нён­ных в ло­каль­ную сеть (Wi-Fi): один ком­пью­тер име­ет се­те­вое имя MrBig и IP-ад­рес 192.168.1.4, дру­гой — имя Small и ад­рес 192.168.1.3. Пред­по­ло­жим, что MPI-про­грам­мы мы хо­тим за­пус­кать с ком­пью­те­ра MrBIG. На обо­их ком­пью­те­рах уста­нов­ле­ны рус­ско­языч­ные вер­сии Windows. На MrBIG уста­нов­ле­на Windows Vista, на Small — Windows XP. Каж­дый ком­пью­тер име­ет двухъ­ядер­ный про­цес­сор.

Пре­жде все­го нуж­но со­здать на всех ком­пью­те­рах поль­зо­ва­те­ля с оди­на­ко­вым име­нем и па­ро­лем; от име­ни это­го поль­зо­ва­те­ля бу­дут за­пус­кать­ся MPI-про­грам­мы (ес­ли у вас один ком­пью­тер — этот шаг мо­же­те про­пу­стить). Про­ще все­го это сде­лать, уста­но­вив оди­на­ко­вый па­роль поль­зо­ва­те­лям Ад­ми­ни­стра­тор.

В Windows Vista учёт­ная за­пись «Ад­ми­ни­стра­тор» по умол­ча­нию от­клю­чё­на. Что­бы вклю­чить её, за­пу­сти­те ко­манд­ную стро­ку от име­ни ад­ми­ни­стра­то­ра (ри­су­нок 2), и вы­пол­ни­те ко­ман­ду net user Ад­ми­ни­стра­тор /active:yes. Что­бы убе­дить­ся, что учёт­ная за­пись ра­бо­та­ет, и уста­но­вить на неё па­роль, ре­ко­мен­дую зай­ти в си­сте­му с учёт­ной за­пи­сью «Ад­ми­ни­стра­тор», и уста­но­вить па­роль с по­мо­щью Пуск → На­строй­ка → Па­нель управ­ле­ния → Учёт­ные за­пи­си поль­зо­ва­те­лей → Из­ме­не­ние сво­е­го па­ро­ля.

Ес­ли хра­не­ние име­ни поль­зо­ва­те­ля и па­ро­ля в ре­ест­ре вам ка­жет­ся не­безопас­ным, то вы долж­ны бу­де­те всё вре­мя вво­дить эти дан­ные. В этом слу­чае ре­ко­мен­дую за­пу­стить Wmpiregister и на­жать кноп­ку «Re­move», так как мо­жет ока­зать­ся, что ка­кой-ни­будь ста­рый (и не­вер­ный) па­роль уже за­пи­сан в ре­ест­ре (на­при­мер, остал­ся с преды­ду­щей ин­стал­ля­ции MPICH)

Как уже бы­ло ска­за­но ра­нее, лю­бое дей­ствие си­сте­ма MPICH вы­пол­ня­ет от ука­зан­но­го име­ни поль­зо­ва­те­ля. Для то­го, что­бы спра­ши­вать имя поль­зо­ва­те­ля и па­роль, ис­поль­зу­ет­ся про­грам­ма Wmpiregister. Про­бле­ма в том, что имя поль­зо­ва­те­ля и па­роль спра­ши­ва­ют­ся до­ста­точ­но ча­сто, что мо­жет вы­зы­вать раз­дра­же­ние. Для то­го, что­бы это­го из­бе­жать, Wmpiregister мо­жет со­хра­нять имя поль­зо­ва­те­ля и па­роль в ре­ест­ре Windows.

За­пу­сти­те Wmpiregister на том ком­пью­те­ре, с ко­то­ро­го вы со­би­ра­е­тесь за­пус­кать MPI-про­грам­мы. Для это­го на­жми­те Пуск → Про­грам­мы → MPICH2 → wmpiregister.exe. Ок­но про­грам­мы вы­гля­дит сле­дую­щим об­ра­зом:

 Про­грам­ма Wmpiregister

Ри­су­нок 8. Про­грам­ма Wmpiregister

По­яс­ню смысл кно­пок (спра­ва-на­ле­во):

  • «Cancel» — за­крыть про­грам­му без вы­пол­не­ния ка­ко­го-ли­бо дей­ствия.

  • «OK» — пе­ре­дать вве­дён­ные имя поль­зо­ва­те­ля и па­роль вы­зы­ваю­щей про­грам­ме. Ес­ли Wmpire­gister за­пу­ще­на на­ми как от­дель­ное при­ло­же­ние, то на­жа­тие кноп­ки OK эк­ви­ва­лент­но на­жа­тию кноп­ки Cancel.

  • «Remove» — на­жа­тие этой кноп­ки уда­ля­ет со­хра­нён­ные ра­нее имя поль­зо­ва­те­ля и па­роль из ре­ест­ра Windows.

  • «Register» — со­хра­ня­ет имя поль­зо­ва­те­ля и па­роль в ре­ест­ре.

Вве­ди­те имя поль­зо­ва­те­ля и па­роль в ок­не про­грам­мы и на­жми­те кноп­ку «Register». Долж­на по­явить­ся над­пись «Password encrypted into the Registry» (ри­су­нок 8). По­сле это­го ок­но про­грам­мы боль­ше не бу­дет по­яв­лять­ся при вы­пол­не­нии ка­ких ли­бо дей­ствий MPICH. Ес­ли вы за­хо­ти­те впо­след­ствии уда­лить имя поль­зо­ва­те­ля и па­роль из ре­ест­ра, то вам нуж­но бу­дет сно­ва за­пу­стить эту про­грам­му, и на­жать кноп­ку «Remove».

Те­перь нам нуж­но на­стро­ить ме­не­дже­ры про­цес­сов MPICH. Для это­го за­пу­сти­те на всех ком­пью­те­рах про­грам­му Wmpiconfig. Ес­ли все преды­ду­щие ша­ги сде­ла­ны пра­виль­но, то в по­ле «version» в ле­вой ко­лон­ке таб­ли­цы вы долж­ны уви­деть вер­сию уста­нов­лен­но­го ме­не­дже­ра про­цес­сов (ри­су­нок 9). Ес­ли ме­не­джер про­цес­сов не уста­нов­лен, или ему за­крыт до­ступ в сеть, то вы уви­ди­те над­пись «MPICH2 not installed or unable to query the host» в од­ном из по­лей ле­во­го столб­ца. В этом слу­чае об­ра­ти­тесь за по­мо­щью к преды­ду­ще­му раз­де­лу ста­тьи.

Про­грам­ма Wmpiconfig

Ри­су­нок 9. Про­грам­ма Wmpiconfig

Wmpiconfig пред­на­зна­че­на для на­строй­ки ме­не­дже­ров про­цес­сов на те­ку­щем ком­пью­те­ре и дру­гих ком­пью­те­рах се­ти. Для это­го она под­со­еди­ня­ет­ся к ме­не­дже­рам про­цес­сов на вы­бран­ных ком­пью­те­рах, чи­та­ет имею­щие­ся у них на­строй­ки, и со­об­ща­ет им но­вые на­строй­ки, ес­ли нуж­но. Эле­мен­ты управ­ле­ния про­грам­мы Wmpiconfig вы­пол­ня­ют сле­дую­щие дей­ствия:

  • Сле­ва-вни­зу име­ет­ся спи­сок ком­пью­те­ров, с ко­то­ры­ми ра­бо­та­ет про­грам­ма на­строй­ки. Имя ком­пью­те­ра на бе­лом фо­не озна­ча­ет, что не бы­ло по­пы­ток свя­зать­ся с этим ком­пью­те­ром; зе­лё­ный фон озна­ча­ет, что связь про­из­ве­де­на успеш­но; се­рый фон озна­ча­ет, что при уста­нов­ле­нии свя­зи воз­ник­ла ошиб­ка. Уда­лить ком­пью­тер из спис­ка мож­но кла­ви­шей Del. Сле­ду­ет иметь в ви­ду, что этот спи­сок пред­на­зна­чен толь­ко для удоб­ства на­строй­ки, и не име­ет ни­ка­ко­го от­но­ше­ния к спис­ку ком­пью­те­ров, на ко­то­рых бу­дет за­пу­ще­на MPI-про­грам­ма.

  • Кноп­ка «Get Hosts» по­лу­ча­ет спи­сок ком­пью­те­ров в за­дан­ном до­ме­не или ра­бо­чей груп­пе (за­да­ёт­ся в вы­па­даю­щем спис­ке «Domain»). По­лу­чен­ный спи­сок за­ме­ня­ет имею­щий­ся спи­сок ком­пью­те­ров или, ес­ли на­жа­та кно­поч­ка «+», до­бав­ля­ет ком­пью­те­ры к те­ку­ще­му спис­ку.

  • Кноп­ка «Scan Hosts» по­лу­ча­ет на­строй­ки со всех ком­пью­те­ров спис­ка; кноп­ка «Scan for Versions» по­лу­ча­ет толь­ко но­ме­ра вер­сий.

  • Кноп­ка «Get Settings» по­лу­ча­ет те­ку­щие на­строй­ки то­го ком­пью­те­ра, имя ко­то­ро­го вве­де­но в по­ле вво­да «Host». При вы­бо­ре ком­пью­те­ра в спис­ке ком­пью­те­ров его имя ав­то­ма­ти­че­ски вво­дит­ся в по­ле «Host». Ес­ли на­жа­та кноп­ка «Click», то на­строй­ки бу­дут по­лу­че­ны ав­то­ма­ти­че­ски при вы­бо­ре ком­пью­те­ра из спис­ка.

  • Спра­ва в ок­не рас­по­ло­же­на таб­ли­ца на­стро­ек. Ес­ли вы хо­ти­те из­ме­нить ка­кие-ли­бо на­строй­ки, то нуж­но два­жды щёлк­нуть на со­от­вет­ствую­щем по­ле в пер­вом столб­це таб­ли­цы. Пу­стое по­ле озна­ча­ет, что ис­поль­зу­ет­ся на­строй­ка по умол­ча­нию, ука­зан­ная во вто­ром столб­це. На­строй­ки, пред­на­зна­чен­ные к из­ме­не­нию сле­ду­ет от­ме­чать уста­нов­кой га­лоч­ки сле­ва.

  • Кноп­ка «Apply» при­ме­ня­ет вы­де­лен­ные га­лоч­кой на­строй­ки к то­му ком­пью­те­ру, имя ко­то­ро­го на­хо­дит­ся в по­ле «Host». Кноп­ка «Apply All» при­ме­ня­ет на­строй­ки ко всем ком­пью­те­рам спис­ка.

  • Кноп­ка «Cancel» за­кры­ва­ет про­грам­му. На­сколь­ко я по­нял, дей­ствие кноп­ки «OK» ни­чем не от­ли­ча­ет­ся от дей­ствия кноп­ки «Cancel».

На том ком­пью­те­ре, с ко­то­ро­го пла­ни­ру­ет­ся за­пуск про­грамм, нуж­но ука­зать спи­сок до­ступ­ных вы­чис­ли­тель­ных уз­лов (ес­ли у вас один ком­пью­тер — переходи́те к раз­де­лу «за­пуск MPI-про­грамм»). Этот спи­сок нуж­но вве­сти (че­рез про­бел) в по­ле hosts ле­во­го столб­ца таб­ли­цы (ри­су­нок 10), и на­жать кноп­ку «Apply». На ри­сун­ке по­ка­зан при­мер, ко­гда сам ком­пью­тер, с ко­то­ро­го про­из­во­дит­ся за­пуск MPI-про­грамм, яв­ля­ет­ся од­ним из вы­чис­ли­тель­ных уз­лов.

Ука­зы­ва­ем спи­сок до­ступ­ных вы­чис­ли­тель­ных уз­лов

Ри­су­нок 10. Ука­зы­ва­ем спи­сок до­ступ­ных вы­чис­ли­тель­ных уз­лов

У ме­ня в се­ти имел­ся DNS-сер­вер, ко­то­рый не­вер­но пе­ре­во­дил имя од­но­го из ком­пью­те­ров в IP-ад­рес. По­это­му я вез­де в MPICH про­пи­сал IP-ад­ре­са вме­сто имён. Од­на­ко MPI-про­грам­мы всё рав­но не ра­бо­та­ли (за­пус­ка­лись, но не мог­ли об­ме­ни­вать­ся ин­фор­ма­ци­ей по се­ти). Пр­осмотр со­об­ще­ний об ошиб­ках по­ка­зал, что MPICH во вре­мя ра­бо­ты пе­ре­во­дит IP-ад­ре­са в име­на и об­рат­но. Так что боль­шо­го смыс­ла в ис­поль­зо­ва­нии IP-ад­ре­сов вме­сто имён не ока­за­лось. Про­бле­ма с DNS-сер­ве­ром ре­ша­лась сле­дую­щи­ми спо­со­ба­ми: 1) от­клю­че­ни­ем сер­ве­ра, 2) пе­ре­име­но­ва­ни­ем ком­пью­те­ра (что­бы сер­вер про не­го не знал), или 3) (ре­ко­мен­дуе­мый спо­соб) ука­за­ни­ем со­от­вет­ствия меж­ду име­на­ми ком­пью­те­ров и их IP-ад­ре­са­ми в фай­лах C:\​Windows\​System32\​drivers\​etc\​hosts на всех уз­лах

Что­бы из­бе­жать воз­мож­ных про­блем, свя­зан­ных с раз­ре­ше­ни­ем имён, ре­ко­мен­дую ис­поль­зо­вать IP-ад­ре­са вме­сто имен ком­пью­те­ров.

Те­перь про­ве­рим, ви­дят ли ме­не­дже­ры про­цес­сов друг дру­га по се­ти. Для это­го в про­грам­ме Wmpi­config на «глав­ном» ком­пью­те­ре нуж­но вве­сти в по­ле «Host» ад­рес про­ве­ря­е­мо­го ком­пью­те­ра и на­жать «Get Settings». Вы долж­ны уви­деть вер­сию уста­нов­лен­но­го ме­не­дже­ра про­цес­сов на вы­бран­ном ком­пью­те­ре. Ес­ли связь уста­но­вить не уда­ёт­ся — бу­дет па­у­за в не­сколь­ко се­кунд, по­сле че­го в по­след­ней стро­ке таб­ли­цы по­явит­ся со­об­ще­ние об ошиб­ке. Ес­ли до сих пор у вас всё шло хо­ро­шо, то сле­ду­ет про­ве­рить сеть: убе­дить­ся, что ком­пью­те­ры «ви­дят» друг дру­га, по­про­бо­вать от­клю­чить бран­мау­э­ры, и то­му по­доб­ное. Так­же про­верь­те, сов­па­да­ет ли кон­т­роль­ная фра­за (по­ле phrase) на всех ком­пью­те­рах.

Со­зда­ние об­ще­го се­те­во­го ре­сур­са

Для удоб­но­го за­пус­ка MPI-про­грамм сле­ду­ет со­здать на од­ном из ком­пью­те­ров об­щий се­те­вой ре­сурс. Ес­ли вы со­би­ра­е­тесь за­пус­кать MPI-про­грам­мы на од­ном ком­пью­те­ре, мо­же­те про­пу­стить этот раз­дел.

Со­здай­те пап­ку (на­при­мер, име­ю­щую имя «MPI»), в ко­то­рую вы бу­де­те вы­кла­ды­вать MPI-про­грам­мы, на­жми­те на неё пра­вой кноп­кой мы­ши, и вы­бе­ри­те «Свой­ства». В по­явив­шем­ся ок­не вы­бе­ри­те вклад­ку «До­ступ» (ри­су­нок 11), в ко­то­рой на­жми­те кноп­ку «До­пол­ни­тель­ный до­ступ...». В по­явив­шем­ся ок­не «До­пол­ни­тель­ный об­щий до­ступ» по­ставь­те га­лоч­ку «От­крыть об­щий до­ступ к этой пап­ке», и уста­но­ви­те «чис­ло од­но­вре­мен­ных поль­зо­ва­те­лей» та­ким, что­бы оно пре­вы­ша­ло ко­ли­че­ство ком­пью­те­ров се­ти, пред­на­зна­чен­ных для за­пус­ка MPI-про­грамм:

Ок­но свойств пап­ки

Ри­су­нок 11. Ок­но свойств пап­ки

На­жми­те «OK» в ок­не «До­пол­ни­тель­ный об­щий до­ступ» и пе­рей­ди­те во вклад­ку «Безопас­ность». Там на­жми­те кноп­ку «Из­ме­нить» (ри­су­нок 12), по­явит­ся ок­но «Раз­ре­ше­ния для [имя пап­ки]». В этом ок­не на­жми­те кноп­ку «До­ба­вить...», по­явит­ся ок­но вы­бо­ра объ­ек­та для до­бав­ле­ния (поль­зо­ва­те­ля или груп­пы). Вве­ди­те в по­ле вво­да «Все» (или «All», ес­ли у вас ан­глий­ская вер­сия Windows):

До­бав­ле­ние раз­ре­ше­ний для до­сту­па к пап­ке

Ри­су­нок 12. До­бав­ле­ние раз­ре­ше­ний для до­сту­па к пап­ке

На­жми­те кноп­ку «OK» в двух ок­нах. Во вклад­ке «Безопас­ность» в верх­нем спис­ке долж­на до­ба­вить­ся стро­ка «Все», при вы­бо­ре ко­то­рой в спис­ке раз­ре­ше­ний долж­ны сто­ять га­лоч­ки на­про­тив пунк­тов «Чте­ние и вы­пол­не­ние», «Спи­сок со­дер­жи­мо­го пап­ки» и «Чте­ние».

Убе­ди­тесь, что со­здан­ная об­щая пап­ка вид­на с дру­го­го ком­пью­те­ра. Для это­го на­жми­те на дру­гом ком­пью­те­ре Пуск → Вы­пол­нить..., и вве­ди­те се­те­вой путь к пап­ке. В мо­ём слу­чае это \\192.168.1.4\​MPI\.

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

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

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

Про­грам­ма Wmpiexec

Ри­су­нок 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 (ис­ход­ный код так­же име­ет­ся). Это про­стая про­грам­ма, при­бли­жён­но вы­чис­ляю­щая зна­че­ние чис­ла Пи пу­тём чис­лен­но­го вы­чис­ле­ния сле­дую­ще­го ин­тег­ра­ла:

\pi = \int\limits_0^1\frac{4}{1+x^2}\,dx.

Вна­ча­ле по­про­бу­ем за­пу­стить один, два, и че­ты­ре про­цес­са на од­ном ком­пью­те­ре. Что­бы 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 МБит/сек), и име­ет огром­ные за­держ­ки. Од­на­ко, не­ко­то­рое уско­ре­ние уда­лось по­лу­чить да­же на та­кой се­ти.

Со­зда­ние MPI-про­грам­мы в Visual Studio

Пре­жде все­го, нуж­но на­стро­ить Visual Studio, что­бы он на­хо­дил за­го­ло­воч­ные фай­лы и .lib-биб­лио­те­ки MPICH. Для это­го за­пу­сти­те Visual Studio и на­жми­те Tools → Options, в де­ре­ве сле­ва вы­бе­ри­те Projects and Solutions → VC++ Directories. Спра­ва-ввер­ху вы­бе­ри­те Show directories for: Include files. На­жми­те кно­поч­ку с жёл­той па­поч­кой и до­бавь­те путь к .h-фай­лам:

На­строй­ка пу­ти к за­го­ло­воч­ным фай­лам MPICH

Ри­су­нок 14. На­строй­ка пу­ти к за­го­ло­воч­ным фай­лам MPICH

По­сле это­го про­де­лай­те ту же про­це­ду­ру для биб­лио­тек (Show directories for: Library files):

На­строй­ка пу­ти к биб­лио­теч­ным фай­лам MPICH

Ри­су­нок 15. На­строй­ка пу­ти к биб­лио­теч­ным фай­лам MPICH

Те­перь со­здай­те кон­соль­ный про­ект так, как по­ка­за­но на ри­сун­ках 2–4 в ста­тье об OpenMP. От­крой­те ок­но на­стро­ек про­ек­та (Project → Properties), вы­бе­ри­те Configuration: All Configurations, в де­ре­ве сле­ва вы­бе­ри­те Configuration Properties → Linker → Input. До­бавь­те mpi.lib в по­ле Additional Dependencies спра­ва:

До­бав­ле­ние mpi.lib к про­грам­ме

Ри­су­нок 16. До­бав­ле­ние mpi.lib к про­грам­ме

Ис­ход­ный код про­грам­мы для про­вер­ки мо­же­те взять из фай­ла C:\​Program Files\​MPICH2\​examples\​icpi.c. От­ком­пи­ли­руй­те про­грам­му и за­пу­сти­те с по­мо­щью Wmpiexec — всё долж­но ра­бо­тать.

Уда­ле­ние MPICH

Для то­го, что­бы кор­рект­но и пол­но­стью уда­лить MPICH из си­сте­мы, нуж­но вы­пол­нить 3 дей­ствия:

  1. Уда­ли­те со­хра­нён­ный па­роль из ре­ест­ра, за­пу­стив Wmpiregister, и на­жав кноп­ку «Remove» (ри­су­нок 8).

  2. Оста­но­ви­те ме­не­джер про­цес­сов. Для это­го от­крой­те ок­но управ­ле­ния служ­ба­ми (Пуск → На­строй­ка → Па­нель управ­ле­ния → Ад­ми­ни­стри­ро­ва­ние → Служ­бы), вы­бе­ри­те «MPICH2 Process Manager» (ри­су­нок 6), и на­жми­те кноп­ку с чёр­ным квад­ра­ти­ком ввер­ху ок­на.

  3. За­пу­сти­те ин­стал­ля­тор MPICH от име­ни ад­ми­ни­стра­то­ра (ри­сун­ки 2 и 3), и вы­бе­ри­те оп­цию «Remove».

P.S.

Ес­ли вы не зна­е­те, как со­зда­вать па­ра­л­лель­ные про­грам­мы при по­мо­щи MPI, со­ве­тую про­честь спе­цифи­ка­цию, там всё по­дроб­но опи­са­но: http://​www.​mpi-forum.​org/​docs/​mpi21-report.pdf.