Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Globális csökkentési műveletet hajt végre a csoport összes tagja számára. Előre definiált matematikai vagy logikai műveletet vagy alkalmazás által definiált műveletet is megadhat.
Szintaxis
int MPIAPI MPI_Reduce(
_In_ void *sendbuf,
_Out_opt_ void *recvbuf,
int count,
MPI_Datatype datatype,
MPI_Op op,
int root,
MPI_Comm comm
);
Paraméterek
sendbuf [in]
A leíró egy pufferbe, amely tartalmazza a gyökérfolyamatba küldendő adatokat.Ha a komm paraméter egy intrakommunikátorra hivatkozik, a MPI_IN_PLACE minden folyamathoz megadva megadhatja a helyben beállítást. A sendcount és a sendtype paraméterek figyelmen kívül lesznek hagyva. Minden folyamat adatokat ad meg a megfelelő fogadási pufferelemben. Az n. folyamat adatokat küld a fogadópuffer n. elemének. A gyökérfolyamat a bemeneti adatokat a fogadó puffer megfelelő eleméből veszi át, és a kimeneti adatokra cseréli.
recvbuf [ki, nem kötelező]
A fogópont egy pufferbe a csökkentési művelet eredményének fogadásához. Ez a paraméter csak a gyökérfolyamatban jelentős.Számít
A folyamatból küldendő elemek száma.Adattípus
A puffer egyes elemeinek adattípusa. Ennek a paraméternek kompatibilisnek kell lennie az op paraméterben megadott művelettel.Op
A végrehajtandó globális csökkentési művelet. A leíró egy beépített vagy alkalmazás által definiált műveletet jelezhet. Az előre definiált műveletek listáját a MPI_Op témakörben találja.Gyökér
A fogadó folyamat rangja a megadott kommunikátorban.Comm
A MPI_Comm communicator leírója.
Visszatérési érték
Sikeres MPI_SUCCESS ad vissza. Ellenkező esetben a visszatérési érték hibakód.
A Fortranban a visszatérési érték az IERROR paraméterben lesz tárolva.
Fortran
MPI_REDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER COUNT, DATATYPE, OP, ROOT, COMM, IERROR
Megjegyzések
A MPI_Reduce függvény azzal a feltételezéssel van implementálva, hogy a megadott művelet társítható. Minden előre definiált művelet asszociatív és ingmutatív. A felhasználók asszociatív, de nem kommutatív műveletek definiálhatók. A csökkentési művelet alapértelmezett kiértékelési sorrendjét a csoport folyamatainak rangsorolása határozza meg. A megvalósítás azonban kihasználhatja az asszociativitást, az asszociatitivitást és a kommutattivitást, hogy megváltoztassa az értékelés sorrendjét. Ez a folyamat megváltoztathatja a nem szigorúan asszociatív és ingmutatív műveletek, például a lebegőpontos összeadás csökkenésének eredményét.
Egyes alkalmazások nem hagyhatják figyelmen kívül a lebegőpontos műveletek nem asszociatív jellegét, vagy olyan felhasználó által definiált műveleteket használhatnak, amelyek speciális kiértékelési sorrendet igényelnek, és nem kezelhetők társításként. Ebben az esetben a kiértékelés sorrendjét explicit módon érvényesítheti. Például olyan műveletek esetén, amelyek szigorú balról jobbra vagy jobbról balra történő kiértékelési sorrendet igényelnek, a következő eljárást használhatja:
- Gyűjtse össze az összes operandust egyetlen folyamat során, például a MPI_Gather függvénnyel.
- Alkalmazza a csökkentési műveletet a szükséges sorrendben, például a MPI_Reduce_local függvénnyel.
- Szükség esetén közvetítse vagy pontozzák az eredményt a többi folyamatra.
Megjegyzés
Az egyes folyamatok MPI_Reduce függvényéhez különböző, felhasználó által definiált műveleteket lehet megadni. A függvény nem határozza meg, hogy mely műveleteket használja a rendszer ebben az esetben. A MPI_Reduce függvény implementálásával kapcsolatos feltételezések nem állíthatók elő. Az egyes folyamatokban a legbiztonságosabb ugyanazt a műveletet megadni.
A felhasználó által definiált operátorok általános, származtatott adattípusokon működhetnek. Ebben az esetben a csökkentési művelet minden argumentuma egy ilyen adattípus által leírt elem, amely több alapértéket is tartalmazhat.
Az egymást átfedő adattípusok a küldési pufferekben engedélyezettek, a fogadó pufferekben azonban nem. A fogadópufferek egymást átfedő adattípusai kiszámíthatatlan eredményeket adhatnak, és hibának minősülnek.
Ha a komm paraméter egy intrakommunikátorra hivatkozik, a MPI_Reduce függvény egyesíti a csoport egyes folyamatainak bemeneti pufferében megadott elemeket, és a megadott művelettel visszaadja a gyökérfolyamat kimeneti pufferében lévő kombinált értéket.
A bemeneti puffer és a kimeneti puffer azonos adattípusú elemekkel rendelkezik. Hívja meg a függvényt az összes csoporttagban ugyanazokkal az értékekkel a darabszám, az adattípus, az op, a gyökér és a comm paraméterek esetében. Ez a gyakorlat biztosítja, hogy minden folyamat azonos hosszúságú bemeneti puffereket és kimeneti puffereket biztosítson, azonos típusú elemekkel.
Minden folyamat megadhat egy elemet vagy egy elemsorozatot, amely esetben a műveletet elemenként hajtja végre a rendszer a sorozat minden egyes bejegyzésén. Ha például a művelet MPI_MAX , és a küldési puffer két lebegőpontos elemet tartalmaz, akkor recvbuf(1) megkapja a globális maximumot (sendbuf(1)) , és recvbuf(2) megkapja a globális maximumot (sendbuf(2)).
Ha a komm paraméter egy interkommunikátorra hivatkozik, akkor a hívás magában foglalja az interkommunikátor összes folyamatát, de egy olyan csoporttal, az A csoporttal, amely meghatározza a gyökérfolyamatot. A másik csoport összes folyamata, a B csoport, ugyanazt az értéket állítja be a gyökérparaméterben, azaz az A csoport gyökérfolyamatának rangját. A gyökérfolyamat beállítja a gyökérparaméterben MPI_ROOT értéket. Az A csoport összes többi folyamata beállítja a gyökérparaméterben MPI_PROC_NULL értéket. Csak a küldési pufferparaméterek jelentősek a B csoportfolyamatokban, és csak a fogadó pufferparaméterek jelentősek a gyökérfolyamatban.
Követelmények
Termék |
HPC Pack 2012 MS-MPI terjeszthető csomag, HPC Pack 2008 R2 MS-MPI terjeszthető csomag, HPC Pack 2008 MS-MPI terjeszthető csomag vagy HPC Pack 2008 Client Utilities |
Fejléc |
Mpi.h; Mpif.h |
Kódtár |
Msmpi.lib |
DLL |
Msmpi.dll |