Bagikan melalui


fungsi MPI_Alltoallw

Mengumpulkan data dari dan menyebarkan data ke semua anggota grup. Fungsi MPI_Alltoallw adalah bentuk pertukaran data lengkap yang paling umum dalam API ini. MPI_Alltoallw memungkinkan spesifikasi terpisah dari jumlah, perpindahan, dan jenis data.

Sintaks

int MPIAPI MPI_Alltoallw(
  _In_  void         *sendbuf,
  _In_  int          *sendcounts[],
  _In_  int          *sdispls[],
  _In_  MPI_Datatype sendtypes[],
  _Out_ void         *recvbuf,
  _In_  int          *recvcounts[],
  _In_  int          *rdispls[],
  _In_  MPI_Datatype recvtypes[],
        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 , dan dibaca dari lokasi buffer penerima seperti yang ditentukan oleh parameter rdispls .

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

  • sdispls [in]
    Lokasi, dalam byte, 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.

  • sendtypes [in]
    Jenis data untuk setiap elemen dalam buffer kirim. Entri j menentukan jenis data yang dikirim untuk memproses j dalam grup.

  • 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, dalam byte, relatif terhadap parameter recvbuf , data dari setiap proses komunikator. Entri i menentukan perpindahan relatif terhadap parameter recvbuf untuk menempatkan data masuk dari proses i.

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

  • recvtypes [in]
    Jenis data setiap elemen dalam buffer. Entri i menentukan jenis data yang diterima dari proses i.

  • Comm
    Pegangan MPI_Comm komunikator.

Menampilkan nilai

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

Di Fortran, nilai yang dikembalikan disimpan dalam parameter IERROR .

Fortran

    MPI_ALLTOALLW(SENDBUF, SENDCOUNT, SDISPLS, SENDTYPE, RECVBUF, RECVCOUNTS, RDISPLS, RECVTYPE,COMM, IERROR)
        <type> SENDBUF(*), R.ECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPES(*), SDISPLS(*), RECVCOUNTS(*), RDISPLS(*), RECVTYPE, COMM, IERROR

Keterangan

Penting

Untuk memungkinkan fleksibilitas maksimum, perpindahan blok dalam buffer kirim dan terima ditentukan dalam byte. 

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 ini tidak semua harus memiliki ukuran yang sama.

Jenis tanda tangan yang ditentukan oleh parameter sendcounts[j] dan sendtypes[j] untuk proses i harus sama dengan tanda tangan jenis yang terkait dengan recvcounts[i] dan recvtypes[i] pada proses j. 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.

Hasil panggilan ke fungsi MPI_Alltoallw seolah-olah setiap proses mengirim pesan ke setiap proses lain dengan MPI_Send(sendbuf+sdispls[i],sendcounts[i],sendtypes[i] ,i,...), dan menerima pesan dari setiap proses lain dengan panggilan ke MPI_Recv(recvbuf+rdispls[i],recvcounts[i],recvtypes[i] ,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.

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_Alltoallv

MPI_Gather

MPI_Scatter

MPI_Send

MPI_Recv