Penggunaan MPI_Scatter

Penggunaan MPI_Scatter

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.

Leave a comment