Scatter

Scatter

Scatter adalah salah satu rutinitas MPI yang digunakan untuk melakukan komunikasi antara proses. Rutinitas ini berfungsi mengirim data dari proses root ke semua proses lain dalam sebuah komunitas.

Rutinitas Scatter dapat dijabarkan sebagai berikut: ketika sebuah aplikasi menggunakan MPI, maka data akan di bagi menjadi beberapa bagian dan kemudian dikirimkan ke proses lain. Pada saat itu, proses yang menerima data tersebut akan mengumpulkan semua bagian data dan menggabungkannya menjadi sebuah data yang utuh.

Rutinitas Scatter dapat digunakan dalam berbagai situasi, seperti dalam pengolahan data paralel atau penggunaan aplikasi yang memerlukan komunikasi antara proses. Salah satu contoh penggunaan rutinitas Scatter adalah dalam pengolahan data besar yang dibagi menjadi beberapa bagian dan kemudian dikirimkan ke proses lain untuk diproses.

MPI_Scatter

Rutinitas Scatter dalam MPI dapat dijabarkan sebagai berikut:

  • MPI_SCATTER: Rutinitas ini mengirim data dari proses root ke semua proses lain dalam sebuah komunitas.
  • void *sendbuf: Adalah pointer ke buffer yang akan dikirimkan.
  • int sendcount: Adalah jumlah data yang akan dikirimkan.
  • MPI_Datatype sendtype: Adalah tipe data yang akan dikirimkan.
  • void *recvbuf: Adalah pointer ke buffer yang akan menerima data.
  • int recvcount: Adalah jumlah data yang akan diterima.
  • MPI_Datatype recvtype: Adalah tipe data yang akan diterima.
  • int root: Adalah rank proses yang akan mengirimkan data.
  • MPI_Comm comm: Adalah komunitas yang akan digunakan.

Contoh

Berikut adalah contoh penggunaan rutinitas Scatter dalam bahasa Fortran dan C:

Contoh 1: MPI_Scatter (Fortran)

Program berikut menggunakan rutinitas Scatter untuk mengirimkan data dari proses 0 ke semua proses lain:

PROGRAM scatter

INCLUDE 'mpif.h'

INTEGER isend(3)
INTEGER irecv

CALL MPI_INIT(ierr)
CALL MPI_COMM_RANK(MPI_COMM_WORLD, myrank, ierr)

IF (myrank==0) THEN
 DO i=1,nprocs
 isend(i)=i
 ENDDO
ENDIF

CALL MPI_SCATTER(isend, 1, MPI_INTEGER, irecv, 1, MPI_INTEGER, 0, &
 MPI_COMM_WORLD, ierr)
PRINT *,' irecv =' ,irecv
CALL MPI_FINALIZE(ierr)

END

Contoh 2: MPI_Scatter (C)

Program berikut menggunakan rutinitas Scatter untuk mengirimkan data dari proses 0 ke semua proses lain:

#include <mpi.h>
#include <stdio.h>

void main(int argc, char *argv[]) {
 int i, myrank;
 int isend[3], irecv;

 MPI_Init(&argc, &argv);
 MPI_Comm_rank(MPI_COMM_WORLD, &myrank);

 for(i=0; i<nprocs; i++) isend[i]=i+1;

 MPI_Scatter(isend, 1, MPI_INTEGER, &irecv, 1, MPI_INTEGER, 0, MPI_COMM_WORLD);

 printf(" %d: irecv = %d\n", myrank, irecv);
 MPI_Finalize();
}

Dalam program di atas, rutinitas Scatter digunakan untuk mengirimkan data dari proses 0 ke semua proses lain dalam sebuah komunitas. Data yang dikirimkan adalah array integer yang berisi nilai 1-3, dan kemudian dikumpulkan oleh proses lain untuk diproses lebih lanjut.