Bagikan melalui


MPI_Alltoallv (Fungsi MPI_Alltoallv)

Mengumpulkan data dari dan menyebarkan data ke semua anggota grup. Fungsi MPI_Alltoallv menambah fleksibilitas ke fungsi MPI_Alltoall dengan memungkinkan jumlah data yang bervariasi dari setiap proses.

Sintaks

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
);

Parameter

  • sendbuf [in]
    Penunjuk ke data yang akan dikirim ke semua proses dalam grup. Jumlah dan jenis data elemen dalam buffer ditentukan dalam parameter sendcount dan sendtype . Setiap elemen dalam buffer sesuai dengan proses dalam grup.

    Jika parameter comm mereferensikan intrakomunikator, Anda dapat menentukan opsi di tempat dengan menentukan MPI_IN_PLACE di semua proses. Parameter sendcount, sdispls , dan sendtype diabaikan. Setiap proses memasukkan data dalam elemen buffer penerima yang sesuai.

    Data yang dikirim dan diterima harus memiliki peta jenis yang sama seperti yang ditentukan oleh array recvcounts dan parameter recvtype . Data dibaca dari lokasi buffer penerima yang ditentukan oleh parameter rdispls .

  • sendcounts [in]
    Jumlah elemen data yang dikirim proses ini dalam buffer yang ditentukan dalam parameter sendbuf . Jika elemen dalamsendcount adalah nol, bagian data dari pesan dari proses tersebut kosong.

  • sdispls [in]
    Lokasi, relatif terhadap parameter sendbuf , dari data untuk setiap proses komunikator.

    Entri j menentukan perpindahan relatif terhadap parameter sendbuf untuk mengambil data keluar yang ditujukan untuk proses j.

  • sendtype
    Jenis data MPI dari elemen dalam buffer kirim.

  • recvbuf [out]
    Penunjuk ke buffer yang berisi data yang diterima dari setiap proses. Jumlah dan jenis data elemen dalam buffer ditentukan dalam parameter recvcount dan recvtype .

  • recvcounts [in]
    Jumlah elemen data dari setiap proses komunikator dalam buffer penerima.

  • rdispls [in]
    Lokasi, relatif terhadap parameter recvbuf , data dari setiap proses komunikator.

    Dalam array parameter recvbuf, recvcounts, dan rdispls , elemen nth dari setiap array mengacu pada data yang diterima dari proses komunikator ke n.

  • recvtype
    Jenis data MPI dari setiap elemen dalam buffer.

  • Comm
    Menentukan handel MPI_Comm communicator.

Nilai kembali

Mengembalikan MPI_SUCCESS pada keberhasilan. Jika tidak, nilai yang dikembalikan adalah kode kesalahan.

Di Fortran, nilai yang dikembalikan disimpan dalam parameter IERROR .

Fortran

    MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
                COMM, IERROR)
        <type> SENDBUF(*), R.ECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR

Keterangan

Jenis tanda tangan yang ditentukan oleh parameter sendcount, dan sendtype untuk proses harus sama dengan jenis tanda tangan yang ditentukan oleh parameter recvcount, dan recvtype dari proses penerimaan. Oleh karena itu, jumlah data yang dikirim harus sama dengan jumlah data yang diterima antara sepasang proses apa pun. Peta jenis yang berbeda antara pengirim dan penerima masih diizinkan.

Semua parameter signifikan pada semua proses. Parameter comm harus identik pada semua proses.

Jika parameter comm mereferensikan intracommunicator, maka blok jth yang dikirim dari proses i diterima oleh proses j dan ditempatkan di blok ith dari buffer penerima. Blok-blok ini tidak harus semuanya memiliki ukuran yang sama.

Hasil pemanggilan fungsi MPI_Alltoallv seolah-olah setiap proses mengirim pesan ke setiap proses lain dengan, MPI_Send(sendbuf + sdispls[i]*extent(sendtype), sendcounts[i], sendtype, I, …), dan menerima pesan dari setiap proses lain dengan panggilan ke MPI_Recv(recvbuf + rdispls[i]*extent(recvtype), recvcounts[i], recvtype, I, …).

Menentukan opsi di tempat menunjukkan bahwa jumlah dan jenis data yang sama dikirim dan diterima di antara dua proses dalam grup komunikator. Pasangan proses yang berbeda dapat bertukar jumlah data yang berbeda. Pengguna harus memastikan bahwa recvcounts[j] dan recvtype pada proses i cocok dengan recvcounts[i] dan recvtype pada proses j. Pertukaran simetris ini dapat berguna dalam aplikasi di mana data yang akan dikirim tidak digunakan oleh proses pengiriman setelah panggilan fungsi MPI_Alltoallv .

Jika parameter comm mereferensikan interkomunikator, maka hasilnya adalah seolah-olah setiap proses dalam grup A mengirim pesan ke setiap proses di grup B, dan sebaliknya. J thmengirim buffer proses i di grup A harus konsisten dengan i th menerima buffer proses j di grup B, dan sebaliknya.

Persyaratan

Produk

Paket HPC Pack 2012 MS-MPI Redistributable, HpC Pack 2008 R2 MS-MPI Redistributable Package, HPC Pack 2008 MS-MPI Redistributable Package atau HPC Pack 2008 Client Utilities

Header

Mpi.h; Mpif.h

Pustaka

Msmpi.lib

DLL

Msmpi.dll

Lihat juga

Fungsi Kolektif MPI

MPI_Datatype

MPI_Alltoall

MPI_Gather

MPI_Scatter

MPI_Send

MPI_Recv