Aracılığıyla paylaş


MPI_Reduce işlevi

Bir grubun tüm üyeleri arasında genel bir azaltma işlemi gerçekleştirir. Önceden tanımlanmış bir matematiksel veya mantıksal işlem ya da uygulama tanımlı bir işlem belirtebilirsiniz.

Söz dizimi

int MPIAPI MPI_Reduce(
  _In_      void         *sendbuf,
  _Out_opt_ void         *recvbuf,
            int          count,
            MPI_Datatype datatype,
            MPI_Op       op,
            int          root,
            MPI_Comm     comm
);

Parametreler

  • sendbuf [in]
    Kök işleme gönderilecek verileri içeren bir arabelleğe tanıtıcı.

    comm parametresi bir intracommunicator'a başvuruda bulunursa, tüm işlemlerde MPI_IN_PLACE belirterek yerinde seçeneğini belirtebilirsiniz. sendcount ve sendtype parametreleri yoksayılır. Her işlem, karşılık gelen alma arabelleği öğesine veri girer. n. işlem, alma arabelleğinin n. öğesine veri gönderir. Kök işlem, giriş verilerini alma arabelleğinin ilgili öğesinden alır ve çıkış verileriyle değiştirir.

  • recvbuf [out, isteğe bağlı]
    Azaltma işleminin sonucunu almak için arabelleğe tanıtıcı. Bu parametre yalnızca kök işlemde önemlidir.

  • Sayısı
    Bu işlemden gönderilecek öğe sayısı.

  • Datatype
    Arabellekteki her öğenin veri türü. Bu parametre, işlem parametresinde belirtilen işlemle uyumlu olmalıdır.

  • Op
    Gerçekleştirilecek genel azaltma işlemi. Tanıtıcı, yerleşik veya uygulama tanımlı bir işlemi gösterebilir. Önceden tanımlanmış işlemlerin listesi için MPI_Op konusuna bakın.

  • Kök
    Belirtilen iletişimci içindeki alıcı işlemin sırası.

  • Comm
    İletişim MPI_Comm tutamacı.

Döndürülen değer

Başarılı MPI_SUCCESS döndürür. Aksi takdirde, dönüş değeri bir hata kodudur.

Fortran'da, dönüş değeri IERROR parametresinde depolanır.

Fortran

    MPI_REDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, ROOT, COMM, IERROR) 
        <type> SENDBUF(*), RECVBUF(*) 
        INTEGER COUNT, DATATYPE, OP, ROOT, COMM, IERROR

Açıklamalar

MPI_Reduce işlevi, belirtilen işlemin ilişkilendirilebilir olduğu varsayımıyla uygulanır. Önceden tanımlanmış tüm işlemler ilişkilendirilebilir ve devam eden olacak şekilde tasarlanmıştır. Kullanıcılar, ilişkilendirilebilir olacak şekilde tasarlanmış ancak devam eden işlemleri tanımlayamayabilir. Azaltma işleminin varsayılan değerlendirme sırası, gruptaki işlemlerin derecelerine göre belirlenir. Ancak uygulama, değerlendirme sırasını değiştirmek için ilişkilendirilebilirlik veya ilişkilendirilebilirlik ve uyumluluk avantajlarından yararlanabilir. Bu işlem, kayan nokta ekleme gibi kesinlikle ilişkilendirilebilir ve commutative olmayan işlemler için azaltmanın sonucunu değiştirebilir.

Bazı uygulamalar kayan nokta işlemlerinin ilişkilendirilemeyen doğasını yoksayamaz veya özel bir değerlendirme sırası gerektiren ve ilişkilendirilebilir olarak kabul edilemeyen kullanıcı tanımlı işlemleri kullanabilir. Bu durumda, değerlendirme sırasını açıkça zorlayabilirsiniz. Örneğin, katı bir soldan sağa veya sağdan sola değerlendirme sırası gerektiren işlemlerde aşağıdaki işlemi kullanabilirsiniz:

  1. Örneğin , MPI_Gather işlevini kullanarak tüm işlenenleri tek bir işlemde toplayın.
  2. Azaltma işlemini, örneğin MPI_Reduce_local işlevini kullanarak gerekli sırayla uygulayın.
  3. Gerekirse, sonucu diğer işlemlere yayınlar veya dağıtın.

Not

Her işlemde MPI_Reduce işlevine farklı kullanıcı tanımlı işlemler sağlamak mümkündür. işlevi, bu durumda hangi işlemlerin hangi işlenenler üzerinde kullanılacağını tanımlamaz. MPI_Reduce işlevinin nasıl uygulandığı hakkında hiçbir varsayımda bulunamazsınız. Her işlemde aynı işlemi belirtmek en güvenli işlemdir.

 

Kullanıcı tanımlı işleçler genel, türetilmiş veri türlerinde çalışabilir. Bu durumda, azaltma işleminin uygulandığı her bağımsız değişken, çeşitli temel değerler içerebilen böyle bir veri türü tarafından açıklanan bir öğedir.

Çakışan veri türlerine gönderme arabelleklerinde izin verilir, ancak alma arabelleklerinde izin verilmez. Alma arabelleklerindeki çakışan veri türleri öngörülemeyen sonuçlar verebilir ve hata olarak kabul edilir.

comm parametresi bir intracommunicator'a başvuruda bulunursa, MPI_Reduce işlevi gruptaki her işlemin giriş arabelleğinde belirtilen öğeleri birleştirir ve belirtilen işlemi kullanarak kök işlemin çıkış arabelleğindeki birleşik değeri döndürür.

Giriş arabelleği ve çıkış arabelleği aynı veri türünde aynı sayıda öğeye sahiptir. Count, datatype, op, root ve comm parametreleri için aynı değerleri kullanarak işlevi tüm grup üyelerinde çağırın. Bu uygulama, tüm işlemlerin aynı türdeki öğelerle aynı uzunlukta giriş arabellekleri ve çıkış arabellekleri sağlamasını sağlar.

Her işlem bir öğe veya öğe dizisi sağlayabilir; bu durumda işlem, dizinin her girdisinde öğe başına yürütülür. Örneğin, işlem MPI_MAX ve gönderme arabelleği kayan noktalı sayı olan iki öğe içeriyorsa, recvbuf(1) genel üst sınırını (sendbuf(1)) alır ve recvbuf(2) genel üst sınırını (sendbuf(2))alır.

comm parametresi bir intercommunicator'a başvuruda bulunursa, çağrı ara iletişim aracındaki tüm işlemleri içerir, ancak kök işlemi tanımlayan bir grup olan A grubuyla birlikte kullanılır. Diğer gruptaki B grubundaki tüm işlemler, kök parametrede aynı değeri, yani A grubundaki kök işlemin sıralamasını ayarlar. Kök işlem, kök parametresinde MPI_ROOT değerini ayarlar. A grubundaki diğer tüm işlemler kök parametrede MPI_PROC_NULL değeri ayarlar. Yalnızca gönderme arabelleği parametreleri B grubu işlemlerinde önemlidir ve kök işlemde yalnızca alma arabellek parametreleri önemlidir.

Gereksinimler

Ürün

HPC Pack 2012 MS-MPI Yeniden Dağıtılabilir Paketi, HPC Pack 2008 R2 MS-MPI Yeniden Dağıtılabilir Paketi, HPC Pack 2008 MS-MPI Yeniden Dağıtılabilir Paketi veya HPC Pack 2008 İstemci Yardımcı Programları

Üst bilgi

Mpi.h; Mpif.h

Kitaplık

Msmpi.lib

DLL

Msmpi.dll

Ayrıca bkz.

MPI Kolektif İşlevleri

MPI_Datatype

MPI_Gather

MPI_Op

MPI_Bcast