MPI_Reduce (Fungsi MPI_Reduce)
Melakukan operasi pengurangan global di semua anggota grup. Anda dapat menentukan operasi matematika atau logis yang telah ditentukan sebelumnya atau operasi yang ditentukan aplikasi.
Sintaks
int MPIAPI MPI_Reduce(
_In_ void *sendbuf,
_Out_opt_ void *recvbuf,
int count,
MPI_Datatype datatype,
MPI_Op op,
int root,
MPI_Comm comm
);
Parameter
sendbuf [in]
Handel ke buffer yang berisi data yang akan dikirim ke proses root.Jika parameter comm mereferensikan intracommunicator, 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 nth mengirim data ke elemen nth dari buffer penerima. Proses root mengambil data inputnya dari elemen buffer penerima yang sesuai dan menggantinya dengan data output.
recvbuf [keluar, opsional]
Handel ke buffer untuk menerima hasil operasi pengurangan. Parameter ini hanya signifikan pada proses root.hitung
Jumlah elemen yang akan dikirim dari proses ini.Datatype
Jenis data dari setiap elemen dalam buffer. Parameter ini harus kompatibel dengan operasi seperti yang ditentukan dalam parameter op .Op
Operasi pengurangan global untuk dilakukan. Handel dapat menunjukkan operasi bawaan atau yang ditentukan aplikasi. Untuk daftar operasi yang telah ditentukan sebelumnya, lihat topik MPI_Op .Akar
Peringkat proses penerimaan dalam komunikator yang ditentukan.
Mengembalikan nilai
Mengembalikan MPI_SUCCESS pada keberhasilan. Jika tidak, nilai yang dikembalikan adalah kode kesalahan.
Di Fortran, nilai pengembalian disimpan dalam parameter IERROR .
Fortran
MPI_REDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER COUNT, DATATYPE, OP, ROOT, COMM, IERROR
Keterangan
Fungsi MPI_Reduce diimplementasikan dengan asumsi bahwa operasi yang ditentukan bersifat asosiatif. Semua operasi yang telah ditentukan dirancang agar asosiatif dan komutatif. Pengguna dapat menentukan operasi yang dirancang agar asosiatif, tetapi tidak komutatif. Urutan evaluasi default dari operasi pengurangan ditentukan oleh peringkat proses dalam grup. Namun, implementasinya dapat memanfaatkan associativity, atau associativity dan commutativity untuk mengubah urutan evaluasi. Proses ini dapat mengubah hasil pengurangan operasi yang tidak benar-benar asosiatif dan komutatif, seperti penambahan titik mengambang.
Beberapa aplikasi tidak dapat mengabaikan sifat non-asosiatif dari operasi floating-point atau mungkin menggunakan operasi yang ditentukan pengguna yang memerlukan urutan evaluasi khusus dan tidak dapat diperlakukan sebagai asosiatif. Dalam hal ini, Anda dapat menerapkan urutan evaluasi secara eksplisit. Misalnya, dalam kasus operasi yang memerlukan urutan evaluasi kiri-ke-kanan yang ketat, atau kanan-ke-kiri, Anda dapat menggunakan proses berikut:
- Kumpulkan semua operan pada satu proses, misalnya, dengan menggunakan fungsi MPI_Gather .
- Terapkan operasi pengurangan dalam urutan yang diperlukan, misalnya, dengan menggunakan fungsi MPI_Reduce_local .
- Jika diperlukan, siaran, atau sebarkan hasilnya ke proses lain.
Catatan
Dimungkinkan untuk menyediakan operasi yang ditentukan pengguna yang berbeda ke fungsi MPI_Reduce di setiap proses. Fungsi ini tidak menentukan operasi mana yang digunakan pada operand mana dalam kasus ini. Anda tidak dapat membuat asumsi tentang bagaimana fungsi MPI_Reduce diimplementasikan. Paling aman untuk menentukan operasi yang sama di setiap proses.
Operator yang ditentukan pengguna dapat beroperasi pada jenis data umum dan turunan. Dalam hal ini, setiap argumen yang diterapkan operasi pengurangan adalah salah satu elemen yang dijelaskan oleh jenis data seperti itu, yang dapat berisi beberapa nilai dasar.
Jenis data yang tumpang tindih diizinkan dalam buffer pengiriman, tetapi tidak dalam menerima buffer. Jenis data yang tumpang tindih dalam buffer penerima dapat memberikan hasil yang tidak dapat diprediksi dan dianggap sebagai kesalahan.
Jika parameter comm mereferensikan intracommunicator, fungsi MPI_Reduce menggabungkan elemen seperti yang ditentukan dalam buffer input dari setiap proses dalam grup, dan dengan menggunakan operasi yang ditentukan, mengembalikan nilai gabungan dalam buffer output dari proses root.
Buffer input dan buffer output memiliki jumlah elemen yang sama dari jenis data yang sama. Panggil fungsi di semua anggota grup dengan menggunakan nilai yang sama untuk parameter hitungan, jenis data, op, root, dan comm . Praktik ini memastikan bahwa semua proses menyediakan buffer input dan buffer output dengan panjang yang sama, dengan elemen dengan jenis yang sama.
Setiap proses dapat menyediakan satu elemen, atau urutan elemen, dalam hal ini operasi dijalankan per elemen pada setiap entri urutan. Misalnya, jika operasi MPI_MAX dan buffer kirim berisi dua elemen yang merupakan angka floating point, maka recvbuf(1)
menerima maksimum (sendbuf(1))
global dan recvbuf(2)
menerima maksimum global .(sendbuf(2))
Jika parameter comm 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 . Hanya parameter buffer kirim yang signifikan dalam proses grup B dan hanya menerima parameter buffer yang signifikan dalam proses root.
Persyaratan
Produk |
Paket Redistributable HPC Pack 2012 MS-MPI, Paket HpC Pack 2008 R2 MS-MPI Redistributable, Paket HPC Pack 2008 MS-MPI Redistributable Package atau HpC Pack 2008 Client Utilities |
Header |
Mpi.h; Mpif.h |
Pustaka |
Msmpi.lib |
DLL |
Msmpi.dll |