Pemrograman parallel computing menggunakan Message Passing Interface (MPI) sangat populer dalam beberapa tahun terakhir. Salah satu fitur yang paling penting dalam MPI adalah scatter dan gather, yang digunakan untuk membagi data antara proses-proses yang berbeda.
Scatter dan Gather
Scatter dan gather adalah dua fungsi utama dalam MPI yang digunakan untuk membagi data dari proses induk ke proses-proses anak, serta sebaliknya. Scatter digunakan untuk membagi data dari proses induk ke proses-proses anak, sedangkan gather digunakan untuk mengumpulkan data dari proses-proses anak kembali ke proses induk.
Dalam contoh di bawah ini, kita akan menggunakan MPI scatter dan gather untuk membagi array 4-element antara dua proses. Proses pertama (rank 0) akan menjadi proses induk, sementara proses kedua (rank 1) akan menjadi proses anak.
Contoh
#include <mpi.h>
#include <stdio.h>
int main(int argc, char **argv) {
int size, rank;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
int globaldata[4] = {1, 2, 3, 4}; /* array 4-element */
int localdata; /* variabel lokal untuk menyimpan data */
if (rank == 0) {
printf("Proses %d memiliki data: ", rank);
for (int i=0; i<4; i++)
printf("%d ", globaldata[i]);
printf("\n");
}
MPI_Scatter(globaldata, 1, MPI_INT, &localdata, 1, MPI_INT, 0, MPI_COMM_WORLD);
printf("Proses %d memiliki data %d\n", rank, localdata);
localdata = 5;
printf("Proses %d sekarang memiliki %d\n", rank, localdata);
MPI_Gather(&localdata, 1, MPI_INT, globaldata, 1, MPI_INT, 0, MPI_COMM_WORLD);
if (rank == 0) {
printf("Proses %d memiliki data: ", rank);
for (int i=0; i<4; i++)
printf("%d ", globaldata[i]);
printf("\n");
}
MPI_Finalize();
return 0;
}
Penjelasan
Dalam contoh di atas, kita menggunakan MPI scatter dan gather untuk membagi array 4-element antara dua proses. Proses pertama (rank 0) akan menjadi proses induk, sementara proses kedua (rank 1) akan menjadi proses anak.
Pertama-tama, kita definisikan array 4-element globaldata
dan variabel lokal localdata
. Kemudian, kita gunakan MPI scatter untuk membagi data dari proses induk ke proses anak. Proses anak akan menerima satu elemen dari array globaldata
dan menyimpannya dalam variabel localdata
.
Setelah itu, kita gunakan MPI gather untuk mengumpulkan data dari proses anak kembali ke proses induk. Proses induk akan menerima data dari proses anak dan menampilkan hasilnya.
Kelebihan dan Kekurangan
MPI scatter dan gather memiliki beberapa kelebihan, seperti:
- Dapat digunakan untuk membagi data antara proses-proses yang berbeda
- Dapat digunakan untuk mengumpulkan data dari proses-proses yang berbeda
Namun, MPI scatter dan gather juga memiliki beberapa kekurangan, seperti:
- Bisa memerlukan waktu yang lama untuk melakukan operasi scatter dan gather
- Bisa menyulitkan penggunaan dalam kasus-kasus tertentu
Pembelajaran
Dalam pembelajaran ini, kita telah belajar bagaimana menggunakan MPI scatter dan gather untuk membagi data antara proses-proses yang berbeda. Kita juga telah melihat beberapa kelebihan dan kekurangan dari fungsi-fungsi tersebut. Dengan demikian, kita dapat menggunakan MPI scatter dan gather dengan lebih baik dalam proyek-proyek parallel computing yang akan datang.