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 2008 или 2010 (воз­мож­но ис­поль­зо­ва­ние бес­плат­ной вер­сии Express). Для удоб­ства из­ло­же­ния со­здан­ную ва­ми про­грам­му, ис­поль­зу­ю­щую 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 на кла­сте­ре
Схе­ма ра­бо­ты 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» в спис­ке служб
Служ­ба «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-про­грам­мы (ес­ли у вас один ком­пью­тер — этот шаг мо­же­те про­пу­стить). Про­ще все­го это сде­лать, уста­но­вив оди­на­ко­вый па­роль поль­зо­ва­те­лям Ад­ми­ни­стра­тор.

В ком­мен­та­ри­ях под­ска­зы­ва­ют, что луч­ше со­здать для 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).

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

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

Ин­те­рес­но, что «MPICH2 not installed or unable to query the host» — са­мый ча­стый по­ис­ко­вый за­прос, по ко­то­ро­му эту стра­ни­цу на­хо­дят в Ин­тер­не­те. В свя­зи с этим я по­вто­рил текст этой ошиб­ки в этой зе­лё­ной встав­ке, что­бы уве­ли­чить рей­тинг стра­ни­цы в по­ис­ко­вых си­сте­мах

Ес­ли ме­не­джер про­цес­сов не уста­нов­лен, или ему за­крыт до­ступ в сеть, то вы уви­ди­те над­пись «MPICH2 not installed or unable to query the host» в од­ном из по­лей ле­во­го столб­ца. В этом слу­чае об­ра­ти­тесь за по­мо­щью к преды­ду­ще­му раз­де­лу ста­тьи.

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
Про­грам­ма 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 2010 на­строй­ки ка­та­ло­гов пе­ре­не­се­ны в свой­ства про­ек­та. Это озна­ча­ет, что вам вна­ча­ле нуж­но со­здать про­ект, а за­тем уже на­стро­ить для не­го ка­та­ло­ги в ок­не Project → Properties

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

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

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

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

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

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

В ком­мен­та­ри­ях под­ска­зы­ва­ют, что в спи­сок до­пол­ни­тель­ных биб­лио­тек для ком­по­нов­ки по­ми­мо mpi.lib сле­ду­ет вклю­чать cxx.lib. По­это­му ес­ли ком­по­нов­щик (linker) ру­га­ет­ся, по­про­буй­те вме­сто mpi.lib в ок­не на­стро­ек, по­ка­зан­ном на ри­сун­ке 16, на­пи­сать mpi.lib cxx.lib (че­рез про­бел)

Те­перь со­здай­те кон­соль­ный про­ект так, как по­ка­за­но на ри­сун­ках 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 — всё долж­но ра­бо­тать.

Ес­ли про­грам­ма не ра­бо­та­ет, а до это­го всё шло хо­ро­шо, то про­верь­те сле­дую­щее:

  • Убе­ди­тесь, что про­грам­ма ра­бо­та­ет на всех ком­пью­те­рах при «обыч­ном» за­пус­ке. Про­грам­мы, от­ком­пи­ли­ро­ван­ные в Visual Studio, тре­бу­ют для сво­ей ра­бо­ты «Visual C++ Redistributable Package» (раз­лич­ные его вер­сии мож­но най­ти бес­плат­но на сай­те Microsoft). На всех вы­чис­ли­тель­ных уз­лах тре­бу­ет­ся уста­но­вить па­кет, со­от­вет­ствую­щий той вер­сии Visual Studio, ко­то­рая ис­поль­зо­ва­лась для ком­пи­ля­ции про­грам­мы.

  • Убе­ди­тесь, что вы не за­бы­ли раз­ре­шить про­грам­ме до­ступ в сеть (ри­су­нок 7).

Уда­ле­ние 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.

133 отзыва на запись «MPICH и Windows»

От­лич­ная ста­тья! Един­ствен­ное за­ме­ча­ние, что, всё-та­ки, луч­ше со­зда­вать от­дель­но­го юзе­ра (на­при­мер mpi) с поль­зо­ватель­ски­ми пра­ва­ми, а не от­да­вать ад­ми­ни­стра­тор­ский ак­ка­унт.
Как в MPICH2 ука­зы­вать раз­мер бу­фе­ра для функ­ции MPI_Bsend()?
Ука­зать раз­мер бу­фе­ра нель­зя: эта функ­ция ис­поль­зу­ет всё воз­мож­ное про­стран­ство имею­ще­го­ся бу­фе­ра (ес­ли есть), ина­че за­вер­ша­ет­ся с ошиб­кой. Од­на­ко, мож­но при­со­еди­нить один до­пол­ни­тель­ный поль­зо­ватель­ский бу­фер при­мер­но так:
//Выделяем мегабайт памяти и присоединяем
//  его к MPI в качестве дополнительного буфера:
MPI_Buffer_attach(malloc(1000000), 1000000); //
//Здесь используем Bsend, и вообще,
//  здесь может быть вся программа.
// char *buff;
int size;
//Возвращает указатель на присоединённый ранее буфер и размер
//  этого буфера. Кроме того, отсоединяет буфер от MPI:
MPI_Buffer_detach(&buff, &size);
free(buff); //Удаляем буфер
От­лич­ная ста­тья. Мне мно­гие за­да­ва­ли этот во­прос, те­перь есть на что со­слать­ся в та­ком слу­чае Тра­ди­ци­он­ный во­прос: в чём ри­со­ва­ли ил­лю­стра­ции?
Спа­си­бо за от­зыв. Ил­лю­стра­ция тут од­на: пер­вая. Её ри­со­вал в век­тор­ном гра­фи­че­ском ре­дак­то­ре Adobe Flash. Ни­че­го хо­ро­ше­го про эту про­грам­му, как про ре­дак­тор, ска­зать не мо­гу. Но там есть соб­ствен­ный язык про­грам­ми­ро­ва­ния, и мож­но ис­поль­зо­вать объ­ект­но-ори­ен­ти­ро­ван­ный под­ход при ри­со­ва­нии (ос­нов­ной объ­ект и его эк­зем­пля­ры с раз­ны­ми свой­ства­ми) — это под­ку­па­ет. Осталь­ное — скрин­шо­ты. Их я об­ра­ба­ты­вал в Adobe Photoshop: де­лал бе­лый фон, и вы­бра­сы­вал пу­стые об­ла­сти из окон; ре­аль­ные ок­на Windows ши­ре. Я уже по­нял, что ста­тью нуж­но пе­ре­ра­ба­ты­вать: со­зда­вать для MPI от­дель­но­го поль­зо­ва­те­ля (mpi_user); имя об­щей се­те­вой пап­ки пе­ре­де­лать с MPI на mpi_share, что­бы чи­таю­щий не ду­мал, что это имя долж­но сов­па­дать с на­зва­ни­ем стан­дар­та; убрать IP-адреса́ и пе­ре­де­лать их на име­на ком­пью­те­ров: всё рав­но MPICH ис­поль­зу­ет име­на внут­ри; со­от­вет­ствен­но, нуж­но по­дроб­нее осве­тить мо­дифи­ка­цию фай­лов C:​Windows​System32​drivers​etc​hosts — это мо­жет из­ба­вить от мно­гих про­блем.
Оч. Хо­ро­шая ста­тья. оч. по­мог­ла!!! Боль­шое спа­си­бо!!!
Пре­крас­ная ста­тья. Для ме­ня ока­за­лась очень свое­вре­мен­ной. Всё по­лу­чи­лось. Спа­си­бо!!!
Да, за­ме­ча­тель­ная ста­тья. Уяс­ни­ла мне мно­гое.
Боль­шое Спа­си­бо!
Да ста­тья очень хо­ро­шая. Си­дел ду­мал как же уста­но­вить вот и про­бле­ма ре­ши­лась. Мно­гое узнал и очень свое­вре­мен­но.
При­со­еди­ня­юсь к пе­ре­чис­лен­ным бла­го­дар­но­стям! СПАСИБО! Един­ствен­ное, хо­чу узнать, как вклю­чить и от­клю­чить ме­не­джер про­цес­сов в Windows Vista. А то пе­ре­чис­лен­ные дей­ствия от­но­сят­ся к Win XP…
И вам спа­си­бо за от­зыв. Все пе­ре­чис­лен­ные дей­ствия (и ил­лю­стра­ции) от­но­сят­ся к Windows Vista. В тех слу­ча­ях, ко­гда в Windows XP и Vista си­ту­а­ция от­ли­ча­ет­ся, я ого­ва­ри­вал это осо­бо. Ес­ли вы не ви­ди­те пунк­та «Ад­ми­ни­стри­ро­ва­ние» в «Па­не­ли управ­ле­ния», то сле­ду­ет вклю­чить «Клас­си­че­ский вид» в ко­лон­ке сле­ва.
Де­лаю всё, как на­пи­са­но в ста­тье, но в са­мом кон­це уста­нов­ки вы­да­ет­ся со­об­ще­ние об ошиб­ке
MPICH2
There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor.
OK
Мо­жет, ка­кие-то на­строй­ки ком­пью­те­ра не­пра­виль­ные?
Ка­кая у вас вер­сия Windows? По­про­буй­те уста­но­вить все об­нов­ле­ния для Windows, и убе­ди­тесь, что ин­стал­ля­тор за­пу­щен от име­ни ад­ми­ни­стра­то­ра. Ес­ли это не по­мог­ло, то посмот­реть де­таль­ную ин­фор­ма­цию о том, что пошло не так во вре­мя ин­стал­ля­ции .msi-фай­ла, мож­но сле­дую­щим об­ра­зом: За­пу­сти­те ко­манд­ную стро­ку от име­ни ад­ми­ни­стра­то­ра, и пе­рей­ди­те в пап­ку с ин­стал­ля­то­ром с по­мо­щью ко­ман­ды cd (см. ри­сун­ки 2, 3). Вы­пол­ни­те ко­ман­ду msiexec /i ИМЯ_ВАШЕГО_ФАЙЛА.msi /l*vx logfile.log. При этом все дей­ствия, вы­пол­няе­мые во вре­мя уста­нов­ки, бу­дут за­пи­сы­вать­ся в logfile.log. Ко­гда ин­стал­ля­ция пре­рвёт­ся с ошиб­кой, посмот­ри­те со­дер­жи­мое фай­ла logfile.log. Воз­мож­но, это по­мо­жет по­нять при­чи­ну ошиб­ки.
Спа­си­бо! По­мог­ло. Под Ли­нук­сом до это­го ра­бо­тал, не­об­хо­ди­мо бы­ло под Вин­ду на­стро­ить, пер­вый за­прос в Гугл — и вы. Са­мо­му да­же ни­че­го де­лать не нуж­но.
А про­бле­мы есть: один и тот же код пре­крас­но ком­пи­лит­ся под Ли­нем (ис­поль­зую ко­ман­ду mpicc) и ни в ка­кую не пе­ре­жё­вы­ва­ет­ся ком­пи­ля­то­ром в Visual studio 2008.
Та­кое бы­ва­ет. Все ком­пи­ля­то­ры в той или иной сте­пе­ни не­сов­ме­сти­мы со стан­дар­та­ми. Мо­же­те при­ве­сти фраг­мент ко­да, ко­то­рый вы­зы­ва­ет за­труд­не­ния у ком­пи­ля­то­ра VS 2008?
Спа­си­бо!
Очень по­лез­но бы­ло по­чи­тать. Но у ме­ня, к со­жа­ле­нию, не по­лу­чи­лось за­пу­стить про­грам­му для те­сти­ро­ва­ния. Ука­зан па­ра­метр -localonly и вот что пи­шет mpiexec:
Error closing socket, Сде­ла­на по­пыт­ка вы­пол­нить опе­ра­цию на объ­ек­те, не яв­ляю­щем­ся со­ке­том. (10038)
SMPDU_Sock_wait failed,
sock error: Error = 10038 state machine failed.
op_read error on left context: Error = -1 unable to read the cmd header on the left context, Error = -1
.
Error posting readv, Уда­лен­ный хост при­ну­ди­тель­но разо­рвал су­ще­ствую­щее под­клю­че­ние.(10054)
Не под­ска­же­те, в чем мо­жет быть де­ло?
Ка­кая опе­ра­ци­он­ная си­сте­ма? Windows XP?
Все ли об­нов­ле­ния у вас на неё уста­нов­ле­ны?
Спа­си­бо боль­шое за ста­тью. По на­строй­ке MPICH на рус­ском ни­че­го луч­ше не на­шел. Все очень хо­ро­шо рас­пи­са­но.
При­со­еди­ня­юсь к об­щим бла­го­дар­но­стям. Но у ме­ня есть не­ко­то­рая про­бле­ма. Я под­клю­чаю биб­лио­те­ки как опи­са­но в ста­тье за­пус­каю про­гу ком­пи­лит­ся И в ре­зуль­та­те по­лу­чаю вот что: 1>.parallel.cpp(26) : error C3861: ‘MPI_Init’: identifier not found
1>.parallel.cpp(28) : error C2065: ‘MPI_COMM_WORLD’ : undeclared identifier
1>.parallel.cpp(28) : error C3861: ‘MPI_Comm_size’: identifier not found
1>.parallel.cpp(29) : error C2065: ‘MPI_COMM_WORLD’ : undeclared identifier
1>.parallel.cpp(29) : error C3861: ‘MPI_Comm_rank’: identifier not found
1>.parallel.cpp(41) : error C3861: ‘MPI_Wtime’: identifier not found
1>.parallel.cpp(55) : error C3861: ‘MPI_Wtime’: identifier not found
1>.parallel.cpp(59) : error C2065: ‘MPI_DOUBLE’ : undeclared identifier
1>.parallel.cpp(59) : error C2065: ‘MPI_SUM’ : undeclared identifier
1>.parallel.cpp(59) : error C2065: ‘MPI_COMM_WORLD’ : undeclared identifier
1>.parallel.cpp(59) : error C3861: ‘MPI_Reduce’: identifier not found
1>.parallel.cpp(76) : error C3861: ‘MPI_Finalize’: identifier not found Не под­ска­же­те в чём де­ло? Про­гу пи­сал на Visual C++ 2008
А вы не за­бы­ли под­клю­чить за­го­ло­воч­ный файл mpi.h? В со­сед­ней ста­тье мож­но най­ти за­ве­до­мо ра­бо­чий при­мер. По­про­буй­те от­ком­пи­ли­ро­вать и за­пу­стить сна­ча­ла его.
Спа­си­бо за всё! Всё де­лаю по ста­тье за­пус­каю файл smpd.exe, по­яв­ля­еть­ся ко­манд­ная стро­ка и че­рез не­сколь­ко се­кунд ис­че­за­ет и ни­че­го не за­пус­ка­ет!!!
В чём мо­жет быть про­бле­ма?
smpd.exe не сле­ду­ет за­пус­кать са­мо­сто­я­тель­но. Это — служ­ба. Она долж­на ра­бо­тать (ри­су­нок 6), и ей дол­жен быть раз­ре­шён до­ступ в сеть (ри­су­нок 7).
Ста­тья очень пра­виль­ная и нуж­ная, спа­си­бо! Ис­поль­зуя «run in a separate window» мож­но мно­го­крат­но вы­зы­вать MPI-про­грам­мы, не за­кры­вая Wmpiexec. (Ин­фор­ма­ция, ко­неч­но, ока­жет­ся толь­ко в кон­со­ли…)
Спа­си­бо за ста­тью огром­ное. А как на­счёт от­лад­ки MPI про­грамм в Visual Studio?
при от­лад­ке вы­да­ет ошиб­ку
Ошиб­ка 1 general error c1010070: Failed to load and parse the manifest. 5 C405BAO =09B8 C:070==K9 D09;. .DebugParal.exe.intermediate.manifest Paral
в чем де­ло? Спа­си­бо
Де­лал все по ста­тье но в на­строй­ках все­рав­но пи­шет ошиб­ку:
Имя_хо­ста:MPICH2 not installed or unable to query the host
кто раз­би­ра­ет­ся в этом по­мо­ги­те плз
E-mail MrSkyrim@gmail.com
ICQ 436 005 534 Skyrim
всё ра­бо­та­ет за­ме­ча­тель­но, спа­си­бо. не за­бы­вай­те за­пус­кать кон­соль и уста­нов­ку от име­ни ад­ми­ни­стра­то­ра, ина­че вы­ле­зет Имя_хо ста:MPICH2 not installed or unable to query the host. Ав­то­ру огром­ное спа­си­бо
Я сту­дент ка­фед­ры при­клад­ной ма­те­ма­ти­ки и про­грам­ми­ро­ва­ния. Ва­ша ста­тья мне очень по­мог­ла при на­строй­ке MPI. Ма­те­ри­ал из­ло­жен пре­дель­но про­сто и до­ступ­но. Спа­си­бо боль­шое за про­де­лан­ную ра­бо­ту. С ува­же­ни­ем, Олег!
При за­пус­ке те­сто­вой про­грам­мы, ко­то­рая счи­та­ет чис­ло 3,14……, все норм!!!
А вот при за­пус­ке LS-DYNA971 за­гру­за­ет­ся лишь тот PC, IP ад­рес ко­то­ро­го сто­ит пер­вым в по­ле HOSTS: у дру­гих PC в ло­каль­ной се­ти по­яв­ля­ют­ся (ес­ли смот­реть че­рез дис­пет­чер за­дач) про­цес­сы за­пу­щен­ные этой про­гра­мой, но они ни сколь­ко не за­гру­жа­ют их CPU во вре­мя рас­че­та.
З.Ы. Что де­лать…….?
[...] mpich по­ста­вить и на­стро­ить до­воль­но хо­ро­шо рас­пи­са­но здесь, от се­бя хо­чу до­ба­вить, что на­страи­вать ТОЧНО по ша­гам, [...]
Су­пер! Спа­си­бо ав­то­ру за по­ша­го­вую ин­ст­рук­цию!
Все ра­бо­та­ет в со­от­вест­вии со ста­тьей, спа­си­бо.
А под­ска­жет ли кто-ни­будь — воз­мож­но за­пу­стить с по­мо­щ­бю MPICH не кон­соль­ное (MFC-шное) при­ло­же­ние? Ко­гда я пы­та­юсь сде­лать это, в дис­пет­че­ре за­дач по­яв­ля­ет­ся про­цесс это­го при­ло­же­ния, но са­мо оно не по­яв­ля­ет­ся…
При­ло­же­ния за­пус­ка­ют­ся от име­ни служ­бы «MPICH 2 Process Manager». Служ­бы име­ют от­дель­ный ра­бо­чий стол, ку­да вы­во­дят­ся их ок­на. Что­бы раз­ре­шить служ­бе вы­во­дить ок­на на ваш ра­бо­чий стол, вклю­чи­те га­лоч­ку «Раз­ре­шить вза­и­мо­дей­ствие с ра­бо­чим сто­лом» в свой­ствах служ­бы «MPICH 2 Process Manager» (Па­нель управ­ле­ния → Ад­ми­ни­стри­ро­ва­ние → Служ­бы).
Огром­ное «Спа­си­бо». Очень по­мог­ли с се­мест­рал­кой!
Спа­си­бо!
Это са­мая хо­ро­шая ста­тья!
Спа­си­бо боль­шое от­лич­ная ста­тья )), но есть па­ру во­про­сов.
1) А на­строй­ки MPICH в Linux силь­но от­ли­ча­ют­ся от Windows?
2) Не по­лу­ча­ет­ся от­ла­жи­вать про­грам­мы в MVS 2005, в ре­жи­ме Local Windows Debugger ра­бо­та­ет, а вот в MPI Cluster Debugger нет!
Де­лаю все как , а он ру­га­ет­ся на: «mpiexec» не яв­ля­ет­ся внут­рен­ней или внеш­ней ко­ман­дой …
За­пус­каю на од­ном обыч­ном ПК с 2-х ядер­ным про­цес­со­ром, Win7 x86.
До­бро­го вре­ме­ни су­ток! При за­пус­ке cpi.exe MPICH от­ра­бо­тал как в ма­нуа­ле на­пи­са­но — иде­аль­но при­рост про­из­во­ди­тель­но­сти при­мер­но 28%. НО при по­пыт­ке рас­па­рал­ле­лить дру­гой рас­чет­ный мо­дуль (fds5_mpi.exe) вы­да­ет ошиб­ку:
Process 1 of 1 is running on boss-epos
Process 0 of 1 is running on boss-epos
Mesh 1 is assigned to Process 0
Mesh 2 is assigned to Process 1 Fire Dynamics Simulator Compilation Date : Fri, 29 Oct 2010 Version: 5.5.3; MPI Enabled; OpenMP Disabled
SVN Revision No. : 7031 Job TITLE : Test BURN_AWAY feature, SVN $Revision: 5563 $
Job ID string : box_burn_away
Fatal error in PMPI_Gatherv: Internal MPI error!, error stack:
PMPI_Gatherv(386)…..: MPI_Gatherv failed(sbuf=003C7D20, scount=1, MPI_DOUBLE_PRECISION, rbuf=003C7D20, rcnts=003C6008, displs=003C6088, MPI_DOUBLE_PRECISION, root=0, MPI_COMM_WORLD) failed
MPIR_Gatherv_impl(199):
MPIR_Gatherv(103)…..:
MPIR_Localcopy(349)…: memcpy arguments alias each other, dst=003C7D20 src=003C7D20 len=8
job aborted:
rank: node: exit code[: error message]
0: BOSS-EPOS: 1: process 0 exited without calling finalize
1: BOSS-EPOS: 123 Под­ска­жи­те в чем мо­жет быть про­бле­ма?
MPI тут не ви­но­ват, это ошиб­ка в про­грам­ме. Про­бле­ма в том, что ну­ле­вой про­цесс, вы­зы­ваю­щий MPI_Gatherv (и ука­зы­ваю­щий се­бя в ка­че­стве по­лу­ча­те­ля), ис­поль­зу­ет один и тот же бу­фер для от­прав­ки и при­ё­ма (ука­за­те­ли sbuf и rbuf име­ют од­но и то же зна­че­ние). В стан­дар­те MPI 1.3 (бу­дем пред­по­ла­гать, что имен­но эту вер­сию стан­дар­та вы ис­поль­зу­е­те) чёр­ным по бе­ло­му на­пи­са­но:
Unless specified otherwise, an argument of type OUT or type INOUT cannot be aliased with any other argument passed to an MPI procedure.
Так что бу­фе­ры долж­ны быть раз­ны­ми.
Спа­си­бо, Ан­тон! Офи­гел от Ва­шей опе­ра­тив­но­сти. Да, Вы пра­вы — у ме­ня 1.3 сто­я­ла. По­ста­вил сей­час 1.3.1.
Под­ска­жи­те: Ста­рые вер­сии MPICH2 до­пус­ка­ли ис­поль­зо­вать один и тот же бу­фер?
По­мо­жет ли уста­нов­ка MPIEXEC_STDOUTBUF в LINE или BLOCK? (дей­ствую уже ме­то­дом на­уч­но­го ты­ка)
спа­си­бо, спа­си­бо, спа­си­бо! =)
Воз­мож­но ли «со­брать» ге­те­ро­ген­ный кла­стер с по­мо­щью mpich2? Не­сколь­ко де­мо­нов smpd, за­пу­щен­ных на linux(ubuntu/debian) и не­сколь­ко — на windows xp? За­ра­нее спа­си­бо за от­вет.
По­про­буй­те, не за­ра­бо­та­ет ли вин­ду­зов­ский MPICH из-под WINE на ма­ши­нах с Linux. Ес­ли так, то за­да­ча ре­ше­на. Ес­ли ва­ри­ант с WINE не ра­бо­та­ет, то вам при­дёт­ся ре­шить не­сколь­ко про­блем. Пре­жде все­го, по­тре­бу­ет­ся ском­пи­ли­ро­вать ва­шу MPI-про­грам­му для ука­зан­ных ОС. За­тем нуж­но убе­дить­ся, что опе­ра­ци­он­ные си­сте­мы име­ют оди­на­ко­вую «бит­ность»: 32 или 64 би­та. MPICH2 не уме­ет кон­вер­ти­ро­вать ти­пы дан­ных при пе­ре­да­че меж­ду 64-бит­ны­ми ма­ши­на­ми и 32-бит­ны­ми (MPICH1 уме­ет, но это сни­жа­ет быст­ро­дей­ствие). Ес­ли бит­ность раз­ная, то нуж­но на­стро­ить ком­пи­ля­то­ры на 64-бит­ных си­сте­мах так, что­бы они вы­да­ва­ли 32-бит­ный код, и ском­пи­ли­ро­вать ва­шу про­грам­му и MPICH2 в 32-бит­ном ва­ри­ан­те.
Да. Ста­тья очень по­лез­на для на­чи­наю­щих. Как на­чи­наю­щий еще хо­чу спро­сить, воз­мож­но ли кон­т­ро­ли­ро­вать за­груз­ку каж­до­го из уз­лов, ис­пол­няю­щих при­ло­же­ние? она ведь не­оди­на­ко­ва? и во­об­ще что по­ни­мать под за­груз­кой. На­вер­ное про­цес­сор­ное вре­мя, то­гда каж­дый узел дол­жен со­об­щать о вре­ме­ни, за­тра­чен­ном на ре­аль­ную ра­бо­ту меж­ду бло­ки­ров­ка­ми. Про­шу со­ве­та по сво­им мыс­лям….
hi
unfortunately i do not know russian language and i really need help for this error:
«MPICH2 not installed or unable to query the host»
i am using just one pc with a «Quad core i7 950 intel» cpu and i do not need a network.
but this error really diappointed me.
i would be really thankful if you help me in english language. with best rigards,
mohsen
No problem. If you do not need network, you can easy get round this problem by using «-localonly» switch in mpiexec or wmpiexec. See figure 13.
Здрав­ствуй­те, Ан­тон Алек­сан­дро­вич. Это пи­шет вам сту­дент 3 кур­са фа­куль­те­та при­клад­ной ма­те­ма­ти­ки и ин­фор­ма­ти­ки. Я чи­тал ва­шу ста­тью о на­строй­ке MPICH в Windows, на­страи­вал со­глас­но ука­за­ни­ям, но не­смот­ря на это про­грам­ма за­пус­ка­ет­ся толь­ко на од­ном ком­пью­те­ре (ко­гда в спис­ке hosts wpmiconfig.exe один ком­пью­тер), а ко­гда в спис­ке hosts 2 ком­пью­те­ра (один из ко­то­рых вир­ту­аль­ная ма­ши­на, как я по­ни­маю сло­во localhost пи­сать не на­до, ко­гда ука­зы­ва­ют­ся име­на, а не IP-ад­ре­са, про­сто че­рез про­бел име­на ма­шин) про­грам­ма wmpiexеc.exe вы­да­ет сле­ду­ю­щую ошиб­ку
launch failed: CreateProcess(«C:Documents and SettingsvladМои до­ку­мен­тыVisual Studio 2008ProjectssendDebugsend.exe») on ‘microsof-cfa8f2′ failed, error 14001 — При­ло­же­ние не бы­ло за­пу­ще­но, по­сколь­ку оно не­кор­рект­но на­строе­но. По­втор­ная уста­нов­ка при­ло­же­ния мо­жет ре­шить дан­ную про­бле­му.
Про­ве­рял и с по­мо­щью wmpiconfig.exe, вро­де бы оши­бок не вы­да­ет, ко­гда на­жи­маю Get Settings.
На вир­ту­аль­ной ма­ши­не нуж­но по­ста­вить Visual Studio или хо­тя бы Visual Studio Redistributable Package, со­от­вет­ствую­щий той вер­сии Visual Studio, ко­то­рой вы ком­пи­ли­ро­ва­ли про­грам­му.
Здрав­стуй­те, Ан­тон Алек­сан­дро­вич. Я ска­чал и уста­но­вил vcredist_x86.exe (Microsoft Visual C++ 2008 Redistributable Package, у ме­ня 32-х бит­ная вер­сия Windows), но про­грам­ма по преж­не­му не за­пус­ка­ет­ся. Я за­был прав­да ска­зать, что про­грам­ма «C:Program FilesMPICH2examplescpi.exe» за­пус­ка­ет­ся на двух hosts и про­ис­хо­ди­ло это до уста­нов­ки до­поль­ни­тель­ных биб­лио­тек (vcredist_x86.exe) и с те­ми же на­строй­ка­ми MPICH(от­сю­да я пред­по­ло­жил, что де­ло в на­строй­ках Visual Studio 2008). Но Visual Studio я на­ста­раи­вал по ин­струц­кии (со­здал пу­стой кон­соль­ный про­ект, до­ба­вил файл ко­да на C++, за­шел в Tools/Options, там про­пи­сал пу­ти C:Program FilesMPICH2include, C:Program FilesMPICH2lib, за­шел в имя про­ек­та properties, там в Configuration properties -> C/C++ -> General уста­но­вил зна­че­ние па­ра­мет­ра До­пол­ни­тель­ные ка­та­ло­ги вклю­че­ния (Additional Include Directories): «C:Program FilesMPICH2include», за­тем в (Configuration properties -> Linker -> General). (Additional Library Directories): уста­но­вил зна­че­ние па­ра­мет­ра До­пол­ни­тель­ные ка­та­ло­ги биб­лио­тек «C:Program FilesMPICH2lib», рас­крыл вклад­ку На­строй­ки кон­фи­гу­ра­ции -> Ком­по­нов­щик -> Ввод (Configuration properties -> Linker -> Input) уста­но­вил зна­че­ние па­ра­мет­ра До­пол­ни­тель­ные за­ви­си­мо­сти (Additional Dependencies): mpi.lib) (ну ду­маю на­строй­ка Visual Studio сде­ла­на вер­но). От­сю­да вы­вод (на­вер­но, хо­тя мо­жет быть с про­гой все нор­маль­но), что де­ло в про­грам­ме. (на двух hosts с 2мя про­цес­са­ми вы­ска­ки­ва­ет ошиб­ка launch failed: CreateProcess(C:newsendDebugnewsend.exe) on ‘microsof-cfa8f2′ failed, error 14001 — При­ло­же­ние не бы­ло за­пу­ще­но, по­сколь­ку оно не­кор­рект­но на­строе­но. По­втор­ная уста­нов­ка при­ло­же­ния мо­жет ре­шить дан­ную про­бле­му.) Хо­тя воз­мож­но де­ло и в на­строй­ке Visual Studio, так как со­здав про­ект с пра­виль­ным фай­лом icpi.c (из пап­ки C:Program FilesMPICH2examples) и на­стро­ив его, по­яв­ля­лась всё та же ошиб­ка. Так­же у ме­ня во­прос дол­жен ли быть уста­нов­лен Visual Studio 2008 на вирт. ма­ши­не?
Здрав­ствуй­те.
У ме­ня про­бле­ма с MPICH2, и гугл, увы, не пред­ла­га­ет мне ре­ше­ний. Уже 2ой день во­жусь. У ме­ня две winxp ма­ши­ны.
MPICH уста­но­вил­ся нор­маль­но, юзер­ней­мы со­зда­ны и пр.
mpiexec -validate [-host вто­рой_хост] да­ёт SUCCESS на обе­их ма­ши­нах
smpd -status [вто­рой хост] то­же всем до­во­лен для обе­их ма­шин. «mpiexec -hosts 2 ло­кал­хост ло­кал­хост cpi.exe» ра­бо­та­ет пре­крас­но, зар­гу­жа­ет оба яд­ра.
«mpiexec -hosts 2 вто­рой­хост вто­рой­хост cpi.exe» ра­бо­та­ет не ху­же, и то­же за­гру­жа­ет оба яд­ра _на вто­рой ма­ши­не_. Т.е. я с пе­ро­вой ма­ши­ны за­пус­каю вы­че­с­ле­ния на вто­рой.
«mpiexec -localonly «, ес­те­ствен­но, то­же да­ёт ожи­дае­мый ре­зуль­тат. Про­бле­ма воз­ни­ка­ет толь­ко в том слу­чае, ко­гда я хо­чу вы­че­с­ле­ния про­из­во­дить сра­зу _на обе­их ма­ши­нах_, т.е.
«mpiexec -hosts 2 ло­кал­хост вто­рой­хост cpi.exe» — тут ме­ня про­сто спра­ши­ва­ют сколь­ко ин­тер­ва­лов я же­лаю для вы­че­с­ле­ния Пи и да­лее всё под­ви­са­ет. Обе ма­ши­ны за­гру­же­ны на 0%. Не мо­гу по­нять в чём де­ло. Ведь раз я с од­ной ма­ши­ны мо­гу за­пус­кать про­цес­сы как на ло­каль­ном про­цес­со­ре так и на вто­ром ком­пе, зна­чит с фай­р­вол­ла­ми/се­тью нет про­блем и ак­ка­ун­ты то­же все пра­виль­ны. Од­на­ко са­мо­го глав­но­го я не мо­гу де­лать — за­дей­ство­вать в вы­че­с­ле­ни­ях од­но­вре­мен­но обе ма­ши­ны. Под­ска­жи­те, в чём мо­жет быть де­ло.
По­доб­ные симп­то­мы воз­ни­ка­ют, ко­гда что-то ме­ша­ет про­грам­мам осу­ществ­лять об­мен по се­ти. По­про­буй­те до­ба­вить cpi.exe в спи­сок ис­клю­че­ний брэнд­мау­э­ра на обе­их ма­ши­нах. Ес­ли у вас уста­нов­лен ан­ти­ви­рус Кас­пер­ско­го, то, ве­ро­ят­но, его при­дёт­ся де­ин­стал­ли­ро­вать.
Спа­си­бо за от­вет.
Бренд­мау­э­ры я, ес­те­ствен­но, про­бо­вал от­клю­чать — не по­мог­ло. Ан­ти­ви­ру­сов на этих ма­ши­нах нет.
Стран­но то, что я мо­гу с од­ной ма­ши­ны за­пу­стить вы­чис­ле­ния на вто­рой ма­ши­не и по­лу­чить об­рат­но от­вет на первую (т.е. mpiexec и сам cpi.exe за­пус­ка­ют­ся на раз­ных ма­ши­нах!), зна­чит об­мен дан­ных всё-та­ки про­ис­хо­дит, но толь­ко ес­ли од­но­вре­мен­но не бо­лее од­ной ма­ши­ны за­ни­ма­ют­ся вы­чис­ле­ни­я­ми
Про­ще го­во­ря: два про­цес­са на од­ной (лю­бой!) ма­ши­не — OK (и не важ­но на ка­кой имен­но я за­пу­стил mpiexec); по од­но­му (или по два) про­цес­са на каж­дой ма­ши­не — за­ви­са­ет)
Есть ве­ро­ят­ность то­го, что поль­зо­ва­те­ля не­об­хо­ди­мо до­ба­вить в груп­пу Remote Desktop Users на обо­их ком­пью­те­рах.
Где-то чи­тал, что вы­чис­ле­ние чис­ла пи яв­ля­ет­ся чи­сто по­сле­до­ва­тель­ным про­цес­сом, т.е. для вы­чис­ле­ния сле­дую­ще­го чис­ла нуж­но зна­че­ние преды­ду­ще­го, и по­это­му не­воз­мож­но рас­па­рал­ле­лить та­кой ал­го­ритм.
Здрав­ствуй­те, Ан­тон Алек­сан­дро­вич. При за­пус­ке в VS2008 вы­ле­та­ют ошиб­ки:
1>Linking…
1>main.obj : error LNK2019: unresolved external symbol _MPI_Finalize@0 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _MPI_Recv@28 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _MPI_Get_count@12 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _MPI_Probe@16 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _MPI_Send@24 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _MPI_Comm_size@8 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _MPI_Comm_rank@8 referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _MPI_Init@8 referenced in function _main
1>D:UsersДе­нисDocumentsVisual Studio 2008Projects1Debug1.exe : fatal error LNK1120: 8 unresolved externals
Вы не зна­е­те с чем мо­гут быть свя­за­ны?
Вы не вклю­чи­ли mpi.lib в спи­сок фай­лов для ком­по­нов­щи­ка. Смот­ри­те ри­сун­ки 15 и 16.
Нет, фай­лы со всех ри­сун­ков у ме­ня под­клю­че­ны и вы­ле­та­ют эти ошиб­ки.
Та же про­бле­ма, что и у Де­ни­са. mpi.lib под­клю­чен.
Ес­ли вдруг у ко­го-то та же про­бле­ма, что у Де­ни­са и Ива­на, на­пи­шу тут от­вет. По­ми­мо mpi.lib в за­ви­си­мо­сти на­до до­ба­вить cxx.lib (че­рез про­б­лел, то есть у вас долж­но быть там «mpi.lib cxx.lib»). В це­лом ма­ну­ал пре­крас­ный, боль­шое спа­си­бо ав­то­ру, я пред­ла­гаю Вам эту ма­лень­кую по­прав­ку до­ба­вить в те­ло ма­ну­а­ла…
Спа­си­бо, до­ба­вил cxx.lib.
А мне не по­мог­ло! По­мо­ги­те кто чем мо­жет лю­ди до­брые!
Спа­си­бо за ста­тью. Она мне очень по­мог­ла разо­брать­ся с на­строй­кой MPICH. По­жа­луй­ста, по­мо­ги­те мне. Хо­чет­ся от­ла­жи­вать про­грам­мы в Visual Studio. Пы­тал­ся по этой ста­тье http://winhpc.ru/?id=63 сде­лать воз­мож­ность от­лад­ки про­грам­мы в Visual Studio. В ито­ге про­грам­ма ком­пи­ли­ру­ет­ся. Ра­бо­та­ет, ес­ли за­пу­стить от­дель­но в wmpiexec.exe, но ес­ли за­пу­стить в Visual Studio по­яв­ля­ет­ся со­об­ще­ние: «Buffer provided too short for path: 4096 provided, 0 needed»
И по­вто­ря­ет столь­ко раз, сколь­ко бы­ло за­да­но про­цес­сов стро­ки «launch failed: Create Process («….»)» код ошиб­ки 87. Что не так?
От­лич­ная ста­тья!
Опи­шу не­сколь­ко граб­лей, на ко­то­рые на­сту­пил уста­нав­ли­вая MPICH:
1. На сай­те MPICH2 http://www.mcs.anl.gov/research/projects/mpich2/ ни­где нет ра­бо­таю­щей ссыл­ки на вер­сию для windows. На­шел по­след­нюю вер­сию для windows в MPICH2 -> downloads -> Previous Versions -> 1.4 (на мо­мент на­пи­са­ния ком­мен­та­рия)
2. На сай­те вы­кла­ды­ва­ют­ся две вер­сии для windows Win IA32 и Win X86_64, од­на для x32 и дру­гая для x64. У ме­ня x64 опе­ра­ци­он­ная си­сте­ма, но за­пус­кать не­об­хо­ди­мо про­грам­мы, ском­пи­ли­ро­ван­ные под x86. Пу­тем проб и оши­бок разо­брал­ся, что в мо­ем слу­чае не­об­хо­ди­мо ста­вить Win IA32.
3. Не сра­зу про­чи­тал про за­пуск уста­но­воч­но­го па­ке­та от име­ни Ад­ми­ни­стра­то­ра. Из-за это­го не сра­зу по­нял, по­че­му в спис­ке служб не­ту MPICH
До­бро­го вре­ме­ни су­ток! Ста­тей­ка на­иот­лич­ней­шая! Толь­ко я сло­вил ка­кой-то не­по­нят­ный трабл. Все де­лал, как на­пи­са­но. Не мо­гу за­дать хо­сты че­рез про­гу wmpiconf для той ма­ши­ны на ко­то­рой бу­ду за­пус­кать про­грам­мы. Ошиб­ка вы­гля­дит так (nout — это хост): [-1:2640]...ERROR:Unable to write the smpd registry value \'hosts:locahost jeanna\', error 1168
Эле­мент не най­ден.
unable to set hosts option.
Ста­вил все от име­ни ад­ми­ни­стра­то­ра. На обо­их но­у­тах сто­ит 7ка мак­си­маль­ная 32хбит­ная вер­сия mpich2 1.4.1p1-win-ia32.msi. Свя­зи по кли­ку на кноп­ку ScanHost на­строй­ки по­лу­ча­ет ма­ши­на т.е., как в ста­тье на­пи­са­но, за­го­ра­ет­ся зе­лень­ким оба хо­ста. За­да­ча счи­та­ет­ся толь­ко на од­ной ма­ши­не я так по­имаю, да­же ес­ли за­пус­кать без клю­ча -localonly. Плиз, под­ска­жи­те, что сде­лать? Оч. нуж­но чтоб это за­ра­бо­та­ло. За­ра­нее спа­си­бо всем кто от­клик­нул­ся!
При­вет­ствую, Ан­тон. Я по­пы­тал­ся за­пу­стить тот при­мер ра­бо­таю­щей про­грам­мы, о ко­то­рой вы упо­ми­на­ли в преды­ду­щих со­об­ще­ни­ях и при ком­пи­ля­ции Visual Studio C++ 6 бы­ли вы­да­ны ошиб­ки: ———————Configuration: 1 — Win32 Debug———————
Compiling… 1.cpp c:program filesmpich2includempicxx.h(1509) : error C2555: ‘MPI::Nullcomm::Clone’ :
overriding virtual function differs from ‘MPI::Comm::Clone’ only by return type or calling convention
c:program filesmpich2includempicxx.h(1142) : see declaration of ‘Comm’ c:program filesmpich2includempicxx.h(1575) : error C2555: ‘MPI::Intercomm::Clone’ :
overriding virtual function differs from ‘MPI::Comm::Clone’ only by return type or calling convention
c:program filesmpich2includempicxx.h(1142) : see declaration of ‘Comm’ c:program filesmpich2includempicxx.h(1609) : error C2259: ‘Intercomm’ :
cannot instantiate abstract class due to following members:
c:program filesmpich2includempicxx.h(1516) : see declaration of ‘Intercomm’ c:program filesmpich2includempicxx.h(1609) : warning C4259:
‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ : pure virtual function was not defined
c:program filesmpich2includempicxx.h(1462) : see declaration of ‘Clone’ c:program filesmpich2includempicxx.h(1643) : error C2259:
‘Intercomm’ : cannot instantiate abstract class due to following members:
c:program filesmpich2includempicxx.h(1516) : see declaration of ‘Intercomm’ c:program filesmpich2includempicxx.h(1643) : warning C4259:
‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ : pure virtual function was not defined
c:program filesmpich2includempicxx.h(1462) : see declaration of ‘Clone’ c:program filesmpich2includempicxx.h(1649) : error C2259:
‘Intercomm’ : cannot instantiate abstract class due to following members:
c:program filesmpich2includempicxx.h(1516) : see declaration of ‘Intercomm’ c:program filesmpich2includempicxx.h(1649) : warning C4259:
‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ : pure virtual function was not defined
c:program filesmpich2includempicxx.h(1462) : see declaration of ‘Clone’ c:program filesmpich2includempicxx.h(1666) : error C2555: ‘MPI::Intracomm::Clone’ :
overriding virtual function differs from ‘MPI::Comm::Clone’ only by return type or calling convention
c:program filesmpich2includempicxx.h(1142) : see declaration of ‘Comm’ c:program filesmpich2includempicxx.h(1674) : error C2259:
‘Intercomm’ : cannot instantiate abstract class due to following members:
c:program filesmpich2includempicxx.h(1516) : see declaration of ‘Intercomm’ c:program filesmpich2includempicxx.h(1674) : warning C4259:
‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ : pure virtual function was not defined
c:program filesmpich2includempicxx.h(1462) : see declaration of ‘Clone’ c:program filesmpich2includempicxx.h(1682) : error C2259: ‘Intercomm’ :
cannot instantiate abstract class due to following members:
c:program filesmpich2includempicxx.h(1516) : see declaration of ‘Intercomm’ c:program filesmpich2includempicxx.h(1682) :
warning C4259: ‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ :
pure virtual function was not defined
c:program filesmpich2includempicxx.h(1462) : see declaration of ‘Clone’ c:program filesmpich2includempicxx.h(1690) : error C2259: ‘Intercomm’ :
cannot instantiate abstract class due to following members:
c:program filesmpich2includempicxx.h(1516) : see declaration of ‘Intercomm’ c:program filesmpich2includempicxx.h(1690) : warning C4259:
‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ : pure virtual function was not defined
c:program filesmpich2includempicxx.h(1462) : see declaration of ‘Clone’ c:program filesmpich2includempicxx.h(1705) : error C2259: ‘Intercomm’ :
cannot instantiate abstract class due to following members:
c:program filesmpich2includempicxx.h(1516) : see declaration of ‘Intercomm’ c:program filesmpich2includempicxx.h(1705) : warning C4259:
‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ : pure virtual function was not defined
c:program filesmpich2includempicxx.h(1462) : see declaration of ‘Clone’ c:program filesmpich2includempicxx.h(2336) : error C2555: ‘MPI::Graphcomm::Clone’ :
overriding virtual function differs from ‘MPI::Comm::Clone’ only by return type or calling convention
c:program filesmpich2includempicxx.h(1142) : see declaration of ‘Comm’ c:program filesmpich2includempicxx.h(2336) : error C2555: ‘MPI::Graphcomm::Clone’ :
overriding virtual function differs from ‘MPI::Intracomm::Clone’ only by return type or calling convention
c:program filesmpich2includempicxx.h(1584) : see declaration of ‘Intracomm’ c:program filesmpich2includempicxx.h(2451) : error C2555: ‘MPI::Cartcomm::Clone’ :
overriding virtual function differs from ‘MPI::Comm::Clone’ only by return type or calling convention
c:program filesmpich2includempicxx.h(1142) : see declaration of ‘Comm’ c:program filesmpich2includempicxx.h(2451) : error C2555: ‘MPI::Cartcomm::Clone’ :
overriding virtual function differs from ‘MPI::Intracomm::Clone’ only by return type or calling convention
c:program filesmpich2includempicxx.h(1584) : see declaration of ‘Intracomm’ c:program filesmpich2includempicxx.h(2554) : error C2259: ‘Intracomm’ :
cannot instantiate abstract class due to following members:
c:program filesmpich2includempicxx.h(1584) : see declaration of ‘Intracomm’ c:program filesmpich2includempicxx.h(2554) : warning C4259:
‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ : pure virtual function was not defined
c:program filesmpich2includempicxx.h(1462) : see declaration of ‘Clone’ c:program filesmpich2includempicxx.h(2556) : error C2259: ‘Nullcomm’ :
cannot instantiate abstract class due to following members:
c:program filesmpich2includempicxx.h(1478) : see declaration of ‘Nullcomm’ c:program filesmpich2includempicxx.h(2556) : warning C4259:
‘class MPI::Comm &__thiscall MPI::Comm::Clone(void) const’ : pure virtual function was not defined
c:program filesmpich2includempicxx.h(1462) : see declaration of ‘Clone’ Error executing xicl6.exe. 1.obj — 16 error(s), 9 warning(s) Оши­бок не бы­ло, ко­гда ком­пи­ли­ро­ва­лась те­сто­вая про­грам­ма вы­чис­ле­ния чис­ла пи.
В чем мо­жет быть про­бле­ма?
За­ра­нее бла­го­да­рен.
Воз­мож­но, ста­рый ком­пи­ля­тор.
Огром­ное спа­си­бо! для на­чи­наю­щих вро­де ме­ня луч­ше не при­ду­ма­ешь. все по­нят­но по­сле пер­во­го про­чте­ния.
Здрав­ствуй­те. Тут вы­ле­та­ет:
1>------ Build started: Project: 2, Configuration: Release Win32 ------
1>  icpi.c
1>C:SoftVisualStudioVCincludecmath(19): error C2061:
  syntax error : identifier \'acosf\'
1>C:SoftVisualStudioVCincludecmath(19): error C2059:
  syntax error : \';\'
1>C:SoftVisualStudioVCincludecmath(19): error C2061:
  syntax error : identifier \'asinf\'
1>C:SoftVisualStudioVCincludecmath(19): error C2059:
  syntax error : \';\'
1>C:SoftVisualStudioVCincludecmath(20): error C2061:
  syntax error : identifier \'atanf\'
1>C:SoftVisualStudioVCincludecmath(20): error C2059:
  syntax error : \';\'
1>C:SoftVisualStudioVCincludecmath(20): error C2061:
  syntax error : identifier \'atan2f\'
1>C:SoftVisualStudioVCincludecmath(20): error C2059:
  syntax error : \';\'
[...]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
По­сле ука­за­ний всех пу­тей. При­чём тут во­об­ще math?! Про­га про­стей­шая:
#include
#include
using namespace std; int main(int argc, char **argv)
{
     MPI_Init(&argc, &argv);
     
     int rank, size;
     
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     MPI_Comm_size(MPI_COMM_WORLD, &size);      if( rank )
     {
         char buf[] = "Hello!";
         MPI_Send(buf, sizeof(buf), MPI_CHAR, 0, 0, MPI_COMM_WORLD);
     } else {
         cout << "Process 0 started" << endl;
         for(int i(1); i<size; ++i)
         {
             MPI_Status s;
             MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &s);
             int count;
             MPI_Get_count(&s, MPI_CHAR, &count);              char *buf = new char[count];
             MPI_Recv(buf, count, MPI_CHAR,
                      MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &s);
             cout << "Message from process " << s.MPI_SOURCE << ": "
                  << buf << endl;
             delete[] buf;
         }
         cout << "Done." << endl;
     }      MPI_Finalize();
     return 0;
}
К со­жа­ле­нию, со­жра­лись име­на за­го­ло­воч­ных фай­лов в #include. Мо­гу по­со­ве­то­вать вбить про­стей­шую про­грам­му, не от­но­ся­щу­ю­ся к MPI, и от­ком­пи­ли­ро­вать. Воз­мож­но, не­вер­но сде­лан про­ект в Visual Studio.
здрав­стуй­те, у ме­ня про­бле­ма. mpi про­га ра­бо­та­ет при за­пус­ке на wmpiexec, со­зда­ет­ся вы­ход­ной файл про­цес­сом ран­га 0. Ко­гда за­пус­каю в ко­манд­ной стро­ке свою про­гу
C:Program FilesMPICH2bin>mpiexec -n 10 путь к фай­лу
она не­ко­то­рое вре­мя вы­пол­ня­ет мою про­гу(до­ста­точ­но ко­рот­кое), (на ко­ман­ду mpiexec не ру­га­ет­ся), на экра­не по­яв­ля­ет­ся
C:Program FilesMPICH2bin>
но вы­ход­ной файл не со­зда­ет­ся.
«Кон­соль­ный ввод-вы­вод всех про­цес­сов MPI-про­грам­мы пе­ре­на­прав­ля­ет­ся на кон­соль, на ко­то­рой за­пу­ще­на Mpirun»
А есть ли воз­мож­ность осу­ще­ствить кон­соль­ный ввод-вы­вод на тех ма­ши­нах, на ко­то­рых вы­пол­ня­ют­ся про­цес­сы?
На­при­мер, ес­ли в ло­каль­ной се­ти есть 2 ма­ши­ны
1) PC001 (192.168.10.17)
2) PC002 (192.168.10.18)
За­пуск MPI-про­грам­мы (эле­мен­тар­ное при­вет­ствие: cout << "Hello from process" << ProcRank; ) осу­ществ­ля­ет­ся с PC001.
Так вот есть ли спо­соб на стро­ить MPICH так, что­бы на PC001 по­яв­ля­лась кон­соль с тек­стом "Hello from process 0", а на PC002 "Hello from process 1"?
То есть, что­бы про­цес­сы на вы­чис­ли­тель­ных уз­лах ра­бо­та­ли не в фо­но­вом ре­жи­ме.
Кон­соль у ва­ше­го при­ло­же­ния за­би­ра­ет­ся, а вот ка­кие-ни­будь дру­гие ок­на оно смо­жет вы­во­дить по­сле до­пол­ни­тель­ной на­строй­ки. Смот­ри­те этот ком­мен­та­рий.
До­бро­го вре­ме­ни су­ток!
В се­ти име­ют­ся две ма­ши­ны с раз­ны­ми техн. ха­рак­те­ри­сти­ка­ми и ОС (Windows 7 (x64) и Windows XP (x86)). Уста­но­вил MPICH2 (x86) на обе ма­ши­ны — ве­ду­щей опре­де­лил ту, на ко­то­рой Windows 7 (x64). Всё на­стро­ил, как опи­са­но в Ва­шей ста­тье (точ­нее я так ду­маю, что всё). За­пус­кал те­сто­вое при­ло­же­ние cpi.exe в wmpiexec.exe — что-то счи­та­лось. Ре­шил посмот­реть код этой не­за­мыс­ло­ва­той те­сто­вой про­грамм­ки, рас­ком­мен­тил там тот ку­сок, ко­то­рый вы­во­дит №, кол-во про­цес­сов и имя ма­ши­ны. Пе­ре­ком­пи­ли­ро­вал. За­пу­стил сно­ва в wmpiexec.exe. Ре­зуль­та­ты разо­ча­ро­ва­ли. Ока­зы­ва­ет­ся всё это вре­мя cpi.exe за­пус­ка­лась толь­ко на ве­ду­щей ма­ши­не (вы­во­дят­ся №, кол-во про­цес­сов и имя толь­ко од­ной ве­ду­щей ма­ши­ны). Соб­ствен­но, где тут со­ба­ка за­ры­та?
P.S. Обе ма­ши­ны пре­крас­но ви­дят друг дру­га, файер­во­лы от­клю­че­ны, cpi.exe и все не­об­хо­ди­мые про­грам­мы из MPICH2bin до­бав­ле­ны в ис­клю­че­ния в бранд­мау­э­рах обе­их ма­шин.
P.P.S. По­гуг­лил, есть по­до­зре­ния из-за x64, но не уве­рен, по­сколь­ку те­сто­вая про­грам­ма ком­пи­ли­ро­ва­лась под x86.
Очень стран­но. Вы ука­за­ли в по­ле hosts про­грам­мы wmpiexec че­рез про­бел ip-ад­ре­са или име­на ва­ших двух ком­пью­те­ров? Вы­бра­ли 2 про­цес­са? (Ключ «-localonly» не ну­жен для за­пус­ка на не­сколь­ких комью­те­рах.)
Хм, про по­ле hosts я и по­за­был. Те­перь уже дру­гая про­бле­ма (по­сле ука­за­ния ip-ад­ре­сов): Process 0 of 2 is on 192.168.1.100
Enter the number of intervals: (0 quits) 10000
Fatal error in PMPI_Bcast: Other MPI error, error stack:
PMPI_Bcast(1478)…………………: MPI_Bcast(buf=0018FE48, count=1, MPI_INT, root=0, MPI_COMM_WORLD) failed
MPIR_Bcast_impl(1321)…………….:
MPIR_Bcast_intra(1155)……………:
MPIR_Bcast_binomial(189)………….:
MPIC_Send(66)……………………:
MPIC_Wait(540)…………………..:
MPIDI_CH3I_Progress(402)………….:
MPID_nem_mpich2_blocking_recv(905)…:
MPID_nem_newtcp_module_poll(37)……:
MPID_nem_newtcp_module_connpoll(2656):
gen_cnting_fail_handler(1739)……..: connect failed — Пре­вы­шен тай­маут се­ма­фо­ра. (errno 121) job aborted:
rank: node: exit code[: error message]
0: 192.168.1.100: 1: process 0 exited without calling finalize
1: 192.168.1.102: 123 P.S. Ключ -localonly не ука­зы­вал­ся при за­пус­ке. 192.168.1.100 — ос­нов­ная ма­ши­на, 192.168.1.102 — вто­рая ма­ши­на. Command: mpiexec.exe -hosts 2 192.168.1.100 192.168.1.102 -noprompt «\\192.168.1.100MPIcpi.exe». Ко­ли­че­ство про­цес­сов: 2.
За­был упо­мя­нуть, что на ос­нов­ной ма­ши­не сто­ит MS Visual Studio 2010 (C++), на вто­рой — уста­нов­ле­ны па­ке­ты MS Visual C++ 2005, 2008, 2010 Redistributable — ес­ли это иг­ра­ет ка­кую-ли­бо роль.
По­доб­ная си­ту­а­ция воз­ни­ка­ла у ме­ня, ес­ли про­грам­ма \\192.168.1.100MPIcpi.exe не бы­ла до­бав­ле­на в спи­сок ис­клю­че­ний брэнд­мау­э­ра на обо­их ком­пью­те­рах. Нуж­но до­ба­вить её пря­мо в та­ком ви­де, с се­те­вым пу­тём. Кро­ме то­го, бы­ва­ет, что ме­ша­ют ан­ти­ви­ру­сы и фай­р­вол­лы.
Спа­си­бо за опе­ра­тив­ность!
Про­бле­ма, ви­ди­мо, в пе­ре­ком­пи­ли­ро­ван­ной про­грам­ме, бу­ду раз­би­рать­ся…
Те­перь ис­ход­ный при­мер за­пус­ка­ет­ся без оши­бок (прав­да, я не знаю, как про­ве­рить, дей­стви­тель­но ли cpi.exe от­ра­бо­та­ла на двух ма­ши­нах). А вот её пе­ре­ком­пи­ли­ро­ван­ный ва­ри­ант, где от­кры­ты те две строч­ки (весь осталь­ной код да­же не тро­гал), что­бы вы­во­ди­лись со­об­ще­ния с № про­цес­са и име­нем ма­ши­ны, уже не ра­бо­та­ет на двух ма­ши­нах (од­на­ко ра­бо­та­ет на од­ной, ес­ли за­пус­кать с -localonly).
Разо­брал­ся с про­бле­мой. На­пи­шу, что сде­лал, вдруг ко­му-то по­мо­жет.
В об­щем, на вто­рой ма­ши­не про­сто не хва­та­ло па­ры биб­лио­тек (кон­крет­но у ме­ня это бы­ли msvcr100d.dll и msvcrp100d.dll). Об­на­ру­жил это, за­пу­стив про­грам­му в обыч­ном ре­жи­ме на вто­рой ма­ши­не. Вы­ско­чи­ло со­об­ще­ние о не­хват­ки ука­зан­ных биб­лио­тек. Про­стая пе­ре­уста­нов­ка па­ке­та MS Visual C++ 2010 Redistributable, ска­чан­ная с сай­та Microsoft, не по­мог­ла. По­это­му про­сто ско­пи­ро­вал эти биб­лио­те­ки с ос­нов­ной ма­ши­ны на вто­рую (в ..System32). Всё за­ра­бо­та­ло!
P.S. Те­перь, пре­жде чем за­пус­кать лю­бую про­грам­му че­рез wmpiexec.exe, я сна­ча­ла про­ве­ряю, ра­бо­та­ет ли она в обыч­ном ре­жи­ме на не­основ­ной ма­ши­не
про­из­во­жу за­пуск со сле­дую­щей стро­кой: «C:Program FilesMPICH2binmpiexec.exe» -wdir \\10.10.214.146mpi -log -hosts 2 10.10.214.146 10.10.214.223 -noprompt \\10.10.214.146mpicpi.exe обо­лоч­ка де­ла­ет ни­че­го(ес­ли ука­зы­вать бо­лее 1 про­цес­са).
при за­пус­ке с од­ним про­цес­сом всё нор­маль­но счи­та­ет
про­грам­ма ра­бо­та­ет и на 1 и на 2 ма­ши­не. ан­ти­ви­ру­сы от­клю­че­ны, в раз­ре­ше­них брэнд­мау­э­ра про­пи­са­но. и там и там vs2010 c по­след­ни­ми ре­дис­три­бу­ти­ва­ми. 1 ма­ши­на xp sp3, вто­рая win7 ultimate. так­же при по­пыт­ке уста­но­вить зна­че­ние па­ра­мет­ра hosts вы­ла­зи­ет ошиб­ка: [-1:8032]…ERROR:Unable to write the smpd registry value ‘hosts:10.10.214.146 10.10.214.223′, error 1168
Эле­мент не най­ден. очень на­до сроч­но разо­брать­ся в ра­бо­те mpi, сес­сия на но­су(
За­ра­нее спа­си­бо за по­мощ.
есть идеи?
ещё 1 симп­том при по­пыт­ке из­ме­нить зна­че­ние па­ра­мет­ра logfile об­на­ру­жи­лось сле­дую­щее ис­клю­че­ние: unable to set logfile option.
[-1:2952]…ERROR:Unable to open the HKEY_LOCAL_MACHINESOFTWAREMPICHSMPD registry key, error 5
От­ка­за­но в до­сту­пе. обо­лоч­ку от ад­ми­на за­пу­стить не­воз­мож­но.:(
К со­жа­ле­нию, я ни­ко­гда не встре­чал­ся с по­доб­ны­ми ошиб­ка­ми. На­сколь­ко я по­ни­маю, за­пи­сью в ре­естр за­ни­ма­ет­ся са­ма служ­ба SMPD. Эта ошиб­ка на ма­ши­не с Windows 7? Убе­ди­тесь, что там вы за­пус­ка­ли уста­нов­ку из учёт­ной за­пи­си ад­ми­ни­стра­то­ра. Воз­мож­но, име­ет смысл про­ве­рить су­ще­ство­ва­ние вет­ки ре­ест­ра «HKEY_LOCAL_MACHINE  SOFTWARE  MPICH», и посмот­реть раз­ре­ше­ния на за­пись ту­да для поль­зо­ва­те­ля с име­нем «Local Service».
та­кие про­бле­мы и на ма­ши­не с win7 и на ма­ши­не с xp. вет­ка су­ще­ству­ет уста­нав­ли­ва­лось от ад­ми­на.
кста­ти на­шёл спо­соб за­пу­стить обо­лоч­ки от ад­ми­на, но то­же не по­мог­ло.раз­ре­ше­ние на за­пись сей­час про­ве­рю, от­пи­шусь
Здрав­стуй­те!
Под­ска­жи­те в чем де­ло, есть на­пи­сан­ная про­грам­ма MPI, она ис­прав­но ра­бо­та­ет на 1 и на 4х про­цес­сах, ес­ли по­ста­вить 2 или лю­бое дру­гое чис­ло вы­да­ет вот та­кой текст:
Unexpectedd number of parallel processes. We suppose to make calculations using 4 of them. Actual value=2unable to read the cmd header on the pmi context, Error = -1
.
Error posting readv, Уда­лен­ный хост при­ну­ди­тель­но разо­рвал су­ще­ствую­щее под­клю­че­ние.(10054)
unable to read the cmd header on the pmi context, Error = -1
.
Error posting readv, Уда­лен­ный хост при­ну­ди­тель­но разо­рвал су­ще­ствую­щее под­клю­че­ние.(10054) job aborted:
rank: node: exit code[: error message]
0: ASUSF3JP: -1: process 0 exited without calling finalize
1: ASUSF3JP: 123
Это са­ма про­грам­ма не хо­чет счи­тать ни при ка­ком ко­ли­че­стве про­цес­сов, кро­ме че­ты­рёх. Об­ра­ти­тесь к раз­ра­бот­чи­ку про­грам­мы.
До­брый день. Спа­си­бо вам за ста­тью.
Столк­нул­ся с та­кой про­бле­мой. Уста­но­вил mpich2, под­клю­чил хе­де­ры и биб­лио­те­ки, ука­зал пу­ти к хе­де­рам и биб­лио­те­кам ком­пи­ля­то­ру (Dev-c++, VS2010).
[Linker error] undefined reference to `MPI_Init’
и та­кая ошиб­ка на все вы­зо­вы(функ­ции) биб­лио­те­ки.
Един­ствен­ное на что ду­маю, в mpich2 нет ни­ка­ких dll. Хо­тя в ин­ст­рук­ции го­во­рит­ся ки­нуть их в system32.
Не под­ска­жи­те в чем про­бле­ма. За­ра­нее спа­си­бо.
При чём здесь dll, ес­ли у вас про­грам­ма да­же не ком­пи­ли­ру­ет­ся? Ско­рее все­го вы не при­лин­ко­ва­ли к про­грам­ме ста­ти­че­ские биб­лио­те­ки (.lib). Смот­ри­те ри­су­нок 16 и текст над ним.
Я про­сто уже не знаю что я мог не так зде­лать.. Под­клю­чил биб­лио­те­ки как на ри­сун­ке 16. mpi.lib и cxx.lib.
При мо­ем ис­ход­ни­ке ни­че­го не из­ме­ни­лось ( при при­со­еди­не­нии биб­лио­те­ки cxx.lib )
А при ис­ход­ни­ке от mpich но­вая ошиб­ка
error LNK1112: тип ком­пью­те­ра мо­ду­ля «x64″ про­ти­во­ре­чит ти­пу це­ле­во­го ком­пью­те­ра «X86″ …cxx.lib(initcxx.obj)»
Разо­брал­ся =) Уста­но­вил ia32 вер­сию и все нор­маль­но =)
Спа­си­бо вам.
Здрав­ствуй­те.Все ра­бо­та­ет за­ме­ча­тель­но кро­ме од­но­го,вы­ле­за­ет все­го лишь од­но кон­соль­ное ок­но вме­сто 4(4про­цес­са).Поль­зу­юсь Visual2010,cluster debugging,от­ла­жи­вать каж­дый про­цесс по­лу­ча­ет­ся,но вот нка­ко­го вы­во­да в ок­но,ли­бо не­сколь­ко кон­соль­ных окон с ошиб­ка­ми process 0 exited without calling finalize.
Не знаю свя­за­но ли это с этим,но в ок­не Modules для mpich2mpi.dll не на­хо­дит таб­ли­цы pdb,а так­же пи­шет
mpich2nemesis.dll C:WindowsSysWOW64mpich2nemesis.dll N/A N/A Binary was not built with debug information. 7 02.09.2011 0:54 00610000-007D0000* [4016] Test1.exe: Native
Огром­ное спа­си­бо за ста­тью очень силь­но по­мог­ла
У ме­ня все ра­бо­та­ет. Спа­си­бо ав­то­ру. Вот толь­ко как со­зда­вать про­грам­мы в mpi я так и не по­нял. Я смот­рю на эту про­гу про­стей­шую и по­нять во­об­ще не мо­гу че к че­му! посмот­рел на дру­гих сай­тах ни­х­ре­на не по­нят­но… мо­жет под­са­же­те ссылоч­ку рус­ско языч­ную где но­вич­ку все по­нят­но. #include
#include
using namespace std; int main(int argc, char **argv)
{
MPI_Init(&argc, &argv); int rank, size; MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size); if( rank )
{
char buf[] = «Hello!»;
MPI_Send(buf, sizeof(buf), MPI_CHAR, 0, 0, MPI_COMM_WORLD);
} else {
cout << "Process 0 started" << endl;
for(int i(1); i<size; ++i)
{
MPI_Status s;
MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &s);
int count;
MPI_Get_count(&s, MPI_CHAR, &count); char *buf = new char[count];
MPI_Recv(buf, count, MPI_CHAR,
MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &s);
cout << "Message from process " << s.MPI_SOURCE << ": "
<< buf << endl;
delete[] buf;
}
cout << "Done." << endl;
} MPI_Finalize();
return 0;
} - хоть бы ком­мен­та­рии в про­грам­ме на­пи­са­ли что к че­му и за­чем.
hi.
Your article was excellent.
Wmpiconfig me when I entered. This gives error:
NASIRI :MPICH2 not installed or unable to query the host
The two computers are networked together.
what?
Please help me!
Здрав­ствуй­те. У ме­ня вот та­кая про­бле­ма при ис­поль­зо­ва­нии Bcast
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
Fatal error in PMPI_Bcast: Invalid communicator, error stack:
PMPI_Bcast(2011): MPI_Bcast(buf=0x3c06160, count=1723025, MPI_DOUBLE_PRECISION, root=1140850688, comm=0×0) failed
PMPI_Bcast(1884): Invalid communicator
rank 3 in job 57 tesla1_43635 caused collective abort of all ranks
exit status of rank 3: return code 1
Здрав­ствуй­те!Вот по­чи­тал ва­шу ста­тью,все сде­лал …но вы­ле­та­ет ошиб­ка Credentials for Ад­мин rejected connecting to Во­ва-ПК
Aborting: Unable to connect to Во­ва-ПК. си­жу вто­рой день!По­мо­ги­те!Все на од­ном ком­пе!Спа­си­бо!
На­пи­са­но «не­об­хо­ди­мо, что­бы име­на ком­пью­те­ров со­дер­жа­ли толь­ко ла­тин­ские бук­вы и циф­ры». Кро­ме то­го, имя «Ад­мин» ему то­же мо­жет не по­нра­вить­ся.
За­ме­ча­тель­ная ста­тья! Все про­сто и по­нят­но. Спа­си­бо боль­шое!
все сде­лал по ин­ст­рук­ции, но вы­ла­зят та­кие ошиб­ки при по­пыт­ки ком­пи­ля­ции: Ошиб­ка 2 error LNK2019: ссыл­ка на не­раз­ре­шен­ный внеш­ний сим­вол _MPI_Finalize в функ­ции _main C:Usersxxxxxdocumentsvisual studio 2010Projectsprog1prog1icpi.obj prog1 Ошиб­ка 3 error LNK2019: ссыл­ка на не­раз­ре­шен­ный внеш­ний сим­вол _MPI_Reduce в функ­ции _main C:Usersxxxxxdocumentsvisual studio 2010Projectsprog1prog1icpi.obj prog1 Ошиб­ка 4 error LNK2019: ссыл­ка на не­раз­ре­шен­ный внеш­ний сим­вол _MPI_Bcast в функ­ции _main C:Usersxxxxxdocumentsvisual studio 2010Projectsprog1prog1icpi.obj prog1
и тд.
Visual Studio 2010
windows 7 64x
Разо­брал­ся, у ме­ня Vusual сто­ял 32 бит­ный, со­от­вет­ствен­но mpich то­же нуж­но бы­ло ка­чать 32 бит­ный =)
От­лич­ная ста­тья.
От се­бя до­бав­лю:
1)у ме­ня mpi.lib;cxx.lib че­рез точ­ку с за­пя­той (че­рез про­бел ру­га­ет­ся);
2)в visual c++ 2010 express (ста­вил вер­сию x64) он ру­гал­ся на 64 бит­ную вер­сию mpich2, со­от­ветс­вен­но по­ста­вил 32 бит­ную — все норм пошло.
*по­ста­вил 32 бит­ную вер­сию mpich2
Спа­си­бо за ста­тью! Уста­но­вил MPICH на Windows XP SP3, но при за­пус­ке wmpiregister.exe ошиб­ка «Си­сте­ма до­пу­сти­ла…» Что мне де­лать?
До­брый день! Пы­та­юсь уста­но­вть mpich2 на од­ном ком­пью­те­ре. Де­лаю все как на­пи­са­но, но в ок­не wmpiconfig.exe все рав­но над­пись «MPICH2 not installed or unable to query the host». А в ок­не MPIEXEC при по­пыт­ке за­пу­стить ка­кой-ни­будь ис­поль­зяе­мый файл вы­во­дит со­об­ще­ние Error while connecting to host, Под­клю­че­ние не уста­нов­ле­но, т.к. ко­неч­ный ком­пью­тер от­верг за­прос на под­клю­че­ние. (10061)
Connect on sock (host=ADMIN-VEK, port=8676) failed, exhaused all end points
Unable to connect to ‘ADMIN-VEK:8676′,
sock error: Error = -1 ADMIN-VEK — имя ком­пью­те­ра
Что де­лать?
Ока­зы­ва­ет­ся, мне нуж­но бы­ло то, о чем на­пи­са­но в сле­дую­щей ста­тье — «Microsoft MPI и Visual Studio».
Моя цель — от­ла­жи­вать па­ра­л­лель­ные про­грам­мы на обыч­ном ком­пью­те­ре в Visual Studio, что­бы на кла­стер от­прав­лять уже го­то­вые про­грам­мы, про­ве­рен­ные на не­боль­ших те­сто­вых при­ме­рах.
Все по­лу­чи­лось! Пи­сать па­ра­л­лель­ную про­грам­му в Visual Studio — про­сто меч­та! За­ме­ча­тель­ная вещь.
Боль­шое спа­си­бо! Луч­шее из всех ру­ко­водств по MPI+VS
Моя вам ис­крен­няя бла­го­дар­ность и вос­хи­ще­ние! Пре­крас­ное ру­ко­вод­ство, всё по­дроб­но и по­нят­но. Всё за­ра­бо­та­ло как на­до. Спа­си­бо!
Вро­де все на­стро­ил по ин­ст­рук­ции, а вы­да­ет ошиб­ку
Fatal error in MPI_Init: Other MPI error, error stack:
MPIR_Init_thread(392):
MPID_Init(107)…….: channel initialization failed
MPID_Init(371)…….: PMI_Init returned -1
[01:7548]..ERROR:Connect on sock (host=Ђ­¤аҐ© Ђ­¤аҐ©.Dlink fe80::b8ed:ea86:5ddf:bc12%20 fe80::158b:b0d:fa8f:a300%21 fe80::80b1:aec5:39a9:2bръ, port=64240) failed, exhaused all end points
SMPDU_Sock_post_connect failed.
[0] PMI_ConnectToHost failed: unable to post a connect to Ђ­¤аҐ© Ђ­¤аҐ©.Dlink fe80::b8ed:ea86:5ddf:bc12%20 fe80::158b:b0d:fa8f:a300%21 fe80::80b1:aec5:39a9:2bръ:64240, error: Undefined dynamic error code
uPMI_ConnectToHost returning PMI_FAIL
[0] PMI_Init failed.
Error posting writev, За­прос на от­прав­ку или по­лу­че­ние дан­ных был за­пре­щен, т.к. со­кет уже от­клю­чен в дан­ном на­прав­ле­нии на ос­но­ва­нии преж­ней за­про­са на его от­клю­че­ние.(10058)
unable to post a write for the next command,
sock error: Error = 10058
Под­ска­жи­те, в чем про­бле­ма?
По­хо­же, один из ва­ших ком­пью­те­ров име­ет имя не из ла­тин­ских букв. Пе­ре­име­нуй­те ком­пью­те­ры и по­про­буй­те сно­ва.
При вы­пол­не­нии про­грам­мы со­би­раю трас­су и вы­пол­няю ее ви­зуа­ли­за­цию. Для это­го в WMPIEXEC став­лю оп­цию «со­здать лог-файл», а за­тем на­жи­маю кноп­ку за­пус­ка Jumpshot. Но по­яв­ля­ет­ся но­вое ок­но с ошиб­кой: file not found when initializing c:z1debugz1.exe.clog2. под­ска­жи­те в чем про­бле­ма?
Спа­си­бо. Ста­тья от­лич­ная, с по­дроб­ны­ми ком­мен­та­ри­я­ми.
Очень по­лез­ная ста­тья, спа­си­бо вам.
А обя­за­тель­но, что­бы в се­ти был кон­т­рол­лер до­ме­на (Windows 2000/2003/2008/Samba)? До­ста­точ­но ли для за­пус­ка про­грамм, что­бы вы­чис­ли­тель­ные уз­лы бы­ли объ­еди­не­ны в ра­бо­чую груп­пу?
За­ра­нее бла­го­да­рен за от­вет
До­ста­точ­но ра­бо­чей груп­пы и NetBIOS имён.
Спа­си­бо за по­дроб­ное опи­са­ние. Я уста­но­ви­ла вер­сию mpich2-1.4.1p1-win-ia32.msi и по­пы­та­лась ском­пи­ли­ро­вать про­грам­му (IDE CodeLite). Осо­бой раз­ни­цы с VS с на­строй­кой биб­лио­тек нет, я до­ба­ви­ла в гло­баль­ные на­строй­ки пу­ти include и lib, про­пи­са­ла ком­по­нов­щи­ку путь к lib и ука­за­ла биб­лио­те­ки mpi.lib и cxx.lib. Но ком­пи­ля­тор мне го­во­рит: gcc -c «C:/Users/Alice/prog/C/Parallel/mpi_hi/main.c» -g -O0 -Wall -o ./Debug/main.o -I»c:/Program Files (x86)/mpich2/include» -I. -I.
gcc -o ./Debug/mpi_hi @»mpi_hi.txt» -L»c:/Program Files (x86)/mpich2/lib» -L»C:/Program Files (x86)/mpich2/lib» -lmpi.lib -lcxx.lib
c:/mingw-4.7.1/bin/../lib/gcc/mingw32/4.7.1/../../../../mingw32/bin/ld.exe: cannot find -lmpi.lib
c:/mingw-4.7.1/bin/../lib/gcc/mingw32/4.7.1/../../../../mingw32/bin/ld.exe: cannot find -lcxx.lib По­че­му он ищет -lmpi.lib -lcxx.lib? Что это за фай­лы? Или я че­го-то не по­ни­маю?
Мои нер­вы на пре­де­ле!! не мо­гу за­пу­стить MPICH((( в ко­де­бло­ке от­ком­пи­ли­ро­ва­ла , но МР!СН го­во­рит ошиб­ка ре­ги­стра­ции, то­по ком­пью­тер мне до­сту­па не да­ёт. а хо­тя вче­ра все ра­бо­та­ло. что де­лать? как быть?
У ме­ня бы­ла та­кая ошиб­ка. Она про­шла ко­гда уда­лил и за­но­во уста­но­вил MPICH. Я еще по­чи­стил ре­естр по­сле уда­ле­ния, так как по­сле пер­вой пе­ре­уста­нов­ки бы­ла та же ошиб­ка с ре­ги­стра­ци­ей.
За­пус­каю все­гда в ре­жи­ме -localonly и все ра­бо­та­ет.
У ме­ня win8.
У ме­ня про­бле­ма — хо­чу со­еди­нить не­сколь­ко ма­шин ком­пью­тер­но­го
клас­са на Win’7 Prof 64 бит, но встре­чал мно­го ин­фор­ма­ции, что у
Win’7 c МPICH про­бле­мы. Ка­кой ва­ри­ант MPICH луч­ше взять для
мо­ей це­ли?
Мне ста­тья по­мог­ла — все ра­бо­та­ет. Но пе­ри­о­ди­че­ски при за­пус­ке про­грам­мы воз­ни­ка­ет ошиб­ка:
————>
Error posting writev,За­прос на от­прав­ку или по­лу­че­ние дан­ных был за­пре­щен, т.к. со­кет уже от­клю­чен в дан­ном на­прав­ле­нии на ос­но­ва­нии преж­ней за­про­са на его от­клю­че­ние.(10058)
unable to post a write for the next command,
sock error: Error = 10058 unable to post a write of the closed_request command to the parent context.
unable to close the stdin context.
state machine failed.
<-----------------
При­чем она воз­ни­ка­ет не толь­ко при за­пус­ке мо­ей про­грам­мы, но и при за­пус­ке при­ме­ра cpi.exe в MPICH, и да­же ес­ли вы­став­ляю 1 про­цесс.
Я за­ме­тил что эта ошиб­ка по­яв­ля­ет­ся все­гда при за­вер­ше­нии про­грам­мы.
За­пус­каю че­рез кон­соль на не­т­бу­ке.
Си­сте­ма: Windows 8 Pro 32-раз­ряд­ная
Про­цес­сор: Intel Atom N570 1.66 GHz (4CPUs)
Про 10058 ошиб­ку на­шел, что она вы­зы­ва­ет­ся по­вре­жде­ни­ем ре­ест­ра, но как предот­вра­тить ее по­яв­ле­ние ни­где не на­шел…
Бу­ду рад лю­бой по­мо­щи)
Здрав­ствуй­те. Уста­нав­ли­ваю MPICH2 на ком­пью­тер со­глас­но ин­ст­рук­ции. Од­на­ко не все так хо­ро­шо, как хо­те­лось. при за­пус­ке про­грам­мы в mpiexec вы­ле­за­ет ошиб­ка
Error: No smpd passphrase specified through the registry or .smpd file, exiting. На­чи­наю раз­би­рать­ся в чем де­ло.
В служ­бах не­ту smpd.
по­пыт­ки уста­но­вить ее че­рез ко­манд­ную стро­ку не при­во­дят ни к ка­ким успе­хам…
вот скрин ко­манд­ной стро­ки.
http://i031.radikal.ru/1312/b1/34b44afe3482.png По­жа­луй­ста, под­ска­жи­те, в чем про­бле­ма?
Здрав­ствуй­те. Боль­шое спа­си­бо за ста­тью. Прав­да воз­ник­ли не­ко­то­рые про­бле­мы. В ре­жи­ме -localonly все ра­бо­та­ет, но ко­гда пы­та­юсь за­пу­стить про­грам­му (cpi.exe) на двух ма­ши­нах вы­да­ет сле­дую­щее: Enter the number of intervals: (0 quits) 100000
Fatal error in PMPI_Bcast: Other MPI error, error stack:
PMPI_Bcast(1478)………………….: MPI_Bcast(buf=0018FE48, count=1, MPI_INT, root=0, MPI_COMM_WORLD) failed
MPIR_Bcast_impl(1321)……………..:
MPIR_Bcast_intra(1119)…………….:
MPIR_Bcast_scatter_ring_allgather(962):
MPIR_Bcast_binomial(213)…………..: Failure during collective
MPIR_Bcast_scatter_ring_allgather(955):
MPIR_Bcast_binomial(189)…………..:
MPIC_Send(66)…………………….:
MPIC_Wait(540)……………………:
MPIDI_CH3I_Progress(402)…………..:
MPID_nem_mpich2_blocking_recv(905)….:
MPID_nem_newtcp_module_poll(37)…….:
MPID_nem_newtcp_module_connpoll(2655).:
gen_cnting_fail_handler(1738)………: connect failed — Пре­вы­шен тай­маут се­ма­фо­ра. (errno 121) job aborted:
rank: node: exit code[: error message]
0: localhost: 1: process 0 exited without calling finalize
1: 192.168.1.100: 123
2: localhost: 123
3: 192.168.1.100: 123
unable to forward stdin, send failed, error 10054, Уда­лен­ный хост при­ну­ди­тель­но разо­рвал су­ще­ствую­щее под­клю­че­ние.
———————————————————————
Под­ска­жи­те в чем мо­жет быть про­бле­ма? За­ра­нее бла­го­да­рен!
Си­сте­ма: Windows 7 Ultimate 64-раз­ряд­ная (на вто­ром ком­пью­те­ре 32-раз­ряд­ная).
По­ста­вил на обе ма­ши­ны mpich2-1.4-win-ia32.
Спа­си­бо огром­ное! Пол­ная и по­лез­ная ста­тья! Бра­во.
Огром­ней­шая бла­го­дар­ность за ста­тью! То что я так дав­но ис­кал.
Спа­си­бо — то что док­тор про­пи­сал!
Боль­шое спа­си­бо за ста­тью!
Ав­то­ру огром­ное спа­си­бо, ста­тья вы­ру­ча­ла не раз! Вот толь­ко в по­след­ний раз под­ве­ла) Са­ма дол­го му­чи­лась с «MPICH2 not installed or unable to query the host».
Мне по­мог­ла за­пись в Path — C:Program FilesMPICH2bin.
(Пра­вой кноп­кой по Мой ком­пью­тер. Свой­ства | До­пол­ни­тель­но | Пе­ре­мен­ные сре­ды | Си­стем­ные пе­ре­мен­ные | Path до­пи­сать ;C:Program FilesMPICH2bin) Мо­жет это по­мо­жет ре­шить и дру­гие ошиб­ки. Уда­чи.
Ста­тья очень дель­ная, для на­чи­наю­ще­го ра­бо­тать с тех­но­ло­ги­ей MPI — про­сто зо­ло­то! Но ни­где (в том чис­ле в дру­гих ста­тьях ав­то­ра) не разо­бран ни один при­мер ис­поль­зо­ва­ния в сре­де MPI лю­бо­го при­ло­же­ния Windows — хоть то­го же Excel. Хо­те­лось бы уви­деть та­кую ме­то­ди­ку.
Уста­нав­ли­ваю MPICH2 на ком­пью­тер со­глас­но ин­ст­рук­ции. Од­на­ко не все так хо­ро­шо, как хо­те­лось. при за­пус­ке про­грам­мы в mpiexec вы­ле­за­ет ошиб­ка
Error: No smpd passphrase specified through the registry or .smpd file, exiting. На­чи­наю раз­би­рать­ся в чем де­ло- для на­чи­наю­ще­го ра­бо­тать с тех­но­ло­ги­ей MPI по­лез­но.
«MPICH2 not installed or unable to query the host» по­сле уста­нов­ки «mpich2-1.4-win-x86-64.msi». Пол­но­стью уда­лил, за­тем по­мог­ла уста­нов­ка 32-бит­ной вер­сии: «mpich2-1.4-win-ia32.msi»
Про­бле­мы с за­пус­ком про­грам­мы.По­яс­ни­те по­жа­луй­ста,в чем при­чи­на.че­рез Far вво­жу ко­ман­ду:
mpiexec.exe -n 1 test.exe
Вы­да­ет ошиб­ку: launch failed: CreateProcess(test.exe) on ‘k203-04′ failed, error 2 — (и там даль­ше иеро­гли­фы).Под­ска­жи­те как ре­шить про­бле­му
Про­бле­мы с за­пус­ком про­грам­мы.По­яс­ни­те по­жа­луй­ста,в чем при­чи­на.че­рез Command Prompt вво­жу ко­ман­ду:
mpiexec -n 4 HelloWorld.exe
‘mpiexec’ is not recognized as an internal or external command,
operable program or batch file.
Про­бле­мы с за­пус­ком про­грам­мы.По­яс­ни­те по­жа­луй­ста,в чем при­чи­на.че­рез Command Prompt вво­жу ко­ман­ду:
mpiexec -n 4 HelloWorld.exe
Пи­шет- ‘mpiexec’ is not recognized as an internal or external command,
operable program or batch file.
Зд­рас­т­вуй­те! Спа­си­бо за ста­тью. Очень по­мо­га­ет. Но у ме­ня во­прос, хоть и ба­наль­ный, где преды­ду­щая ста­тья про ошиб­ку: MPICH2 not installed or unable to query the host. Ни­как не мо­гу най­ти. Спа­си­бо за­ра­нее.)
От­лич­но все рас­пи­са­но, спа­си­бо! Ре­ше­ние про­бле­мы MPICH2 not installed or unable to query the host: Ес­ли вы убе­ди­лись, что служ­ба ра­бо­та­ет, раз­ре­ше­ния бранд­мау­э­ра уста­нов­ле­ны и «passphrase» при уста­нов­ке MPICH2 бы­ли оди­на­ко­вы на всех ком­пью­те­рах, ва­ши ком­пы в wmpiconfig вид­ны, вер­сии опре­де­ля­ют­ся, сеть есть, Поль­зо­ватель и па­роль че­рез wmpiregister за­ре­ги­ны, а вы все рав­но по­лу­ча­е­те ошиб­ку MPICH2 not installed or unable to query the host то вам сле­ду­ет убе­дить­ся, что вы ис­поль­зу­е­те пра­виль­но ИМЯ Поль­зо­ва­те­ля. В при­ме­рах (в т.ч. и в этой ста­тье) ис­поль­зу­ет­ся имя Ад­ми­ни­стра­тор ко­то­рое ка­за­лось бы есть у всех, но это не «имя», а тип учет­ной за­пи­си! Сле­ду­ет в wmpiregister сна­ча­ла remove ва­ше­го Ад­ми­ни­стра­то­ра ес­ли вы его ре­ги­стри­ро­ва­ли, а по­том вве­сти (за­ре­гить) имен­но «имя», на­при­мер у ме­ня имя «Igor» (ко­неч­но без ка­вы­чек) и со­от­вет­ствен­но па­роль. Ес­ли у вас имя на­пи­са­но на рус­ском, ре­ко­мен­дую сме­нить. Уда­чи!

Оставить отзыв

Жёлтые поля обязательны к заполнению

   

Можете использовать теги <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang=""> <div class=""> <span class=""> <br>