Aracılığıyla paylaş


MPI_Alltoallv işlevi

Veri toplar ve bir grubun tüm üyelerine dağıtılır. MPI_Alltoallv işlevi, her işlemden değişen veri sayısına izin vererek MPI_Alltoall işlevine esneklik sağlar.

Söz dizimi

int MPIAPI MPI_Alltoallv(
  _In_  void         *sendbuf,
  _In_  int          *sendcounts,
  _In_  int          *sdispls,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
  _In_  int          *recvcounts,
  _In_  int          *rdispls,
        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. Arabellekteki her öğe gruptaki bir işleme karşılık gelir.

    comm parametresi bir intracommunicator'a başvuruda bulunursa, tüm işlemlerde MPI_IN_PLACE belirterek yerinde bir seçenek belirtebilirsiniz. sendcount, sdispls ve sendtype parametreleri yoksayılır. Her işlem ilgili alma arabelleği öğesine veri girer.

    Gönderilen ve alınan veriler recvcounts dizisi ve recvtype parametresi tarafından belirtilen tür eşlemesine sahip olmalıdır. Veriler , rdispls parametresi tarafından belirtilen alma arabelleğinin konumlarından okunur.

  • sendcounts [in]
    Bu işlemin sendbuf parametresinde belirtilen arabellekte gönderdiği veri öğelerinin sayısı. sendcount içindeki bir öğe sıfırsa, bu işlemdeki iletinin veri bölümü boş olur.

  • sdispls [in]
    Her communicator işlemi için verilerin sendbuf parametresine göre konumu.

    J girişi,j işlemini hedefleyen giden verilerin alındığı sendbuf parametresine göre yer değiştirme işlemini belirtir.

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

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

  • recvcounts [in]
    Alma arabelleğindeki her communicator işleminden veri öğelerinin sayısı.

  • rdispls [in]
    Her communicator işleminden verilerin recvbuf parametresine göre konumu.

    recvbuf, recvcounts ve rdispls parametre dizilerinde, her dizinin n. öğesi n. communicator işleminden alınan verilere başvurur.

  • recvtype
    Arabellekteki her öğenin MPI veri türü.

  • Comm
    MPI_Comm communicator tutamacını belirtir.

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

Sendcount tarafından belirtilen tür imzası ve bir işlemin sendtype parametreleri, recvcount tarafından belirtilen tür imzasına ve alma işleminin recvtype parametrelerine 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ındaki ayrı tür eşlemelerine hala izin verilir.

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

comm parametresi bir intracommunicator'a başvuruda bulunursa, i işleminden gönderilen j. blok j işlemi tarafından alınır ve alma arabelleğinin i. bloğuna yerleştirilir. Bu blokların tümünün aynı boyutta olması gerekmez.

MPI_Alltoallv işlevini çağırmanın sonucu, her işlem ile MPI_Send(sendbuf + sdispls[i]*extent(sendtype), sendcounts[i], sendtype, I, …)diğer tüm işlemlere bir ileti göndermiş ve çağrısıyla diğer tüm işlemlerden bir MPI_Recv(recvbuf + rdispls[i]*extent(recvtype), recvcounts[i], recvtype, I, …)ileti almış gibi olur.

Yerinde seçeneğinin belirtilmesi, iletişimci grubundaki iki işlem arasında aynı miktarda ve türde verilerin gönderildiğini ve alındığını gösterir. Farklı işlem çiftleri farklı miktarlarda veri alışverişi yapabilir. Kullanıcıların recvcounts[j] ve recvtype on process i match recvcounts[i] ve recvtype on process j değerlerinin eşleştiğinden emin olmaları gerekir. Bu simetrik değişim, gönderilecek verilerin MPI_Alltoallv işlev çağrısından sonra gönderme işlemi tarafından kullanılmadığı uygulamalarda yararlı olabilir.

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şlemin j. gönderme arabelleği, B grubundaki j işleminin i. alma arabelleğiyle tutarlı olmalıdır ve tam tersi de geçerlidir.

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_Alltoall

MPI_Gather

MPI_Scatter

MPI_Send

MPI_Recv