MPI Scatter: One Process to All Other Processes in a Communicator

MPI Scatter: One Process to All Other Processes in a Communicator

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.