Penggunaan MPI_Scatter
MPI_Scatter adalah operasi yang berlawanan dengan MPI_Gather. Operasi ini mirip seperti jika proses induk melakukan send operation sebanyak jumlah proces sesuai, dan masing-masing proses melakukan receive operation.
Deskripsi:
MPI_Scatter adalah implementasi dari operasi invers MPI_Gather. Proses induk melakukan send operation ke masing-masing proses dalam group, sedangkan setiap proses melakukan receive operation. Dalam contoh lain, proses induk mengirimkan pesan ke semua proses dengan menggunakan fungsi MPI_Send, lalu pesan tersebut dibagi menjadi beberapa bagian yang sama ukuran dan dikirimkan ke masing-masing proses dalam group.
Argumen:
recvbuf: Alamat receive buffer (pilihan)request: Request (handle, hanya berlaku untuk non-blocking only)IERROR: Fortran only: Error status (integer)
Spesifikasi:
- Jika proses induk, semua argumen fungsi adalah signifikan.
- Jika proses lainnya, hanya argumen
recvbuf,recvcount,recvtype,root, dancommyang signifikan. - Argumen
rootdancommharus memiliki nilai yang sama di semua proses.
Contoh:
Dalam contoh berikut, scatter set of 100 ints dari proses induk ke masing-masing proses dalam group.
int gsize, *sendbuf;
int root, rbuf[100];
...
MPI_Comm_size(comm, &gsize);
sendbuf = (int *)malloc(gsize*100*sizeof(int));
...
MPI_Scatter(sendbuf, 100, MPI_INT, rbuf, 100,
MPI_INT, root, comm);
Penggunaan In-place Option
Jika komunikator adalah intracommunicator, Anda dapat melakukan operasi scatter in-place (output buffer digunakan sebagai input buffer). Gunakan variabel MPI_IN_PLACE sebagai nilai argumen root process recvbuf. Dalam kasus ini, argumen recvcount dan recvtype diabaikan, dan proses induk tidak mengirimkan data ke diri sendiri.
Penggunaan saat Communicator adalah Inter-communicator
Jika komunikator adalah inter-communicator, proses induk dalam group pertama mengirimkan data ke semua proses dalam group kedua. Proses induk dalam group pertama menggunakan nilai MPI_ROOT sebagai nilai argumen root, sementara proses lainnya menggunakan nilai MPI_PROC_NULL. Semua proses dalam group kedua menggunakan rank proses induk sebagai nilai argamen root.
Kesalahan
Hampir semua fungsi MPI kembali nilai error; fungsi C sebagai nilai fungsi dan fungsi Fortran di argument terakhir. Fungsi C++ tidak mengembalikan kesalahan.
Sebelum nilai error dikembalikan, handler error saat ini dipanggil. Dengan default, handler error ini akan menghentikan MPI job, kecuali untuk fungsi I/O yang menyebabkan kesalahan. Handler error dapat diubah dengan MPI_Comm_set_errhandler, dan handler error yang predefined MPI_ERRORS_RETURN dapat digunakan untuk membuat nilai error dikembalikan.