MPI_Reduce functie
Hiermee wordt een algemene reductiebewerking uitgevoerd voor alle leden van een groep. U kunt een vooraf gedefinieerde wiskundige of logische bewerking of een toepassingsgedefinieerde bewerking opgeven.
Syntaxis
int MPIAPI MPI_Reduce(
_In_ void *sendbuf,
_Out_opt_ void *recvbuf,
int count,
MPI_Datatype datatype,
MPI_Op op,
int root,
MPI_Comm comm
);
Parameters
sendbuf [in]
De ingang naar een buffer die de gegevens bevat die naar het hoofdproces moeten worden verzonden.Als de parameter comm verwijst naar een intracommunicator, kunt u een optie in place opgeven door MPI_IN_PLACE in alle processen op te geven. De parameters sendcount en sendtype worden genegeerd. Elk proces voert gegevens in het bijbehorende ontvangstbufferelement in. Het nth-proces verzendt gegevens naar het nth-element van de ontvangstbuffer. Het hoofdproces neemt de invoergegevens van het bijbehorende element van de ontvangstbuffer en vervangt deze door de uitvoergegevens.
recvbuf [uit, optioneel]
De ingang naar een buffer om het resultaat van de reductiebewerking te ontvangen. Deze parameter is alleen van belang in het hoofdproces.Tellen
Het aantal elementen dat vanuit dit proces moet worden verzonden.Datatype
Het gegevenstype van elk element in de buffer. Deze parameter moet compatibel zijn met de bewerking zoals opgegeven in de parameter op .Op
De globale reductiebewerking die moet worden uitgevoerd. De ingang kan een ingebouwde of door de toepassing gedefinieerde bewerking aangeven. Zie het onderwerp MPI_Op voor een lijst met vooraf gedefinieerde bewerkingen.Root
De rang van het ontvangende proces binnen de opgegeven communicator.Comm
De MPI_Comm communicator-ingang.
Retourwaarde
Retourneert MPI_SUCCESS bij succes. Anders is de retourwaarde een foutcode.
In Fortran wordt de retourwaarde opgeslagen in de parameter IERROR .
Fortran
MPI_REDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER COUNT, DATATYPE, OP, ROOT, COMM, IERROR
Opmerkingen
De functie MPI_Reduce wordt geïmplementeerd met de veronderstelling dat de opgegeven bewerking associatief is. Alle vooraf gedefinieerde bewerkingen zijn ontworpen om associatief en commutatief te zijn. Gebruikers kunnen bewerkingen definiëren die zijn ontworpen om associatief te zijn, maar niet commutatief. De standaardevaluatievolgorde van een reductiebewerking wordt bepaald door de rangschikkingen van de processen in de groep. De implementatie kan echter gebruikmaken van associativiteit of associativiteit en commutativiteit om de volgorde van de evaluatie te wijzigen. Dit proces kan het resultaat van de vermindering wijzigen voor bewerkingen die niet strikt associatief en commutatief zijn, zoals het toevoegen van drijvende komma.
Sommige toepassingen kunnen de niet-associatieve aard van drijvende-kommabewerkingen niet negeren of kunnen door de gebruiker gedefinieerde bewerkingen gebruiken waarvoor een speciale evaluatievolgorde is vereist en die niet als associatief kunnen worden behandeld. In dit geval kunt u de volgorde van de evaluatie expliciet afdwingen. In het geval van bewerkingen waarvoor een strikte evaluatievolgorde van links naar rechts of van rechts naar links is vereist, kunt u bijvoorbeeld het volgende proces gebruiken:
- Verzamel alle operanden in één proces, bijvoorbeeld met behulp van de functie MPI_Gather .
- Pas de reductiebewerking toe in de vereiste volgorde, bijvoorbeeld met behulp van de functie MPI_Reduce_local .
- Indien nodig kunt u het resultaat uitzenden of verspreiden naar de andere processen.
Notitie
Het is mogelijk om verschillende door de gebruiker gedefinieerde bewerkingen op te geven aan de MPI_Reduce-functie in elk proces. De functie definieert in dit geval niet welke bewerkingen worden gebruikt voor welke operanden. U kunt geen veronderstellingen doen over de manier waarop de MPI_Reduce-functie wordt geïmplementeerd. Het is het veiligst om in elk proces dezelfde bewerking op te geven.
Door de gebruiker gedefinieerde operators kunnen werken met algemene, afgeleide gegevenstypen. In dit geval is elk argument waarop de reductiebewerking wordt toegepast één element dat wordt beschreven door een dergelijk gegevenstype, dat verschillende basiswaarden kan bevatten.
Overlappende gegevenstypen zijn toegestaan in verzendbuffers, maar niet in ontvangstbuffers. Overlappende gegevenstypen in ontvangstbuffers kunnen onvoorspelbare resultaten geven en worden beschouwd als een fout.
Als de comm-parameter verwijst naar een intracommunicator, combineert de functie MPI_Reduce de elementen die zijn opgegeven in de invoerbuffer van elk proces in de groep en retourneert met behulp van de opgegeven bewerking de gecombineerde waarde in de uitvoerbuffer van het basisproces.
De invoerbuffer en de uitvoerbuffer hebben hetzelfde aantal elementen van hetzelfde gegevenstype. Roep de functie aan in alle groepsleden met behulp van dezelfde waarden voor de parameters count, datatype, op, root en comm . Deze procedure zorgt ervoor dat alle processen invoerbuffers en uitvoerbuffers van dezelfde lengte bieden, met elementen van hetzelfde type.
Elk proces kan één element of een reeks elementen bieden, in welk geval de bewerking per element wordt uitgevoerd op elke vermelding van de reeks. Als de bewerking bijvoorbeeld is MPI_MAX en de verzendbuffer twee elementen bevat die getallen met drijvende komma zijn, ontvangt het recvbuf(1)
globale maximum van (sendbuf(1))
en recvbuf(2)
het globale maximum van (sendbuf(2))
.
Als de comm-parameter verwijst naar een intercommunicator, omvat de aanroep alle processen in de intercommunicator, maar met één groep, groep A, die het basisproces definieert. Alle processen in de andere groep, groep B, stellen dezelfde waarde in de hoofdparameter in, dat wil gezegd, de rang van het basisproces in groep A. Met het basisproces wordt de waarde MPI_ROOT in de parameter root ingesteld. Alle andere processen in groep A stellen de waarde MPI_PROC_NULL in de parameter root . Alleen parameters voor de verzendbuffer zijn belangrijk in groep B-processen en alleen ontvangstbufferparameters zijn belangrijk in het basisproces.
Vereisten
Product |
HPC Pack 2012 MS-MPI Redistributable Package, HPC Pack 2008 R2 MS-MPI Redistributable Package, HPC Pack 2008 MS-MPI Redistributable Package of HPC Pack 2008 Client Utilities |
Header |
Mpi.h; Mpif.h |
Bibliotheek |
Msmpi.lib |
DLL |
Msmpi.dll |