Megosztás:


MPI_Reduce függvény

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:

  1. Gyűjtse össze az összes operandust egyetlen folyamat során, például a MPI_Gather függvénnyel.
  2. Alkalmazza a csökkentési műveletet a szükséges sorrendben, például a MPI_Reduce_local függvénnyel.
  3. 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

Lásd még

MPI kollektív függvények

MPI_Datatype

MPI_Gather

MPI_Op

MPI_Bcast