Besked Passing grænseflade

Bubu MPI er en standard, der definerer syntaks og semantik af de funktioner, der er indeholdt i en meddelelse passerer bibliotek designet til at blive brugt på gaden i programmer, der udnytter, at der findes flere processorer.

Passagen af ​​pis budskaber er en teknik, der anvendes i samtidige programmering for at sikre synkronisering mellem processer og tillade gensidig udelukkelse, på samme måde som hvordan det gøres med trafiklys, skærme osv

Dets vigtigste funktion er, at det ikke kræver delt hukommelse, så det er meget vigtigt i programmering distribuerede systemer.

De vigtigste elementer, der indgår i passagen af ​​processen beskeder sendes, modtager og budskab.

Afhængigt af om den proces, der sender meddelelsen venter beskeden er modtaget, kan du tale om skridt synkron eller asynkron beskeder. I trin asynkrone meddelelser, den afsendende processen og ikke vente, indtil beskeden er modtaget, og fortsætter med at køre, hvilket gør det muligt at generere en ny besked og sende den igen, før den er modtaget før. Af denne grund er de ofte postkasser, hvor meddelelser venter på at behandle det modtagne lagres. Generelt ved hjælp af dette system, den proces, der sender beskeder kun låser eller når færdig, eller hvis postkassen er fuld. I trin synkron besked, sende processen venter en proces modtager besked for fortsat udførelse. Derfor normalt kalder denne teknik møde eller rendezvous. Inside Passage er synkron meddelelse indeholder opfordringen til populær remote procedure, klient / server-arkitekturer.

The Message Passing Interface er en protokol til kommunikation mellem computere. Det er den standard for kommunikation mellem noder, der kører et program på en distribueret hukommelse system. MPI implementeringer består af et sæt af bibliotekets rutiner, der kan bruges i programmer skrevet i programmeringssprog C, C ++, Fortran og Ada. Den fordel over andre MPI besked passerer biblioteker, er, at programmer, der bruger biblioteket er bærbare, og hurtig,.

Historie

Ved udformningen MPI, blev de betragtet de mest attraktive træk ved eksisterende systemer for besked forbifarten, i stedet for at vælge en af ​​dem og vedtage det som standard, hvilket resulterer i en stærk indflydelse for MPI job udført af IBM , INTEL, NX /, Ekspres Ncube s Vernex, p4 og PARMACS. Andre vigtige bidrag kommer fra Postnr, Chimp, PVM, Chameleon og PICL.

Indsatsen for at standardisere MPI involveret omkring 60 mennesker fra 40 forskellige organisationer primært amerikanske og Europa.

De fleste sælgere af samtidige computere blev involveret i MPI, samt forskere fra universiteter, offentlige laboratorier og industrier.

Standardiseringsprocessen begyndte i værkstedet af standarder for at passere beskeder i en distribueret hukommelse miljø, sponsoreret af Center for Forskning i Parallel Computing i Williamsburg, Virginia, USA.

Han gjorde et foreløbigt forslag, kendt som MPI1, fokuserede primært på punkt-til-punkt kommunikation uden at inddrage kollektive kommunikation rutiner og havde ingen sikre job.

Den endelige standard, MPI blev præsenteret på Supercomputing konferencen i november 1993, og dermed bliver forum for MPI.

I et miljø med kommunikation med distribueret hukommelse, hvor budskabet passerer rutiner lavt niveau, fordelene ved standardisering er meget mærkbar. Den største fordel ved at sætte en standard for besked passerer er portabilitet og være let at bruge. MPI-1 udkom i 1994 blev MPI-2 standarden udgivet i 1997

Fundamentals of MPI

Med MPI processer nødvendige antal er tildelt før gennemførelsen af ​​programmet, og ingen yderligere processer er skabt, mens programmet kører. Hver proces er tildelt en variabel kaldet rang, der identificerer hver proces, i området 0 til p-1, hvor p er det samlede antal processer. Gennemførelsen af ​​styreprogrammet gøres ved at variere rang; rang-variablen tillader bestemmelse hvilken fremgangsmåde udfører vis del af koden. I en comunicator MPI som en samling af processerne, som kan sende beskeder til hinanden; grundlæggende comunicator kaldet MPI_COMM_WORLD og er defineret ved en C-sprog makro MPI_COMM_WORLD grupper alle aktive processer under udførelsen af ​​en ansøgning. MPI opkald er inddelt i fire klasser:

  • Opkald, der bruges til at initialisere, styre og afslutte kommunikation.
  • Opfordrer anvendes til at overføre data mellem et par af processer.
  • Opfordrer til overførsel af data mellem flere processer.
  • Opkald bruges til at oprette datatyper defineret af brugeren.

Den første klasse af opkald tillader initialisere beskeden passerer bibliotek, identificere antallet af processer og den vifte af processer. Den anden form for opkald omfatter operationer Direkte kommunikation til forskellige typer skibsfart og modtagelse aktiviteter. Den tredje klasse af opkald er kendt som gruppe operationer, der giver kommunikation operationer mellem grupper af processer. Den sidste klasse af opkald giver fleksibilitet i opbygningen af ​​komplekse datastrukturer. I MPI, et budskab består af brødteksten, som indeholder de data, der skal sendes, og dens konvolut, med angivelse af kilde og destination proces. MPI besked krop består af tre stykker information: buffer, datatype og tæller. Bufferen er hukommelsen placering, hvor dataene er output eller input data, som lagres. Datatype angiver den type data, der sendes i meddelelsen. I enkle tilfælde er dette en grundlæggende eller primitiv type, for eksempel et heltal, og at mere avancerede programmer kan være en datatype bygget af primitive data. De afledte datatyper er analoge med strukturerne i C. Optællingen er en sekvens nummer ved siden af ​​den type data tillader brugeren at gruppen dataelementer af samme type i en enkelt besked. MPI standardiserer de primitive datatyper, forhindrer programmøren bekymre sig om forskellene mellem dem, når de er på forskellige platforme. Konvolutten af ​​en meddelelse i MPI indeholder typisk destinationsadresse, kilde adresse og alle andre oplysninger, der kræves til at sende og levere budskabet. Konvolutten af ​​en besked i MPI, består af fire dele: kilde, destinationen, Communicator og en etiket. Senderen identificerer kilden processen. Modtageren identificerer destinationen processen. Den comunicator angiver den proces, gruppe, som hører kilden og destination. Mærket gør det muligt at klassificere meddelelsen. Mærket er et heltal felt af brugeren, der kan anvendes til at skelne de beskeder, du modtager en defineret fremgangsmåde. For eksempel er der to fremgangsmåder A og B. Fremgangsmåde A sender to budskaber at behandle B begge meddelelser omfatter en database. En af de data bruges til at udføre en beregning, mens den anden anvendes til filmtryk. Processen A bruger forskellige etiketter til meddelelser. B fremgangsmåden anvendes værdierne af etiketter, der er defineret i processen og identificerer den pågældende operation skal udføres med data fra hver meddelelse.

Opkald, der bruges til at initialisere, styre og afslutte kommunikation

MPI har 4 primære funktioner, der anvendes i ethvert program med MPI. Disse funktioner er:

MPI_Init initialiserer MPI session. Denne funktion skal bruges, før du ringer enhver anden funktion MPI.

MPI_Finalize MPI tillader slutter en session. Denne funktion bør være det sidste opkald til MPI et program til at udføre. Frigør hukommelse, der bruges af MPI.

MPI_Comm_size at bestemme det samlede antal processer, der tilhører en comunicator.

MPI_Comm_rank at bestemme identifikationen af ​​den igangværende proces.

Opfordrer bruges til at overføre data mellem to processer

Dataoverførsel mellem to processer opnås ved MPI_Send og MPI_Recv opkald. Disse opkald returnere en kode, der angiver succes eller fiasko. MPI_Send til at sende oplysninger fra én proces til en anden. MPI_Recv kan modtage oplysninger fra en anden proces. Begge funktioner er blokering, hvilket betyder, at den kaldende proces er blokeret, indtil meddelelsen er færdig. De ikke-blokerende versioner af MPI_Send og MPI_Recv er MPI_Isend og MPI_Irecv hhv. Disse opkald indleder overførslen færdiggørelse, men skal gøres eksplicit ved opkald som MPI_Test og MPI_Wait. MPI_Wait er et blokerende opkald og vender tilbage, når du sender eller modtager er fuldført. MPI_Test kontrollerer, om at sende eller modtage operation er færdig, denne funktion først kontrollerer status for at sende eller modtage drift og derefter vender tilbage.

Opfordrer anvendes til at overføre data mellem flere processer

MPI har opfordret til gruppe kommunikation drift, herunder typen diffusion indsamling, distribution og reduktion. Nogle funktioner, der giver overførsel mellem flere processer præsenteres nedenfor. MPI_Barrier tillader synkronisering operationer. I disse operationer er der ingen form for udveksling af oplysninger. Ofte bruges til at afslutte en fase af programmet, der sikrer, at alle processer har afsluttet, før du starter den næste. MPI_Bcast tillader en proces til at sende en kopi af dine data til andre processer inden for en gruppe defineret ved et comunicator. MPI_Scatter etablerer en fordeling operation, hvor en data er fordelt i forskellige processer. MPI_Gather etablerer en høst operation, hvor der indsamles data i en enkelt proces. MPI_Reduce tillader roden proces indsamler data fra andre processer i en gruppe, og kombinere i en enkelt dataelement. For eksempel kan du bruge en reduktion operation til at beregne summen af ​​elementerne i et array, der blev fordelt i nogle processer.

Opkald bruges til at oprette datatyper defineret af brugeren

For at definere nye datatyper kan bruge MPI_Type_struct opfordring til at oprette en ny type eller du kan bruge de opkald MPI_Pack Emballage data.

MPI Egenskaber

  • Standardisering.
  • Overførsel: multiprocessor, multicomputer netværk, heterogene, ...
  • Gode ​​fordele.
  • Omfattende funktionalitet.
  • Eksistens af frie implementeringer

Specifikationen beskriver de funktioner, der kan bruges, er ikke den måde, kompileret og udgivet-run-programmer, som kan variere fra den ene gennemførelsen til en anden.

Efter SPMD modellen, du skriver din ansøgning som en sekventiel proces flere forekomster, der samarbejder vil blive lanceret.

MPI processer påberåbe forskellige funktioner, som tillader

  • igangsætte, styre og afslutte processer MPI
  • kommunikere data mellem to processer
  • kommunikationsaktiviteter mellem grupper af processer
  • oprette vilkårlige datatyper

Implementeringer

Sprog implementering for MPI er generelt sprog, der forsøger at optimere gennemførelsestid.

De fleste MPI implementeringer er lavet i en kombination af C, C + + og assembler, C ++, Fortran. Men sproget og slutbrugeren ansøgning sprog er i princippet altid adskilles.

Den indledende implementering af standarden MPI 1.x var MPICH-, født i Argonne National Laboratory og Mississippi State University.

IBM var også en af ​​de første til at implementere MPI standard, og de fleste virksomheder supercomputer i begyndelsen af ​​90'erne, der markedsfører MPICH- eller gennemførelsesbestemmelser din egen anvendelse af standard MPI 1.x.

LAM / MPI Ohio Supercomputing Center er en af ​​de første til at gennemføre den.

Den Argonne National Laboratory fortsatte udvikling MPICH- i mere end et årti, og tilbyder nu MPICH2 hvilket svarer til gennemførelsen af ​​standarden MPI-2.1

LAM / MPI, og en række nylige bestræbelser fra MPI er blevet til et nyt globalt projekt kaldet OpenMPI, men dette navn er ikke ensbetydende med noget forhold til standarden.

Microsoft har tilføjet en MPI til indsatsen dens Kit Cluster Computing, baseret MPICH2. MPI er blevet og er stadig et afgørende redskab til samtidig programmering interface til dette element af i dag.

Mange Linux-distributioner inkluderer MPI, men bedre at få de nyeste versioner af MPI udviklere fra udviklings- websteder.

Mange sælgere af brugerdefinerede fordelinger af de nuværende implementeringer af gratis software, som fokuserer på bedre ydelse og stabilitet.

Udover MPI mainstream til højtydende programmering, har MPI været brugt i udstrakt grad med Python, Perl, Java.

Disse samfund er stigende.

Baseret på MATLAB MPI de optræder i mange former, men der er ikke enighed om en enkelt måde at bruge MPI med Matlab.

I de følgende afsnit detalje nogle af disse bestræbelser.

Python

Der er mindst fem kendte forsøg på at anvende MPI for Python: mpi4py, PyPar, PyMPI, MYMPI og sub modul MPI ScientificPython.

PyMPI er bemærkelsesværdig, fordi det er en variant af python multi-node implementering af tolken selv, men koden tolk tolk kører. Gennemfører meste af MPI specifikation og arbejder med den kompileret du har brug for at foretage opkald MPI kode automatisk.

PyPar, MYMPI og ScientificPython modul er designet til at arbejde som en typisk udfører en import erklæring modul.

De gør arbejdet for encoderen til at beslutte, hvornår og hvor opkaldet til MPI_Init tilhører.

OCaml

Den OCamlMPI modulet implementerer en stor delmængde af funktioner MPIy er i aktiv brug i videnskabelig computing.

For at få en fornemmelse af modenhed: blev det rapporteret på listen over OCaml at en linje af elleve tusinde OCaml program var "MPI-ceret" ved hjælp af modulet, med yderligere 500 linjer kode og let omstrukturering og har kørt fremragende resulterer op til 170 noder på en supercomputer.

Java

Selvom Java ikke har en bindende MPI embedsmand, der har været flere forsøg på at slå bro Java og MPI, med varierende grader af succes og kompatibilitet.

En af de første forsøg var Bryan Carpenters mpiJava dybest set en samling af indpakningsmaterialet JNI lokale MPI bibliotek af C, hvilket resulterer i en hybrid med begrænset bærbarhed i praksis, og der skal kompileres med det specifikke bibliotek MPI-bibliotek anvendes.

Men denne oprindelige forslag mpiJava defineret API, som senere andre projekter Java MPI er blevet anvendt.

En alternativ, men mindre anvendt, er MPJ ​​API designet til at være objektorienteret og tættere på de kodende konventioner Sun Microsystems.

Andre, der bruger Java API-biblioteker MPI kan være afhængig af det lokale bibliotek, eller udføre funktioner besked passerer i Java, mens nogle som P2P-MPI tillader også funktionalitet og drift af blandet platform.

Nogle af de hårdeste dele af enhver ansøgning om Java MPI skyldes begrænsninger programmeringssproget og dets særheder, såsom manglende eksplicitte pegepinde og adresse rum af lineære hukommelse til dine objekter, som gør overførsel arrays ineffektive flerdimensionelle og komplekse objekter.

Metoderne normalt omfatter overførsel af en linje ad gangen og / eller udførelse af eksplicitte serialisering og udsende både afsendelse og modtagelse ende, simulerer C eller FORTRAN som arrays ved hjælp af en endimensional array, og henvisninger til de primitiver ved brug af et enkelt element vektor typer, der fører til ganske mærkelige stilarter Java programmering konventioner.

En af de vigtigste forbedringer er MPJ ​​Express by Aamir Shafi og overvåges af Bryan Carpenter og Mark Baker. Fast Ethernet som den grundlæggende platform bruges, teknologiske fremskridt JVM nu tilgængelige programmer skrevet i Java Java rivaler C modstykker.

Desuden forbedringer i netværkshardware specialiseret fortsatte, hvilket reducerer kommunikation udgifter til et par mikrosekunder.

Det centrale spørgsmål i dag er ikke at diskutere indbyrdes jo bedre JNI baseret på ren Java, men at give en fleksibel mekanisme til udvekslingsprogrammer kommunikationsprotokoller.

Formålet med dette projekt er at tilvejebringe et beskedsystem henvisning Java-baserede MPI standarden. Ansøgningen følger en ide baseret på en enhedsdriver arkitektur.

Microsoft Windows

Windows Compute Cluster Server bruger Microsoft Messaging Passing interface v2 til kommunikation mellem behandling knudepunkter i klyngen nettet. Ansøgningen programming interface består af over 160 funktioner. MS-MPI er designet, med visse undtagelser på grund af sikkerhedshensyn, til også at omfatte det fulde sæt af funktioner implementeret i MPICH2 MPI2.

Der er også en komplet managed ansøgning. NET MPI - Pure Mpi.NET. Den objektorienterede API er kraftfuld, let at bruge for parallel programmering.

Det er blevet udviklet over de sidste tecnología.NET, inkluderet i Windows Communication Foundation.

Dette giver dig mulighed for at declaratively angive konfigurationsindstillinger afbrydtasten f miljø og ydeevne behov.

MPI-grænseflader, mens maksimerer de.NET funktioner, herunder generiske, delegerede, asynkrone resultater, undtagelser og udvidelsesmuligheder.

Hardwareimplementeringer

Der var ingen undersøgelse for at gennemføre MPI direkte til systemet hardware, for eksempel gennem processorhukommelse, hvor MPI operationer er integreret i RAM chip af hver node.

Implicit vil denne type anvendelse er uafhængig af sprog, operativsystem eller CPU i systemet, men ville ikke være let opdateres.

En anden fremgangsmåde har været at tilføje hardware acceleration til en eller flere dele af operationen. Dette kan omfatte forarbejdning hardware køer eller MPI hjælp RDMA direkte overføre data mellem hukommelse og netværksinterfacet uden indgriben af ​​CPU eller kerne.

Grundlæggende funktioner

Ethvert sideløbende program med MPI kan gennemføres med kun 6 funktioner, selv om der er mange flere funktioner til avancerede aspekter. MPI_ alle start og kræver, at alle programmer skrevet i MPI indeholder direktivet:

Denne fil indeholder definitioner, makroer og funktion prototyper er nødvendige for at kompilere MPI-programmer.

Før du ringer enhver anden funktion MPI skal du foretage et opkald til MPI_Init; denne funktion bør kun kaldes én gang. Deres argumenter er henvisninger til parametrene for funktionen vigtigste, argc og argv. Denne funktion gør det muligt for systemet at gøre alle de nødvendige for MPI bibliotekets konfigurationer kan anvendes. Når programmet er færdig med at bruge MPI bibliotek bør foretage et opkald til MPI_Finalize. MPI_Finalize funktion sletter alle job efterladt ufærdig af MPI. MPI-programmerne nødvendigvis skal initialiseres og afsluttet i MPI.

MPI tilbyder, som returnerer identifikationen af ​​en proces i sit andet argument MPI_Comm_rank funktion. Dets syntaks er:

Det første argument er kommunikator. Hovedsagelig en kommunikator er en samling af processer, der kan sende meddelelser til hinanden. Normalt at designe basale programmer alene kommunikator, der vil blive behov for, er MPI_COMM_WORLD. Det er foruddefineret i MPI og består af alle de processer, der udføres, når programmet starter.

Mange af de bygninger, der anvendes i programmer, også afhænge af antallet af processer, der kører. MPI_Comm_size MPI tilbyder den funktion at afgøre dette antal processer. Dens første argument er kommunikator. I det andet argument returnerer antallet af processer, der tilhører nævnte kommunikator. Dets syntaks er:

Den MPI_Get_processor_name funktionen lader dig vide navnet på processoren, hvor hver proces er placeret. Dette kan være nyttigt til overvågning af programmer i heterogene netværk. Vide, hvad bestemt maskine kører en bestemt proces kan være afgørende for at forklare hans opførsel, som kan understøttes af overvågningsværktøjer. Syntaksen for denne funktion er:

Navnet parameter er en streng, hvis størrelse skal være mindst lig med den konstante MPI_MAX_PROCESSOR_NAME. I denne vektor gemmes processor navn. Den anden parameter er longnombre output parameter rapportering kædelængden opnået.

Blokering passagen af ​​meddelelser er det udføres af de programmer og funktioner MPI_Send MPI_Recv hovedsagelig. Den første funktion sender en besked til en bestemt proces. Den anden modtager en besked fra en proces. Disse er de mest grundlæggende funktioner i MPI besked passerer.

I MPI miljø indeholder følgende oplysninger:

  • Identifikationen af ​​den modtagende proces.
  • Processen ID på afsenderen af ​​meddelelsen.
  • En etiket.
  • En kommunikator.


Header fil:

  • omfatte & lt; mpi.h & gt;

Format funktioner: Fejlkode = MPI_nombre

Initialisering: int MPI_Init

Communicator: Sæt af processer, der i forbindelse med hinanden. Som standard kan vi bruge MPI_COMM_WORLD, i hvilket tilfælde processen gruppe er den række processer kastet sammen for at løse et problem

Identifikation af processer: MPI_Comm_rank

Processer i kommunikator: MPI_Comm_size

Afslutning: int MPI_Finalize

Beskeder: En meddelelse vil bestå af en række elementer af samme type MPI.

MPI grundlæggende typer:


MPI afledte typer: udvikleren bygger.

Afsendelse af en besked til en anden proces: int MPI_Send

Modtagelse af en besked fra en anden proces:

int MPI_Recv

Modtageren kan bruge MPI_ANY_TAG og / eller MPI_ANY_SOURCE

Eksempel

Nedenfor det er en "Hello World" implementeret i C ved hjælp af MPI. Programmet sender en besked til enhver node og udskriver den på skærmen. Derudover har hvert knudepunkt bearbejder meddelelsen og returnerer resultaterne til masterknuden.


Eksempel 2

  0   0
Forrige artikel Danske Bank

Kommentarer - 0

Ingen kommentar

Tilføj en kommentar

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Tegn tilbage: 3000
captcha