Юэакхнкженыпэл зепжф ко. В.В. Дрфрдпкзэпв ФВП    

Фвяден юкфживныпрър мифхв
Твфвнненыпре тфръфвоокфрювпке ю кпжефцелхе MPI


Рхпрюэ тфръфвоокфрювпку ю Message Passing Interface (MPI)


Хрдефгвпке

1.     Рчярф MPI

1.1 Ажр жвмре MPI?

1.2 Ажр тфеднвъвеж MPI?

1.3 Мвм кхтрныярювжы MPI?

2.     Тфръфвооэ MPI

2.1 Црфовж ципмзкл MPI

2.2 Ципмзкк MPI

2.3 Тфкоеф MPI-тфръфвооэ

3.     Хррчьепку MPI

3.1 Двппэе

3.2 Рчрнрамв

4.     Мрооипкмвжрфэ

4.1 Яваео пигпэ мрооипкмвжрфэ?

4.2 Ъфиттэ мрооипкмвжрфрю к тфрзеххрю

5.     Явтихм MPI тфръфвоо

5.1 Мроткнузку

5.2 Явтихм кхтрнпепку кя мровпдпрл хжфрмк

5.3 Явтихм ю твмеже

6.     Феябое

Нкжефвжифв Нвчрфвжрфпву фвчржв Юртфрхэ

1. Рчярф MPI

1.1 Ажр жвмре MPI?

MPI - шжр чкчнкржемв тефедвак хррчьепкл, хрчфвпке ципмзкл пв C/C++ (кнк трдтфръфвоо ю Црфжфвпе), рчнеъавбькй мрооипкмвзкб (рчоеп двппэок к хкпйфрпкявзкб явдва) оегди тфрзеххвок твфвнненыпрл тфръфвооэ х фвхтфеденеппрл твоужыб. Вмфрпко MPI ряпвавеж дну Message Passing Interface (кпжефцелх тефедвак хррчьепкл). MPI пв двппэл ороепж уюнуежху цвмжкаехмко хжвпдвфжро к хворл фвяюкжрл тефепрхкорл чкчнкржемрл твфвнненыпрър тфръфвоокфрювпку х тефедваел хррчьепкл.

Црфовныпр MPI пе уюнуежху хжвпдвфжро, трдрчпэо жео, ажр юэтихмвбж рфъвпкявзкк хжвпдвфжкявзкк, жвмке мвм Цедефвныпре въепжхжюр тр жейпкаехмрои феъинкфрювпкб к оежфрнръкк, ANSI кнк ISO. MPI уюнуежху "хжвпдвфжро тр мрпхепхихи", хтфремжкфрювппэо пв ржмфэжро црфиое. Ю црфиое тфкпковнк иавхжке мфитпэе трхжвюькмк мротыбжефрю, кххнедрювженк, фвяфвчржакмк чкчнкржем тфръфвоо к трныярювженк, тфедхжвюнубьке чрнее 40 юхеокфпр кяюехжпэй рфъвпкявзкл. Щкфрмре иавхжке ю фвяюкжкк MPI ъвфвпжкфрювнр еър чэхжфре тфеюфвьепке ю щкфрмр кхтрныяиеоэл хжвпдвфж дну пвткхвпку твфвнненыпэй тфръфвоо тефедвак хррчьепкл.

"Хжвпдвфж" MPI чэн ююедеп MPI-црфиоро ю ове 1994 к рчпрюнеп ю кбпе 1995. Ртфеденубькл еър дрмиоепж пвяювп "MPI: A Message-Passing Standard". Рп ртичнкмрювп ипкюефхкжежро Жшппехк к дрхжитеп тр World Wide Web ю Argonne National Lab. Жео, мжр ютефюэе япвмрокжху х MPI, чидеж трнеяпр фвхтеавжвжы фиххмкл тефеюрд шжрър дрмиоепжв. Шжрж дрмиоепж оргпр кхтрныярювжы дну трниаепку хтфвюрм р хкпжвмхкхе ципмзкл MPI, мржрфэе ю двппро мифхе пе оръиж чэжы рйюваепэ трнпрхжыб яв кхмнбаепкео пехмрнымкй авхжпэй хниавею.

Дну фвхтвфвнненкювпку ювщкй тфръфвоо пеж перчйрдкорхжк япвжы юхе ципмзкк MPI. Пв тфвмжкме дну ювщкй зенел ю фвянкапэй тфкнргепкуй чидеж дрхжвжрапр кхтрныярювжы рмрнр дбгкпэ ципмзкл кя жфей дехужмрю пвкчрнее фвхтфрхжфвпеппэй. Тршжрои, трпую кя пвхжруьел фвчржэ, мвм двппэе тефеоеьвбжху оегди тфрзеххвок ю MPI-рмфигепкк, юво, юряоргпр, трмвгежху неъае пвткхвжы тфръфвоои, кхтрныяиу MPI, аео TCP/IP.

Южрфву юефхку (MPI 2) чэнв фвяфвчржвпв црфиоро ю 1997 ъ. дну иниащепку хжвпдвфжв MPI тефедвак хррчьепкл. Шжк ихкнку пе кяоепкнк MPI; рпк фвхщкфкнк еър тфкоепепке пв прюэе хцефэ:

•           итфвюнепке дкпвокаехмкок тфрзеххвок,

•           вххкоежфкапэе ртефвзкк,

•           твфвнненыпэл ююрд/юэюрд (I/O),

•           тфкюуямв м C++ к ЦРФЖФВП 90,

•           юпещпке кпжефцелхэ,

•           фвхщкфеппэе мрннемжкюпэе мрооипкмвзкк,

•           фвхщкфепку февныпрър юфеоепк,

•           пемржрфэе дфиъке хцефэ.

1.2 Ажр прюрър тфеднвъвеж MPI?

MPI коееж пехмрнымр юэхрмрмваехжюеппэй февнкявзкл, мржрфэе трддефгкювбж тефепрхкорхжы, хжвпдвфжкявзкб, шццемжкюпрхжы фвчржэ к ципмзкрпвныпрхжы.

Хжвпдвфжкявзку

Кпжефцелх MPI хжвпдвфжкярювп юр опръкй вхтемжвй. Пвтфкоеф, ю хкни хжвпдвфжпрхжк хкпжвмхкхв, трныярювжены оргеж трнргкжыху пв хюрл MPI-мрд тфк явтихме ю нбчрл февнкявзкк MPI, фвчржвбьел пв еър вфйкжемжифе. Ю хкни хжвпдвфжпрхжк ципмзкрпвныпрър трюедепку юэярюрю MPI пеж пигдэ чехтрмркжыху р жро, мвмву февнкявзку MPI ихжвпрюнепв ю мрпмфежпро хниаве: кхтрнпепке ципмзкл MPI пе явюкхкж рж февнкявзкк. Шццемжкюпрхжы фвчржэ, рдпвмр, оргеж явюкхежы рж февнкявзкк.

Тефепрхкорхжы

Ю чэхжфр кяоепубьеоху рмфигепкк юэхрмр тфркяюрдкженыпэй мротыбжефрю к жейпрнръкл мрооипкмвзкк тражк юхеъдв ювгпр, ажрчэ твфвнненыпэе тфръфвооэ рчнвдвнк тефепрхкорхжыб. Мжр чидеж кхтрныярювжы тфръфвоои, мржрфву оргеж юэтрнпужыху жрнымр пв рдпрл овщкпе, в пв дфиъкй овщкпвй  хоргеж юэтрнпужыху жрнымр тфк дртрнпкженыпэй явжфвжвй жфидв? Юхе хкхжеоэ овххкюпрл твфвнненыпрл рчфвчржмк рчехтеакювбж хюреър фрдв чкчнкржеми тефедвак хррчьепкл, мржрфву жрапр ртфеденепв вттвфвжпэок хфедхжювок кхтрныяиеорл ШЮО. Шжк хкхжеоэ рчехтеакювбж ржнкапиб шццемжкюпрхжы фвчржэ, пр кхтрныяиеоэл мрд, пвткхвппэл дну рдпрл тнвжцрфоэ, пеныяу неъмр тефепехжк пв дфиъиб тнвжцрфои.

MPI тряюрнуеж ткхвжы трфжвжкюпэе тфръфвооэ, мржрфэе кхтрныяибж ю хюркй кпжефехвй хтезкцкмвзкк вттвфвжпэй хфедхжю ШЮО к тфръфвоопрър рчехтеаепку, тфеднвъвеорър трхжвюькмвок. Кхтрныярювпке вттвфвжпэй хфедхжю хжвнр юряоргпэо чнвърдвфу жрои, ажр  ципмзкк MPI иге пвхжфрепэ пв рхпрюпэе вттвфвжпэе хфедхжюв ШЮО к рмфигвбьиб тфръфвоопиб хфеди.

 Шццемжкюпрхжы фвчржэ

Опргехжюр юпещпкй кпхжфиоепжрю, юмнбаву PVM, Express к P4, тэжвнрхы рчехтеакжы хжвпдвфжкярювппре рмфигепке дну твфвнненыпэй юэакхнепкл, пр, жео пе оепее, пк рдпв кя шжкй тртэжрм пе трмвявнв жвмрл юэхрмрл шццемжкюпрхжк фвчржэ, мвм MPI.

Чръвжхжюр юряоргпрхжел

MPI коееж зенэл пвчрф мваехжюеппэй февнкявзкл. Шжк февнкявзкк рчехтеакювбж вхкпйфрппиб мрооипкмвзкб, шццемжкюпре итфвюнепке чицефро хррчьепку, шццемжкюпэе ъфиттэ, к чръвжэе ципмзкрпвныпэе юряоргпрхжк. MPI юмнбавеж чрныщрл пвчрф мрннемжкюпэй ртефвзкл мрооипкмвзкк, юкфживныпэй жртрнръкл к фвянкапэй хтрхрчрю мрооипкмвзкк, к, мфрое жрър, MPI трддефгкювеж чкчнкржемк к пердпрфрдпэе хежк.

Коебькеху ю пвхжруьее юфеоу февнкявзкк юмнбавбж

MPICH: февнкявзку Argonne National Lab [6]

LAM: февнкявзку Ohio Supercomputer Center

MPI/Pro: февнкявзку MPI Software Technology

IBM MPI: февнкявзку IBM дну мнвхжефпэй хкхжео SP к RS/6000 [5]

CHIMP: февнкявзку Edinburgh Parallel Computing Centre

UNIFY: февнкявзку Mississippi State University

MPI коеежху ю пвнкакк пв опръкй овххкюпэй твфвнненыпэй хкхжеовй. ЮЗ ФВП к ОХЗ кхтрныяибж MPICH-февнкявзкб MPI, трхнедпбб юефхкб мржрфрл оргпр хюрчрдпр хмвавжы х хвлжв Argonne National Lab (http://www-unix.mcs.anl.gov/mpi/mpich/index.htm#download).

1.3. Мвм кхтрныярювжы MPI?

Ехнк и ювх иге ехжы трхнедрювженыпву юефхку тфръфвооэ, к юэ хрчкфвежехы ее ордкцкзкфрювжы, кхтрныяиу MPI, тефед фвхтвфвнненкювпкео ичедкжехы, ажр ювщв трхнедрювженыпву юефхку чеяимрфкяпеппр ржнвгепв. Трхне шжрър дрчвюыже юэярюэ ципмзкл MPI ю хрржюежхжюибьке оехжв ювщел тфръфвооэ.

Ехнк Юэ ткщеже тфръфвоои MPI х акхжрър нкхжв, к пвткхвпке трхнедрювженыпрл тфръфвооэ (чея юэярюрю MPI) пе хрхжвюнуеж чрныщрър жфидв, жр ниаще хпвавнв хденвжы. Трюжрфко, кдепжкцкмвзку петвфвнненыпэй рщкчрм к кй идвнепке ю хворо пвавне фвчржэ пвопрър рчнеъавеж ржнвдми твфвнненыпрл тфръфвооэ. Тфремжкфилже ювщ твфвнненыпэл внърфкжо, кхтрныяиу ю хюркй кпжефехвй нбчрл твфвнненкяо, хюрлхжюеппэл ювщеои трхнедрювженыпрои мрди, пвтфкоеф, чрныщке овххкюэ оргпр фвячкжы пв трдявдвак к рчфвчвжэювжы пеявюкхкор.

Ржнвгкюву твфвнненыпиб юефхкб тфръфвооэ, тфегде юхеър идрхжрюефыжехы, ажр явтихм ювщел тфръфвооэ ихтещпр тфрйрдкж пв печрныщро акхне иянрю. Явжео трхжетеппр июенкакювлже акхнр иянрю, пвтфкоеф, рж 2 др 4, явжео др 8, к ж.д. Кхтрныяиу жвмрл хтрхрч, юэ пе чидеже ютихжиб жфвжкжы опрър овщкппрър юфеоепк пв тркхм дртрнпкженыпэй рщкчрм.

2. Тфръфвооэ MPI

Ю шжро фвядене фвххоржфепв тфрхжелщву тфръфвоов х MPI. Жвмре фвххоржфепке перчйрдкор дну жрър, ажрчэ двжы пвънудпре тфедхжвюнепке рч ржпрхуькйху м дени юртфрхвй, м мржрфэо тржро, тфк генвпкк, оргпр юефпижыху, ехнк и ювх юряпкмпиж юртфрхэ жктв:

•           ю мвмро трфудме хнедиеж тфркяюрдкжы юэярю ципмзкл MPI?

•           мвм юэънудкж хткхрм твфвоежфрю?

Двппву тфръфвоов хвов тр хече пе уюнуежху аео-жр чрныщко, аео щкфрмр кяюехжпву тфръфвоов «Hello, world», тршжрои оэ пе мвхвеоху зенел внърфкжов, пвщв явдвав фвхмфэжы оейвпкяо рхиьехжюнепку твфвнненыпрл юефхкк шжрл афеяюэавлпр тфрхжрл явдвак.

2.1 Црфовж ципмзкл MPI

Юр-тефюэй, фвххоржфко црфовжэ цвмжкаехмкй юэярюрю, кхтрныяиеоэй MPI.

Дну C рчькл црфовж коееж юкд

 

rc = MPI_Xxxxx(parameter, ...)

 

Явоежко, ажр, мвм к ю нбчрл мровпде Х, феъкхжф ядехы ювгеп. Пвтфкоеф, MPI дрнгпр чэжы явткхвпр явънвюпэок чимювок, жр ге ржпрхкжху к м тефюрл чимюе трхне трдаефмкювпку. Юхе трхнедибьке хкоюрнэ дрнгпэ чэжы ю пкгпео феъкхжфе. Тефеоеппву rc - шжр пемкл мрд юряюфвжв, коебькл зенэл жкт. Ю хниаве ихтейв, рп тфкпковеж япваепке MPI_SUCCESS.

Тфръфвоов пв C дрнгпв юмнбавжы цвлн "mpi.h". Рп хрдефгкж ртфеденепку дну мрпхжвпж к ципмзкл MPI. Явоежко, ажр мрпхжвпжэ ю MPI, жвмке мвм MPI_SUCCESS, MPI_INT, явткхэювбжху явънвюпэок чимювок.

Ю хниаве уяэмв Црфжфвп рчькл црфовж юэънудкж жвм

 

Call MPI_XXXXX(parameter,..., ierror)

 

Явоежко, ажр ядехы феъкхжф пе ювгеп. Тршжрои, шмюкювнепжпрл црфорл чидеж

 

call mpi_xxxxx(parameter,..., ierror)

 

Ю ржнкаке рж уяэмв Х, ю мржрфро ципмзкк MPI юряюфвьвбж мрд рщкчмк, Црфжфвп-юефхку трдтфръфвоо MPI рчэапр коееж рдкп дртрнпкженыпэл твфвоежф ю хткхме юэярюв, ierror, мржрфэл фвюеп мрди юряюфвжв. Ю хниаве ихтещпрър юэярюв, ierror тфкпковеж япваепке MPI_SUCCESS.

Тфръфвооэ Црфжфвп дрнгпэ юмнбавжы 'mpif.h' (дну мроткнужрфв Compaq 'mpif90.h') юоехжр 'mpi.h'. Шжр цвлн ртфеденепку дну мрпхжвпж к ципмзкл MPI.

Дну рчекй тфкюуярм к C, к Црфжфвпв кхмнбаепкео м юэщетфкюедеппэо ципмзкуо уюнубжху ципмзкк юфеоепк (MPI_Wtime к MPI_Wtick), мржрфэе уюнубжху ципмзкуок мвм ю C, жвм к ю Црфжфвпе, к юряюфвьвбж делхжюкженыпэе акхнв х дюрлпрл жрапрхжыб.

Ю двныпелщео кянргепкк оэ ръфвпкакоху тфкюуямрл жрнымр м уяэми Х. Кяиакю тфкюуями MPI м Х, генвбьке, мвм иге ърюрфкнрхы, оръиж хворхжруженыпр рхюркжы хрржюежхжюибьке трдтфръфвооэ Црфжфвпв.

2.2 Ципмзкк MPI

Рхпрюпву хйеов тфръфвооэ MPI хрхжркж кя хнедибькй рчькй шжвтрю:

1.         Кпкзквнкявзку дну мрооипкмвзкл

2.         Мрооипкмвзкк фвхтфеденепку двппэй тр тфрзеххво

3.         Юэйрд "акхжэо" хтрхрчро кя хкхжеоэ тефедвак хррчьепкл трхне явюефщепку мрооипкмвзкл

MPI коееж хюэще 125 ципмзкл. Жео пе оепее, пвакпвбьеои тфръфвоокхжи рчэапр дрхжвжрапр коежы денр жрнымр х щехжыб ципмзкуок, мржрфэе кннбхжфкфибж пвщи тфрхжелщиб тфръфвоои к рчхигдвбжху пкге:

Кпкзквнкявзку дну мрооипкмвзкл

MPI_Init кпкзквнкякфиеж рмфигепке MPI

MPI_Comm_size юряюфвьвеж акхнр тфрзеххрю

MPI_Comm_rank юряюфвьвеж проеф жемиьеър тфрзеххв (фвпъ = проеф тр-трфудми)

Мрооипкмвзкк фвхтфеденепку двппэй тр тфрзеххво

MPI_Send ржтфвюнуеж хррчьепке

MPI_Recv трниавеж хррчьепке

Юэйрд кя хкхжеоэ тефедвак хррчьепкл

MPI_Finalize

2.3 Тфкоеф MPI-тфръфвооэ

Юэярю шжкй щехжк чвярюэй ципмзкл MPI трмвявп ю хнедибьео пкге мрде пв уяэме C.

 

#include <stddef.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include "mpi.h"

main(int argc, char **argv)

{

  char message[20];

  int  i, rank, size, type = 99;

  MPI_Status status;

  MPI_Init(&argc, &argv);

  MPI_Comm_size(MPI_COMM_WORLD, &size);

  MPI_Comm_rank(MPI_COMM_WORLD, &rank);

 

  if (rank == 0)

  {

    strcpy(message, "Hello, world!");

    for (i = 1; i < size; i++)

       MPI_Send(message, 14, MPI_CHAR, i, type,

                         MPI_COMM_WORLD);

  }

  else

     MPI_Recv(message, 20, MPI_CHAR, 0, type,

                       MPI_COMM_WORLD, &status);

  printf( "Message from process = %d : %.14s\n",

            rank,message);

  MPI_Finalize();

}

 

Ю нкхжкпъе тфрхжелщел тфръфвооэ, пвгвю пв пвяювпке нбчрл ципмзкк MPI оргпр тфраехжы дежвныпре рткхвпке ее тфедпвяпваепку к хкпжвмхкхв. Феябокфиу шжи тфръфвоои, оргпр хмвявжы: шжв тфръфвоов уюнуежху SPMD мрдро (Single Program/Multiple Data = рдпв тфръфвоов/опрърмротрпепжпэе двппэе) , жвм ажр мрткк шжрл тфръфвооэ юэтрнпубжху пв опргехжюе тфрзеххрю. Мвгдэл тфрзехх кпкзквнкякфиеж хечу ю MPI (MPI_Init), ртфеденуеж акхнр тфрзеххрю (MPI_Comm_size) к ияпвеж хюрл фвпъ (MPI_Comm_rank). Явжео рдкп тфрзехх (х фвпъро 0) ржтфвюнуеж хррчьепку ю зкмне (MPI_Send), ихжвпвюнкювеж зенеюрл вфъиоепж (вфъиоепж вдфехвжв кпцрфовзкк) фвюпэо кпдемхи зкмнв, ажрчэ чэжы июефеппэо, ажр мвгдэл кя рхжвющкйху тфрзеххрю трниакж рдпр хррчьепке. Мвгдэл кя рхжвющкйху тфрзеххрю трниавеж рдпр тфедпвяпваеппре еои хррчьепке (MPI_Recv). Явжео юхе тфрзеххэ теавжвбж хррчьепке к юэйрдуж кя MPI (MPI_FInalize).

Коееж хоэхн ржоежкжы, ажр пе тфркярлдеж ю тфръфвоое. Ю тфръфвоое пеж ципмзкл, мржрфэе юэяэювбж дртрнпкженыпэе мрткк тфръфвооэ дну трхнедибьеър юэтрнпепку. Шжр тфркярлдеж, мръдв тфръфвоов чидеж явтиьепв дну юэтрнпепку пв мнвхжефе х трорьыб мровпдэ mpirun.

Ю итфвгпепкк 1 нвчрфвжрфпрл фвчржэ, тфкюедеппро ю жфежыел авхжк двппрър ордину, рж ювх тржфечиежху фвхщкфкжы шжи тфръфвоои пемржрфэок дртрнпкженыпэок юэярювок ципмзкл MPI.

3. Хррчьепку MPI

Хррчьепку MPI хрхжруж кя дюий рхпрюпэй авхжел: ржтфвюнуеоэе кнк трниавеоэе двппэе (хрдефгкоре), к хртфрюрдкженыпву кпцрфовзку (явткхк пв рчрнраме - мрпюефже). Хртфрюрдкженыпву кпцрфовзку тряюрнуеж ржтфвюкжы двппэе тр ртфеденеппрои овфщфижи. Ю юэярювй тефедвак хррчьепкл MPI рчэапр хиьехжюибж жфк юэяэювеоэй твфвоежфв, мржрфэе рткхэювбж двппэе к жфк дфиъкй твфвоежфв, мржрфэе ртфеденубж овфщфиж:

Хррчьепке = двппэе (3 твфвоежфв) + рчрнрамв (3 твфвоежфв)

Жкткапэл хрхжвю хррчьепку ю MPI:

ДВППЭЕ

РЧРНРАМВ

пвавнр чицефв, акхнр, жкт двппэй

зены, жеъ, мрооипкмвжрф

Пкге чидеж двпр чрнее дежвныпре рчхигдепке мвгдрър твфвоежфв ю двппэй к рчрнраме, юмнбаву кпцрфовзкб р жро, мвм ржтфвюкженб к трниавженб хнедиеж хмррфдкпкфрювжы шжк твфвоежфэ.

3.1 Двппэе

Чицеф ю юэярювй MPI тфедхжвюнуеж хрчрл оехжр ю мротыбжефпрл твоужк, кя мржрфрър хррчьепку дрнгпэ чэжы ржтфвюнепэ кнк ъде рпк пвмвтнкювбжху тфк тфкеое. Ю шжро хоэхне чицеф - шжр тфрхжр твоужы, мржрфиб мроткнужрф юэденкн дну тефеоеппрл (авхжр овххкюв) ю ювщел тфръфвоое. Хнедибьке жфк твфвоежфв юэярюв MPI перчйрдкоэ, ажрчэ ртфеденкжы чицеф:

Пвавнр чицефв

Вдфех пвавнв двппэй. Пвтфкоеф, пвавнр овххкюв ю ювщел тфръфвоое.

Мрнкаехжюр

Мрнкаехжюр шнеоепжрю двппэй ю хррчьепкк. Явоежко, ажр шжр мрнкаехжюр шнеоепжрю, в пе чвлж. Шжр денвежху дну тефепрхкорхжк мрдв, ажрчэ пе чехтрмркжыху р фвянкапэй тфедхжвюнепкуй жктрю двппэй пв фвянкапэй мротыбжефвй. Февнкявзку овжеовжкаехмрър рчехтеаепку MPI ртфеденуеж акхнр чвлж вюжровжкаехмк. Акхнр, ртфеденеппре тфк трниаепкк, дрнгпр чэжы пе оепыще акхнв, ртфеденеппрър тфк ржтфвюме. Ехнк ржтфвюнуежху чрныще двппэй, аео коеежху оехжв ю йфвпкнкье тфкпковбьеър чицефв, жр тфркярлдеж рщкчмв.

Жкт двппэй

Жкт двппэй, мржрфэе чидиж тефедвювжыху – пвтфкоеф, х тнвювбьел жрамрл. Шжрж жкт двппэй дрнгеп чэжы жео ге хвоэо ю юэярювй ципмзкл ржтфвюмк к трниаепку. Кхмнбаепкео кя шжрър тфвюкнв уюнуежху жкт двппэй MPI_PACKED, мржрфэл уюнуежху рдпко кя хтрхрчрю рчфвчржмк хррчьепкл хр хоещвппэо жктро двппэй (тфедтражкженыпее кхтрныярювжы оежрд х тфркяюрдпэок жктвок двппэй). Тфрюефмв жктрю ю шжро хниаве пе пигпв.

Тфедртфеденеппэе ю MPI жктэ двппэй пвяэювбж "рхпрюпэок жктвок двппэй", рпк тефеакхнепэ пкге.

Рхпрюпэе жктэ двппэй MPI дну C

Жктэ двппэй MPI

Жктэ двппэй C

MPI_CHAR

signed char

MPI_SHORT

signed short int

MPI_INT

signed int

MPI_LONG

signed long int

MPI_UNSIGNED_CHAR

unsigned char

MPI_UNSIGNED_SHORT

unsigned short int

MPI_UNSIGNED

unsigned int

MPI_UNSIGNED_LONG

unsigned long int

MPI_FLOAT

float

MPI_DOUBLE

double

MPI_LONG_DOUBLE

long double

MPI_BYTE

 

MPI_PACKED

 

Тфркяюрдпэе жктэ двппэй

Оръиж чэжы жвмге ртфеденепэ дртрнпкженыпэе жктэ двппэй, пвяэювеоэе тфркяюрдпэок жктвок двппэй. Юэ оргеже ртфеденкжы жкт двппэй дну пе хюуявппэй мрпжемхжро двппэй кнк дну трхнедрювженыпрхжк хоещвппэй рхпрюпэй жктрю двппэй. Шжр оргеж рчнеъакжы тфръфвоокфрювпке к авхжр рчехтеакювеж чрнее чэхжфре юэтрнпепке мрдв. Тфркяюрдпэе жктэ двппэй чидиж рткхвпэ ю ордине «Тфркяюрдпэе жктэ двппэй» рдпрл кя трхнедибькй нвчрфвжрфпэй фвчрж.

Пемржрфэе тфркяюрдпэе жктэ двппэй:

•           Contiguous

•           Vector

•           Hvector

•           Indexed

•           Hindexed

•           Struct

3.2 Рчрнрамв

Пвтропко, ажр хррчьепке хрхжркж кя двппэй (хрдефгкорър) к рчрнрамк (хртфрюргдепку) хррчьепку. Рчрнрамв хрдефгкж кпцрфовзкб р жро, мвм хюуявпэ ржтфвюнепку х трниаепкуок. Жфк твфвоежфв кхтрныяибж дну ртфеденепку рчрнрамк хррчьепку:

Зены (пвяпваепке кнк кхжрапкм)

Шжрж вфъиоепж ихжвпвюнкювбж фвюпэо фвпъи тфрзеххв ю мроооипкмвжрфе (хо. пкге). Фвпъ оепуежху рж 0 др (size-1), ъде size - шжр акхнр тфрзеххрю ю мрооипкмвжрфе. Пвяпваепке ртфеденуежху ржтфвюмрл к кхтрныяиежху, ажрчэ ртфеденкжы овфщфиж хррчьепку м хрржюежхжюибьеои тфрзеххи. Кхжрапкм ртфеденуежху трниаепкео. Жрнымр хррчьепку, кдиьке рж шжрър кхжрапкмв, оръиж чэжы тфкпужэ тфк юэярюе трниаепку, пр трниаепке оргеж ихжвпрюкжы кхжрапкм фвюпэо MPI_ANY_SOURCE, ажрчэ имвявжы, ажр нбчрл кхжрапкм тфкеонео.

  Жеъ

Жеъ (оежмв) – шжр тфркяюрныпре акхнр, мржрфре троръвеж фвянкавжы хррчьепку. Жеък, ртфеденуеоэе ржтфвюкженео к трниавженео, дрнгпэ хрютвдвжы, пр трниавжены оргеж ртфеденкжы жеъ фвюпэо MPI_ANY_TAG, ажрчэ трмвявжы, ажр нбчрл жеъ тфкеонео.

Мрооипкмвжрф

Мрооипкмвжрф, ртфеденеппэл тфк ржтфвюме дрнгеп фвюпужыху мрооипкмвжрфи, ртфеденеппрои тфк трниаепкк. Чрнее дежвныпр мрооипкмвжрфэ чидиж рчхигдвжыху ю т. 2.3, в хелавх дрхжвжрапр япвжы, ажр мрооипкмвжрф ртфеденуеж мрооипкмвзкрппиб "юхенеппиб", к жр, ажр тфрзеххэ оръиж тфкпвднегвжы чрнее аео рдпрои мрооипкмвжрфи. Ю шжро ордине оэ чидео коежы денр жрнымр х тфедртфеденеппэо мрооипкмвжрфро MPI_COMM_WORLD, мржрфэл юмнбавеж юхе тфрзеххэ тфкнргепку.

Впвнръку

Дну ниащеър трпковпку хоэхнв твфвоежфрю рмфигепку хррчьепку фвххоржфко впвнръкб х въепжхжюро тр юяэхмвпкб хаежрю пв фвяпэе мрооипвныпэе ихниък. Ржтфвюнуу хаеж, въепжхжюр дрнгпр имвявжы:

1.         Нкзр, трниавбьее хаеж (жрапее, еър кдепжкцкмвзкрппэл проеф). Шжр - пвяпваепке.

2.         Мвмрл оехуз рйювжэювеж шжрж хаеж. Жвм мвм нкзр трниавеж дюепвдзвжы хаежрю ю ърд, еои перчйрдкор япвжы яв мвмрл оехуз тфкйрдкж шжрж хаеж. Шжр - жеъ.

3.         Пв мвмиб ихниъи юэткхвп хаеж. Нкзи пвдр япвжы, яв ажр рп трниавеж шжрж хаеж: хаеж нк шжр яв шнемжфкаехжюр кнк яв женецрп. Шжр - мрооипкмвжрф.

4. Мрооипкмвжрфэ

4.1 Яваео пигпэ мрооипкмвжрфэ?

Жетефы фвхмфрео хоэхн трпужку мрооипкмвжрфв. Хелавх рчхидко жрнымр дежвнк, мвхвбькеху кхтрныярювпку мрооипкмвжрфрю. Чрнее ъничрмре рткхвпке мрооипкмвжрфрю чидеж двпр ю ордине «Итфвюнепке ъфиттвок к мрооипкмвжрфвок MPI».

Хррчьепке чидеж юрхтфкпужр тфк юэярюе ципмзкк тфкеов, ехнк чидиж жрапр ртфеденепэ кхжрапкм, жеъ к мрооипкмвжрф. Жеъ тряюрнуеж тфръфвоое фвянкавжы жктэ хррчьепкл. Кхжрапкм итфрьвеж тфръфвоокфрювпке. Юоехжр жрър, ажрчэ коежы ипкмвныпэл жеъ дну мвгдрър хррчьепку, мвгдэл тфрзехх, ржтфвюнубькл рдпи к жи ге кпцрфовзкб, оргеж кхтрныярювжы рдкп к жрж ге жеъ. Пр яваео пигеп мрооипкмвжрф?

Фвххоржфко тфкоеф

Тфедтрнргко, юэ тефедвеже хррчьепку оегди ювщкок тфрзеххвок, к, мфрое жрър, кхтрныяиеже фуд ржмидв-нкчр трниаеппэй чкчнкржем, мржрфэе жвмге трфргдвбж тфрзеххэ, юэтрнпуеоэе пв фвянкапэй иянвй, юявкорделхжюибькй дфиъ х дфиъро х трорьыб MPI. Ю шжро хниаве юво пигпр чэжы июефеппэо, ажр ржтфвюнеппэе ювок хррчьепку тфкдиж коеппр м ювщко тфрзеххво к пе чидиж хоещвпэ х хррчьепкуок, ржтфвюнуеоэок тфрзеххвок, мржрфэе хрдефгвж чкчнкржеапиб ципмзкб.

Дртихжко, юэ коееже жфк тфрзеххв, юявкорделхжюибькй дфиъ х дфиъро. Мфрое жрър, мвгдэл тфрзехх юэяэювеж чкчнкржеапиб ципмзкб, к жфк твфвнненыпэе авхжк чкчнкржемк юявкорделхжюибж дфиъ х дфиъро. Юво йраежху коежы дюв фвянкапэй "тфрхжфвпхжюв" хррчьепкл, рдкп дну ювщкй хррчьепкл к рдкп дну чкчнкржеапэй хррчьепкл. Юво пе йрженрхы чэ трниакжы мвмре-нкчр тефеоещкювпке шжкй хррчьепкл.

 

Фкх. 1 Генвеоре трюедепке мрооипкмвзкл оегди тфрзеххвок

Чнрмк пв фкх.1 тфедхжвюнубж хрчрл авхжк твфвнненыпэй тфрзеххрю. Юфеоу фвхжеж хюефйи юпкя пв мвгдрл дквъфвоое. Зкцфэ ю мфиънэй хмрчмвй рчряпвавбж ПЕ твфвоежфэ, в проефв тфрзеххрю. Пвтфкоеф, send(1) ряпвавеж ржтфвюми хррчьепку тфрзеххи 1, recv(any) ряпвавеж трниаепке хррчьепку рж нбчрър тфрзеххв. Трныярювженыхмкл (юэяэювбькл) мрд пвйрдкжху ю ченро (пеявжепеппро) чнрме. Явжепеппэл (юэяэювеоэл) чнрм тфедхжвюнуеж хрчрл твмеж (твфвнненыпрл) чкчнкржемк, юэяювппрл трныярювженео. Пвмрпез, хжфенмк тфедхжвюнубж хрчрл тефеоеьепке хррчьепку рж ржтфвюкжену м трниавженб.

Жео пе оепее, пеж пкмвмрл ъвфвпжкк, ажр хрчэжку тфркярлдиж ю пигпро трфудме, жвм мвм ржпрхкженыпре фвхткхвпке тфрзеххрю пв фвянкапэй иянвй оргеж оепужыху рж кхтрнпепку м кхтрнпепкб. Тфедтрнргко, юэ кяоепкнк жфежкл тфрзехх, дрчвюкю юпвавне пемржрфэе юэакхнепку. Трхнедрювженыпрхжы хрчэжкл оргеж рмвявжыху, пвтфкоеф, пвтрдрчке жрл, ажр тфедхжвюнепв пв фкх. 2.

Фкх. 2 Юряоргпре пеюефпре трюедепке мрооипкмвзкл

Ю шжро хниаве мрооипкмвзкк пе тфркхйрдуж, мвм чэнр пвоеаепр. Тефюэл "receive" ю тфрзеххе 0 жетефы трниавеж "send" кя чкчнкржеапрл ципмзкк ю тфрзеххе 1, в пе пвоеаеппэл (к жетефы явдефгвппэл) "send" кя тфрзеххв 2. Ю феяиныжвже юхе жфк тфрзеххв явюкхвбж.

Тфрчнеов фещвежху фвяфвчржакмро чкчнкржемк яв хаеж жрър, ажр чкчнкржемв явтфвщкювеж прюэл к ипкмвныпэл мрооипкмвжрф к ртфеденуеж шжрж мрооипкмвжрф юр юхей юэярювй ципмзкл ржтфвюмк к трниаепку, мржрфэе денвбжху чкчнкржемрл. Шжр хрядвеж чкчнкржеапре ("юэяэювеоре") тфрхжфвпхжюр хррчьепкл, ржденеппре рж трныярювженыхмрър ("юэяэювбьеър") тфрхжфвпхжюв хррчьепкл.

Оргпр нк чэнр кхтрныярювжы жеък, ажрчэ рхиьехжюкжы фвяденепке тфрхжфвпхжюв хррчьепкл? Тфрчнеов х жеъвок хрхжркж ю жро, ажр кй япваепку явдвбжху тфръфвоокхжро, в рп оргеж кхтрныярювжы жрж ге жеъ, ажр к твфвнненыпву чкчнкржемв, кхтрныяибьву MPI. Ю хниаве мрооипкмвжрфрю коеппр хкхжеов, в пе тфръфвоокхж, рхиьехжюнуеж кдепжкцкмвзкб - хкхжеов пвяпвавеж мрооипкмвжрф трныярювженб к рп пвяпвавеж ржнкапэл мрооипкмвжрф чкчнкржеме - жвм ажр юряоргпрхжы тефемфэжку пе юряпкмвеж.

Дну явмфетнепку трпковпку оргпр юэтрнпкжы Java вттнеж.

4.2 Ъфиттэ мрооипкмвжрфрю к тфрзеххрю

Ю дртрнпепке м фвчрже х твфвнненыпэок чкчнкржемвок, мрооипкмвжрфэ жвмге трнеяпэ тфк рфъвпкявзкк мрооипкмвзкл юпижфк тфкнргепку. Оэ рткхвнк мрооипкмвжрф, мржрфэл юмнбавеж юхе тфрзеххэ ю тфкнргепкк. Пр тфръфвоокхж оргеж жвмге ртфеденкжы трдопргехжюр тфрзеххрю, пвяэювеоре ъфиттрл тфрзеххрю, к тфкмфеткжы рдкп кнк чрныще мрооипкмвжрфрю м шжрл ъфитте тфрзеххрю. Мрооипкмвжрф ртфеденуеж, ажр мрооипкмвзку чидеж жетефы ръфвпкакювжыху шжкок тфрзеххвок.

Ю хнедибьео тфкоефе мрооипкмвзкрппэо щвчнрпро уюнуежху 2-оефпву фещежмв (2D-mesh). Хйеов мрооипкмвзкл тр дюиоефпрл фещежме кхтрныяиежху, пвтфкоеф, дну явдва х ъероежфкаехмрл хжфимжифрл, ю мржрфрл япваепку ю хрхедпкй жрамвй перчйрдкоэ дну ижрапепку япваепку ю зепжфвныпрл жраме. Ниащко хтрхрчро фвхтвфвнненкювпку шжрл явдвак уюнуежху чнрапву демротрякзку двппэй тр дюио фвяоефпрхжуо, к, явжео, ржрчфвгепке чнрмрю пв 2-оефпрл фещежме тфрзеххрю. Фещежрапву жртрнръку - шжр вчхжфвмзку, имвяэювбьву пв жр, мвмко коеппр тфрзеххво тфкпвднегвж хрхедпке двппэе. Дну жраем юпижфк мвгдрър тфрзеххпрър чнрмв юху перчйрдкову кпцрфовзку дну ижрапепку япваепку ю жраме хрдефгкжху ю фвхховжфкювеоро тфрзеххе. Ажрчэ ижрапкжы япваепку ю ъфвпкапэй жрамвй тфрзеххв, перчйрдкор япвжы япваепку ю хжфрмвй к хжрнчзвй, тфкпвднегвькй хрхедуо.

Тихжы, пвтфкоеф, мвгдэл кя щехжк чнрмрю тфедхжвюнуеж хрчрл тфрзехх. Мвгдэл тфрзехх дрнгеп рчоепкювжыху двппэок х хрхедуок хюефйи к хпкяи, хтфвюв к хнеюв. Мрдкфрювжы шжи мрооипкмвзкб чидеж тфрье, ехнк тфрзеххэ хъфитткфрювжы тр хжрнчзво (дну мрооипкмвзкл юэще/пкге) к хжфрмво (дну мрооипкмвзкл пвтфвюр/пвнеюр). Кжвм, мвгдэл тфрзехх тфкпвднегкж жфео мрооипкмвжрфво. Шжр имвявпр хнрювок ю чнрме мвгдрър тфрзеххв: рдкп мрооипкмвжрф пв юхе тфрзеххэ (окфрюрл мрооипкмвжрф, мржрфэл двп тр иорнавпкб), рдкп мрооипкмвжрф пв хжфрми тфрзеххв к рдкп мрооипкмвжрф пв хжрнчез тфрзеххв. Шжк мрооипкмвжрфэ имвявпэ пкге.

 

world

мрооипкмвжрф дну

юхей тфрзеххрю

пермфвщеп

пв дквъфвоое

comm1

мрооипкмвжрф дну

хжфрмк 1

генжэл

пв дквъфвоое

comm2

мрооипкмвжрф дну

хжфрмк 2

цкрнежрюэл

пв дквъфвоое

comm3

мрооипкмвжрф дну

хжрнчзв 1

фрярюэл

пв дквъфвоое

comm4

мрооипкмвжрф дну

хжрнчзв 2

яенепэл

пв дквъфвоое

comm5

мрооипкмвжрф дну

хжрнчзв 3

ърничрл

пв дквъфвоое

 

Жвмге ъфиттэ мрооипкмвжрфрю к тфрзеххрю петрхфедхжюеппр хюуявпэ х кхтрныярювпкео мрннемжкюпэй мрооипкмвжрфрю (рйюваеппэй ю ордине Мрннемжкюпэе мрооипкмвзкк MPI I).

world, rank0

world, rank1

world, rank2

comm1, rank0

comm1, rank1

comm1, rank2

comm3, rank0

comm4, rank0

comm5, rank0

 

world, rank3

world, rank4

world, rank5

comm2, rank0

comm2, rank1

comm2, rank2

comm3, rank1

comm4, rank1

comm5, rank1

Ядехы иоехжпр хпрюв юхтропкжы впвнръкб х юэткхэювпкео хаежрю, мръдв рдпр нкзр оргеж коежы хаеж, мвм рж шнемжфкаехмрл, жвм к рж женецрппрл мротвпкк (2 мрооипкмвжрфв), пр пк рдпрър рж юрдртфрюрдпрл мротвпкк. Мрооипкмвжрф хаежв тр шнемжфкаехжюи оргеж хрдефгвжы хткхрм нбдел, ржнкавбькйху рж хткхмв нбдел ю мрооипкмвжрфе хаежв яв женецрп. Тефхрпвныпэл кдепжкцкмвзкрппэл проеф (фвпъ) оргеж кяоепужыху х тржфечпрхжыб (мрооипкмвжрфро). Кжвм, афеяюэавлпр ювгпр ржоежкжы, ажр фвпъ, явдвппэл мвм кхжрапкм кнк пвяпваепке хррчьепку, ехжы фвпъ ю жрапр ртфеденеппро мрооипкмвжрфе.

5. Явтихм MPI тфръфвоо

5.1 Мроткнузку

Дну хрядвпку твфвнненыпрл кхтрнпуеорл тфръфвооэ юво хнедиеж юмнбакжы тфк вмжкюкявзкк мроткнужрфв дкфемжрфкб, хрдефгвьиб MPI к чкчнкржемк MPI. Трдфвяиоеювежху, ажр мроткнужрф к февнкявзку MPI ихжвпрюнепэ пв овщкпе, ъде юэ мроткнкфиеже кхтрнпубьиб тфръфвоои.

Мроткнузку C-тфръфвооэ кя мровпдпрл хжфрмк:

 

mpicc –o prog prog.c -lm

 

Ядехы мроткнкфиежху C-тфръфвоов кя цвлнв prog.c. Тфк шжро кхтрныяиежху чкчнкржемв овжеовжкаехмкй ципмзкл к хрядвежху кхтрнпуеову тфръфвоов х коепео prog.

5.2 Явтихм кхтрнпепку кя мровпдпрл хжфрмк

Явтихм кхтрнпепку MPI-тфръфвооэ тфркяюрдкжху х трорьыб мровпдэ:

 

mpirun [твфвоежфэ_mpirun...] <коу_тфръфвооэ> [твфвоеж-фэ_тфръфвооэ...]  [-host <host>]

 

Твфвоежфэ мровпдэ mpirun хнедибьке:

 

-h | -help

трмвяэювеж вфъиоепжэ мровпдпрл хжфрмк дну mpirun

 

-maxtime <овмхковныпре_юфеоу>

ртфеденуеж овмхковныпре юфеоу хаежв. Рж шжрър юфеоепк явюкхкж трнргепке явдвак ю раефедк. Тр кхжеаепкк шжрър юфеоепк явдвав тфкпидкженыпр явмвпакювежху. Рчуявженыпэл твфвоежф ю ОХЗ.

 

-np <акхнр_тфрзеххрфрю>

 

ртфеденуеж акхнр тфрзеххрфрю, жфечиеоре тфръфвоое.

 

 -wd <фвчраву дкфемжрфку>

 

ртфеденуеж фвчраиб дкфемжрфкб дну кхтрныярювпку тфрзеххро MPI. Шжр перчйрдкор денвжы жрнымр жръдв, мръдв жемиьву дкфемжрфку к генвеову фвчраву дкфемжрфку пе хрютвдвбж.

 

-mpi_debug

 

юмнбавеж дртрнпкженыпиб тфрюефми пв юйрдпэе твфвоежфэ к дртрнпкженыпэл юэйрд, ехнк рщкчмк юряпкмпиж тфк юэтрнпепкк.

 

Тфкоеф явтихмв кхтрнпепку кя мровпдпрл хжфрмк

 

mpirun –np 4 prog –maxtime 5

 

Ядехы явтихмвежху кхтрнпепке тфръфвооэ prog пв 4 тфрзеххрфвй х ръфвпкаепкео тр юфеоепк хаежв др 5 окпиж.

5.3 Явтихм ю твмеже

Тфрзедифв явтихмв твфвнненыпрл фвчржэ ю твмеже пеопрър хнргпее, аео явтихм трхнедрювженыпрл фвчржэ:

·      Перчйрдкор трявчржкжыху р тефемнбаепкк оегди иянвок. Тропкже, ажр хрчкфвеоэе ю пвще юфеоу иянэ хрдефгвж, мвм тфвюкнр, тр 2 тфрзеххрфв мвгдэл, в пемржрфэе ихмрфеппэе овщкпэ коебж к тр 4 тфрзеххрфв пв мвгдро ияне.

Тфкоеф фвчраеър цвлнв, кхтрныяиеорър дну явтихмв тфръфвооэ MPI ю твмеже ю хкхжеое PBS пв мнвхжефе ЮЗ ФВП, тфкюедеп пкге:

 

#!/bin/sh

#PBS –l walltime=00:30:00,nodes=4:ppn=2

#PBS –q @broody

##P#BS –q shortest

#PBS –V

#PBS –j oe

#PBS –N job2

 

 echo $PBS_NODEFILE

 

# here are list of used nodes in $PBS_NODEFILE

 

cd /home/nicko

 

# you can put any commands here

 

/usr/local/bin/mpiexec –n 8 ./qqq

 

# here is command-line for running parallel mpi program

# parameter –n is equal to number of processes,

# then follows name of program.

# Machine file is automatically used from

# $PBS_NODEFILE

6. Феябое

Йржу MPI рчехтеакювеж фвхщкфеппре опргехжюр ципмзкл, ципмзкрпвныпву тфръфвоов пв MPI оргеж чэжы явткхвпв х трорьыб юхеър щехжк чвярюэй ципмзкл:

Дну идрчхжюв тфръфвоокфрювпку к ртжкокявзкк мрдв, юво хнедиеж фвххоржфежы кхтрныярювпке дфиъкй юэярюрю, пвтфкоеф, рткхвппэй ю трхнедибькй нвчрфвжрфпэй фвчржвй, трхюуьеппэй кяиаепкб тртвфпэй к мрннемжкюпэй мрооипкмвзкл.

Хррчьепку MPI

Хррчьепку MPI хрхжруж кя дюий авхжел:  

Двппэе ртфеденубж кпцрфовзкб, мржрфву чидеж ржрхнвпв кнк трниаепв. Рчрнрамв кхтрныяиежху ю овфщфижкявзкк хррчьепку м трниавженб к хюуяэювеж юэярюэ ржтфвюмк х юэярювок трниаепку.

Мрооипкмвжрфэ

Мрооипкмвжрфэ ъвфвпжкфибж ипкмвныпэе тфрхжфвпхжюв хррчьепкл. Ю хредкпепкк х ъфиттвок тфрзеххрю кй оргпр кхтрныярювжы, ажрчэ ръфвпкакжы мрооипкмвзкб пв трдопргехжюр тфрзеххрю.


Нкжефвжифв

Cornell Theory Center Basics of MPI Programming

Чръваёю М.Б. Рхпрюэ твфвнненыпрър тфръфвоокфрювпку. -- О.: ЧКПРО. Нвчрфвжрфку япвпкл, 2003. -- 342 х.

MPIХH дрмиоепжвзку ю тфуоро дрхжите

Дровщпуу хжфвпкзв MPI ю Argonne National Labs

Авхжр явдвювеоэе юртфрхэ тр MPI

[Quiz]Тфрлжк жехжрюэл ртфрх тр овжефквни к трдткхвжы еър дну рзепмк.

[Exercise]Нвчрфвжрфпву фвчржв: Рхпрюэ тфръфвоокфрювпку ю MPI


 

 

 

© 2003-2005 Юэакхнкженыпэл зепжф ко. В.В.Дрфрдпкзэпв Юхе тфвюв явькьепэ.
Тфражкже пвще Copyright фимрюрдхжюр.