Bagikan melalui


MPI_Gatherv (Fungsi MPI_Gatherv)

Mengumpulkan data variabel dari semua anggota grup menjadi satu anggota. Fungsi MPI_Gatherv menambah fleksibilitas ke fungsi MPI_Gather dengan memungkinkan jumlah data yang bervariasi dari setiap proses.

Sintaks

int MPIAPI MPI_Gatherv(
  _In_      void         *sendbuf,
            int          sendcount,
            MPI_Datatype sendtype,
  _Out_opt_ void         *recvbuf,
  _In_opt_  int          *recvcounts[],
  _In_opt_  int          *displs[],
            MPI_Datatype recvtype,
            int          root,
            MPI_Comm     comm
);

Parameter

  • sendbuf [in]
    Handel ke buffer yang berisi data yang akan dikirim ke proses root.

    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. Data yang dikirim oleh proses akar diasumsikan berada di tempat yang benar di penyangga penerima.

  • sendcount
    Jumlah elemen dalam buffer kirim. Jika sendcount adalah nol, bagian data dari pesan kosong.

  • sendtype
    Jenis data setiap elemen dalam buffer.

  • recvbuf [keluar, opsional]
    Handel ke buffer pada proses root yang berisi data yang diterima dari setiap proses, termasuk data yang dikirim oleh proses root. Parameter ini hanya signifikan pada proses akar. Parameter recvbuf diabaikan untuk semua proses non-root.

  • recvcounts[] [in, opsional]
    Jumlah elemen yang diterima dari setiap proses. Setiap elemen dalam array sesuai dengan peringkat proses pengiriman. Jika jumlahnya nol, bagian data dari pesan kosong. Parameter ini hanya signifikan pada proses akar.

  • displs[] [in, opsional]
    Lokasi, relatif terhadap parameter recvbuf , data dari setiap proses komunikator. Data yang diterima dari proses j ditempatkan ke dalam buffer penerima elemen displs[j] offset proses akar dari penunjuk sendbuf .

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

    Parameter ini hanya signifikan pada proses akar.

  • recvtype
    Jenis data setiap elemen dalam buffer. Parameter ini hanya signifikan pada proses akar.

  • Akar
    Peringkat proses penerimaan dalam komunikator yang ditentukan.

  • 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_GATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*), RECVTYPE, ROOT, COMM, IERROR

Keterangan

Semua parameter fungsi signifikan pada proses root, hanya sendbuf, sendcount, sendtype, root, dan comm yang signifikan pada proses lain. Parameter root dan comm harus identik pada semua proses.

Umumnya, jenis data turunan diizinkan untuk parameter sendtype dan recvtype . Tanda tangan jenis seperti yang ditentukan oleh parameter sendtype dan recvtype pada setiap proses harus sama dengan tanda tangan jenis parameter recvcount dan sendcount pada proses root. Jumlah data yang dikirim harus sama dengan jumlah data yang diterima antara proses root dan setiap proses individu. Peta jenis yang berbeda antara pengirim dan penerima masih diizinkan.

Spesifikasi jumlah dan jenis tidak boleh menyebabkan lokasi apa pun di akar ditulis lebih dari satu kali. Panggilan seperti itu keliru.

Jika parameter comm mereferensikan intracommunicator, semua proses mengirim konten buffer pengirimannya ke proses root. Proses akar menerima pesan dan menyimpannya dalam urutan peringkat. Hasilnya adalah seolah-olah masing-masing n proses dalam grup yang dijalankan panggilan ke MPI_Send(sendbuf, sendcount, sendtype, root, …); dan akar telah menjalankan n panggilan ke MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, i, …). Nilai extent(recvtype) diperoleh dengan menggunakan fungsi MPI_Type_get_extent . Deskripsi alternatif dari fungsi ini adalah bahwa n pesan yang dikirim oleh proses dalam grup digabungkan dalam urutan peringkat, dan pesan yang dihasilkan diterima oleh akar seolah-olah dengan panggilan ke MPI_RECV(recvbuf, recvcountn, recvtype, ...). Buffer terima diabaikan untuk semua proses non-root.

Jika parameter komunikasi mereferensikan interkomunikator, maka panggilan melibatkan semua proses dalam interkomunikator, tetapi dengan satu grup, grup A, yang menentukan proses akar. Semua proses di grup lain, grup B, menetapkan nilai yang sama dalam parameter akar , yaitu peringkat proses akar di grup A. Proses akar menetapkan nilai MPI_ROOT dalam parameter akar . Semua proses lain dalam grup A mengatur nilai MPI_PROC_NULL dalam parameter akar . Data disiarkan dari proses akar ke semua proses dalam grup B. Parameter buffer proses di grup B harus konsisten dengan parameter buffer proses root.

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_Gather