Dalam sistem berbasis pemrosesan sebaran, penggunaan fungsi MPI_Scatter
dapat membantu dalam mengirimkan data dari proses root ke semua proses lain dalam grup komunikasi. Fungsi ini digunakan sebagai lawan dari fungsi MPI_Gather
, yang memungkinkan pengguna untuk mengumpulkan data dari semua proses lain dan mengirimkannya ke proses root.
Deskripsi
Fungsi MPI_Scatter
bekerja dengan cara sebagai berikut: proses root akan mengirimkan data ke semua proses lain dalam grup komunikasi, sedangkan setiap proses lain akan menerima data yang dikirim oleh proses root. Dalam kasus non-root, fungsi ini tidak menggunakan buffer pengiriman.
Parameter
Fungsi MPI_Scatter
memiliki beberapa parameter sebagai berikut:
recvtype
: Tipe data buffer penerima (handle).root
: Rank proses pengiriman (integer).comm
: Komunikator (handle).
Parameter Keluaran
Fungsi MPI_Scatter
juga memiliki beberapa parameter keluaran sebagai berikut:
recvbuf
: Alamat buffer penerima (choice).request
: Permintaan (handle, hanya untuk non-blocking).IERROR
: Fortran only: Status error (integer).
Contoh
Contoh penggunaan fungsi MPI_Scatter
adalah sebagai berikut:
int gsize;
int *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);
Fungsi ini digunakan untuk mengirimkan set 100 integer dari proses root ke semua proses lain dalam grup komunikasi.
Penggunaan Opsi In-place
Dalam kasus penggunaan communicator yang bersifat intracommunicator, Anda dapat melakukan operasi scatter dalam tempat (output buffer digunakan sebagai input buffer). Dalam hal ini, Anda harus menggunakan variabel MPI_IN_PLACE
sebagai nilai dari proses root recvbuf
. Dalam kasus ini, recvcount
dan recvtype
akan diabaikan, dan proses root tidak akan mengirimkan data ke dirinya sendiri.
Penggunaan Dalam Komunikator Inter
Dalam kasus penggunaan komunikator yang bersifat inter-communicator, proses root dalam grup pertama akan mengirimkan data ke semua proses lain dalam grup kedua. Proses root dalam grup pertama menggunakan nilai MPI_ROOT
sebagai nilai dari argumen root
, sedangkan proses lain dalam grup pertama menggunakan nilai MPI_PROC_NULL
sebagai nilai dari argumen root
. Proses lain dalam grup kedua menggunakan rank proses root dalam grup pertama sebagai nilai dari argamen root
.
Kesalahan
Fungsi MPI_Scatter
seperti fungsi MPI lainnya juga memiliki kemungkinan terjadi kesalahan. Pada umumnya, semua fungsi MPI akan mengembalikan nilai error; C routines dengan nilai return, Fortran routines dalam argumen terakhir, dan C++ functions tidak akan mengembalikan nilai error. Jika handler error default dipertahankan sebagai MPI::ERRORS_THROW_EXCEPTIONS
, maka pada saat terjadi kesalahan, C++ exception mechanism akan digunakan untuk melemparkan objek MPI::Exception
.