Contoh Pemrograman dengan Menggunakan MPI

Dari PaloDozen

Daftar isi

Sedikit Teori dan Istilah

To be added ...

Good Bye World Versi 1

Program berikut ini hanya melakukan display suatu string ke layar.

// goodbye1.c
#include <stdio.h>
#include <mpi.h>

main(int argc, char **argv)
{
    MPI_Init(&argc, &argv);
    
    printf("Good bye world\n");
    
    MPI_Finalize();
}

Kompilasi kode program tersebut dengan perintah:

mpicc -o goodbye1 goodbye1.c

Jalankan program ini dengan menggunakan perintah:

$ mpirun -np 2 goodbye1

dan akan ditampilkan di layar:

Good bye world
Good bye world

Keterangan

Sebelum suatu program menggunakan fungsi-fungsi yang ada pada MPI, program tersebut terlebih dahulu harus memanggil fungsi MPI_Init. Argumen yang digunakan adalah pointer dari argumen fungsi main(). Setelah selesai menggunakan MPI, program harus memanggil fungsi MPI_Finalize.

Good Bye World Versi 2

Program berikut akan mendemonstrasikan penggunakan sederhana dari dua fungsi MPI, yakni MPI_Comm_size dan MPI_Comm_rank.

// goodbye2.c
#include <stdio.h>
#include <mpi.h>

main(int argc, char **argv)
{
    int mynode, totalnodes;
    
    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &totalnodes);
    MPI_Comm_rank(MPI_COMM_WORLD, &mynode);
    
    printf("Good bye world from process %d of %d processes.\n", mynode, totalnodes);
    
    MPI_Finalize();
}

Setelah program berhasil dikompilasi dengan nama executable goodbye2, program dapat dijalankan di terminal:

$ mpirun -np 4 goodbye2
Good bye world from process 1 of 4 processes.
Good bye world from process 0 of 4 processes.
Good bye world from process 2 of 4 processes.
Good bye world from process 3 of 4 processes.

Keterangan

MPI_Comm_rank berfungsi untuk mengembalikan rank dari suatu proses sedangkan MPI_Comm_size berfungsi untuk mengembalikan jumlah proses yang ada dalam suatu komunikator. Sintaks dari kedua fungsi tersebut adalah:

MPI_Comm_rank(MPI_Comm comm, int* rank);
MPI_Comm_size(MPI_Comm comm, int* size);

Good Bye World Versi 3

Program berikut memberikan contoh mengenai fungsi MPI, yakni MPI_Send dan MPI_Recv.

#include <stdio.h>
#include <mpi.h>

main(int argc, char **argv)
{
   int myrank;
   int p;
   int source;
   int dest;
   int tag = 50;
   char message[100];
   MPI_Status status;
   
   MPI_Init(&argc, &argv);
   MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
   MPI_Comm_size(MPI_COMM_WORLD, &p);
   
   if(myrank != 0){
      sprintf(message, "Good bye world from process: %d!", myrank);
      dest = 0;
      MPI_Send(message, strlen(message)+1, MPI_CHAR, dest, tag, MPI_COMM_WORLD);
   }
   else{
      for(source = 1; source < p; source++){
         MPI_Recv(message, 100, MPI_CHAR, source, tag, MPI_COMM_WORLD, %status);
         printf("%s\n", message);
      }
   }
   
   MPI_Finalize();
}

Contoh hasil running program di terminal

$ mpirun -np 4 goodbye3
Good bye world from process: 1!
Good bye world from process: 2!
Good bye world from process: 3!

Keterangan

MPI_Send berfungsi untuk mengirimkan suatu pesan (data) dari suatu proses tertentu ke proses yang lain. Sintaksnya adalah:

MPI_Send(void*        message,
         int          count,
         MPI_Datatype datatype,
         int          dest,
         int          tag,
         MPI_Comm     comm)

Sedangkan MPI_Recv berfungsi untuk menerima pesan (data) dari suatu proses tertentu Sintaksnya adalah:

MPI_Recv(void*        message,
         int          count,
         MPI_Datatype datatype,
         int          source,
         int          tag,
         MPI_Comm     comm,
         MPI_Status*  status)

Referensi

  • Peter S. Pacheco. Parallel Programming with MPI. San Fransisco: Morgan Kauffman.1995.
  • More to be added ...

Kontributor: Fadjar