Penggunaan MPI_Allgather untuk Menghitung Rata-Rata dalam Proses Paralel

Penggunaan MPI_Allgather untuk Menghitung Rata-Rata dalam Proses Paralel

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

Note: This article has been translated from English to Indonesian.

Leave a comment