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, dan comm yang signifikan.
  • Argumen root dan comm harus 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.