Ringkasan**
MPI_Scatter adalah salah satu rutin MPI yang paling umum digunakan dalam aplikasi-paralel. Rutin ini memungkinkan proses untuk mengirimkan data ke semua proses lain di dalam komunikator.
Rutin MPI_Scatter
memiliki enam argumen input dan satu argumen output. Argumen input meliputi:
sendbuf
: alamat buffer pengiriman (choice)sendcount
: jumlah elemen yang dikirimkan ke setiap proses (integer non-negatif)sendtype
: tipe data buffer pengiriman (handle)recvbuf
: alamat buffer penerimaan (choice)recvcount
: jumlah elemen di buffer penerimaan (integer non-negatif)recvtype
: tipe data buffer penerimaan (handle)root
: rank proses pengirim (integer)
Argumen output adalah recvbuf
, yang merupakan alamat buffer penerimaan.
Keamanan dan Keselamatan
Rutin ini aman dalam konteks threading, artinya beberapa thread dapat menggunakan rutin ini tanpa perlindungan lock. Namun, rutin ini tidak aman terhadap interrupt, sehingga dapat menyebabkan error jika digunakan dalam kondisi interrupt.
Pesan untuk Fortran
Semua rutin MPI dalam Fortran memiliki argumen ierr
di akhir, yang berfungsi sebagai return value dari rutin tersebut. Selain itu, semua objek MPI (seperti MPI_Datatype
, MPI_Comm
) adalah tipe integer dalam Fortran.
Error Handling
Semua rutin MPI kecuali MPI_Wtime
dan MPI_Wtick
mengembalikan error value; nilai ini diubah sebelum di- return. Sebelum itu, pemanggilan error handler default yang dapat menyebabkan program berhenti. Namun, pemanggilan error handler dapat diubah dengan menggunakan rutin MPI_Comm_set_errhandler
, MPI_File_set_errhandler
, dan MPI_Win_set_errhandler
.
Kode Error
Berikut adalah kode error yang dapat dihasilkan oleh rutin ini:
MPI_SUCCESS
: tidak ada error; rutin MPI selesai dengan sukses.MPI_ERR_BUFFER
: buffer pengiriman tidak valid, biasanya null buffer yang tidak valid.MPI_ERR_COMM
: komunikator tidak valid, biasanya null communicator yang tidak diperbolehkan.MPI_ERR_COUNT
: argumen count tidak valid, harus berupa integer non-negatif.MPI_ERR_TYPE
: argumen tipe data tidak valid, dapat terjadi jika menggunakan tipe data tidak dikommit.MPI_ERR_OTHER
: error lainnya; dapat digunakan untuk mendapatkan informasi lebih lanjut tentang kode error ini.
Contoh Penggunaan
Berikut adalah contoh penggunaan rutin MPI_Scatter
dalam bahasa C:
#include <mpi.h>
int main(int argc, char **argv) {
int myid, nprocs;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
// membuat buffer pengiriman dan penerimaan
int sendbuf[10];
int recvbuf[10];
// mengisi buffer pengiriman
for (int i = 0; i < 10; i++) {
sendbuf[i] = myid * 10 + i;
}
// mengirimkan data ke semua proses lain
MPI_Scatter(sendbuf, 10, MPI_INT, recvbuf, 1, MPI_INT, 0, MPI_COMM_WORLD);
// mencetak hasil penerimaan
for (int i = 0; i < 10; i++) {
printf("%d ", recvbuf[i]);
}
printf("\n");
MPI_Finalize();
return 0;
}
Rutin MPI_Scatter
sangat berguna dalam aplikasi-paralel yang memerlukan pengiriman data ke semua proses lain di dalam komunikator.