Aracılığıyla paylaş


MPI_Alltoall işlevi

Veri toplar ve bir grubun tüm üyelerine dağıtılır. MPI_Alltoall, MPI_Allgather işlevinin bir uzantısıdır. Her işlem, alıcıların her birine ayrı veriler gönderir. i işleminden gönderilen j. blok j işlemi tarafından alınır ve alma arabelleğinin i. bloğuna yerleştirilir.

Söz dizimi

int MPIAPI MPI_Alltoall(
  _In_  void         *sendbuf,
        int          sendcount,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        MPI_Datatype recvtype,
        MPI_Comm     comm
);

Parametreler

  • sendbuf [in]
    Gruptaki tüm işlemlere gönderilecek verilerin işaretçisi. Arabellekteki öğelerin sayısı ve veri türü sendcount ve sendtype parametrelerinde belirtilir.

    comm parametresi bir intracommunicator'a başvuruda bulunursa, tüm işlemlerde MPI_IN_PLACE belirterek yerinde bir seçenek 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.

  • sendcount
    Sendbuf parametresinde belirtilen arabellekteki öğelerin sayısı. Sendcount sıfırsa, iletinin veri bölümü boş olur.

  • sendtype
    Gönderme arabelleğindeki öğelerin MPI veri türü.

  • recvbuf [out]
    Her işlemden alınan verileri içeren bir arabelleğin işaretçisi. Arabellekteki öğelerin sayısı ve veri türü recvcount ve recvtype parametrelerinde belirtilir.

  • recvcount
    Alma arabelleğindeki öğelerin sayısı. Sayı sıfırsa, iletinin veri bölümü boş olur.

  • recvtype
    Alma arabelleğindeki öğelerin MPI veri türü.

  • 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_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
                COMM, IERROR)
        <type> SENDBUF(*), R.ECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR

Açıklamalar

Tüm parametreler tüm işlemlerde önemlidir. comm parametresi tüm işlemlerde aynı olmalıdır.

Sendcount tarafından belirtilen tür imzası ve bir işlemin sendtype parametreleri, recvcount ve recvtype parametreleri tarafından belirtilen tür imzasına eşit olmalıdır. Bu nedenle, gönderilen veri miktarı herhangi bir işlem çifti arasında alınan veri miktarına eşit olmalıdır. Gönderen ve alıcı arasında ayrı tür eşlemelerine hala izin verilir.

comm parametresi bir intracommunicator'a MPI_ALLGATHER(...) başvuruda bulunursa, çağrısının sonucu, her işlemin kullanarak kendisi MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)de dahil olmak üzere her işleme bir gönderme yürütmesi ve kullanarak MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …)diğer tüm işlemlerden alınmasıdır.

comm parametresi bir intercommunicator'a başvuruyorsa, sonuç A grubundaki her işlem B grubundaki her işleme bir ileti gönderir ve tam tersi olur. A grubundaki i işleminin j. gönderme arabelleği, B grubundaki j işleminin i. alma arabelleğiyle tutarlı olmalıdır ve tam tersi de geçerlidir.

A grubundaki işlemler tarafından gönderilen öğelerin sayısı, B grubundaki işlemler tarafından gönderilen öğe sayısına eşit olmak zorunda değildir. Özellikle, ters yönde iletişim için sendcount == 0 belirterek verileri yalnızca bir yönde taşıyabilirsiniz.

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_Allgather

MPI_Send

MPI_Recv