Bagikan melalui


fungsi MPI_Alltoall

Mengumpulkan data dari dan menyebarkan data ke semua anggota grup. MPI_Alltoall adalah ekstensi dari fungsi MPI_Allgather. Setiap proses mengirimkan data yang berbeda ke masing-masing penerima. Blok jth yang dikirim dari proses i diterima oleh proses j dan ditempatkan di blok ith dari penyangga penerima.

Sintaks

int MPIAPI MPI_Alltoall(
  _In_  void         *sendbuf,
        int          sendcount,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        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 .

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

  • sendcount
    Jumlah elemen dalam buffer yang ditentukan dalam parameter sendbuf . Jika sendcount adalah nol, bagian data dari pesan kosong.

  • 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 .

  • recvcount
    Jumlah elemen dalam penyangga penerima. Jika jumlahnya nol, bagian data dari pesan kosong.

  • recvtype
    Jenis data MPI dari elemen dalam buffer penerima.

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

Keterangan

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

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 . 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.

Jika parameter comm mereferensikan intrakomunikator, hasil panggilan ke MPI_ALLGATHER(...) adalah seolah-olah setiap proses menjalankan kirim ke setiap proses termasuk dirinya sendiri dengan menggunakan MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …), dan menerima dari setiap proses lain dengan menggunakan MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …).

Jika parameter comm mereferensikan interkomunikator, maka hasilnya 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.

Jumlah item yang dikirim oleh proses di grup A, tidak harus sama dengan jumlah item yang dikirim oleh proses dalam grup B. Secara khusus, Anda hanya dapat memindahkan data dalam satu arah dengan menentukan sendcount == 0 untuk komunikasi ke arah terbalik.

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_Allgather

MPI_Send

MPI_Recv