Dalam tutorial sebelumnya, kita telah belajar tentang penggunaan MPI_Scatter dan MPI_Gather untuk melakukan komunikasi many-to-one dan one-to-many. Namun, dalam beberapa kasus, kita perlu melakukan komunikasi many-to-many, yaitu mengirimkan banyak elemen ke banyak proses. Salah satu cara untuk melakukannya adalah dengan menggunakan MPI_Allgather.
MPI_Allgather mirip dengan MPI_Gather, tetapi tidak ada proses root. Sebaliknya, data dari setiap proses akan dikumpulkan ke semua proses. Berikut adalah contoh penggunaan MPI_Allgather:
// Gather all partial averages down to all the processes
float *sub_avgs = (float *)malloc(sizeof(float) * world_size);
MPI_Allgather(&sub_avg, 1, MPI_FLOAT, sub_avgs, 1, MPI_FLOAT,
MPI_COMM_WORLD);
// Compute the total average of all numbers.
float avg = compute_avg(sub_avgs, world_size);
Dalam kode di atas, proses root akan mengumpulkan rata-rata dari setiap proses ke semua proses. Rata-rata yang dihitung kemudian akan ditampilkan oleh semua proses.
Contoh Keluaran
Contoh keluaran program all_avg.c adalah sebagai berikut:
>>> ./run.py all_avg
/home/kendall/bin/mpirun -n 4 ./all_avg 100
Avg of all elements from proc 1 is 0.479736
Avg of all elements from proc 3 is 0.479736
Avg of all elements from proc 0 is 0.479736
Avg of all elements from proc 2 is 0.479736
Sebagai contoh, program all_avg.c akan menampilkan rata-rata dari setiap proses ke layar.
Penggunaan MPI_Allgather dalam Penghitungan Rata-Rata
Dalam contoh di atas, kita menggunakan MPI_Allgather untuk mengumpulkan rata-rata dari setiap proses ke semua proses. Dengan demikian, kita dapat melihat bagaimana rata-rata dihitung oleh masing-masing proses dan kemudian ditampilkan oleh semua proses.
Referensi
- Wes Kendall, "MPI Tutorials"
- https://github.com/weskendall/MPI-Tutorials
Note: This article has been translated from English to Indonesian.