Anda di halaman 1dari 8

ARRUUM CHANDRA DEWI NUR WULAN

2015 31 247
TUGAS PEMROSESAN PARALEL
1. Kode Program mengenai Tipe Data Continuous
1. Screenshoot koding
2. Koding

// Tugas_Paralel.cpp : Defines the entry point for the console application.


//

#include "stdafx.h"
#include <mpi.h>
int main(int argc, char *argv[])
{
int i, rank;
MPI_Status status;
MPI_Datatype type;
int data[15];
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Type_contiguous(5, MPI_INT, &type);
MPI_Type_commit(&type);
if (rank == 0)
{
printf("Rank %d mengirim data = ", rank);
for (i = 0; i < 15; i++)
{
data[i] = i;
printf("[%d]:%d", i, data[i]);
}
printf("\r\n");
MPI_Send(data, 1, type, 1, 99, MPI_COMM_WORLD);
}
else
if (rank == 1)
{
for (i = 0; i < 15; i++)
{
data[i] = -1;
}
MPI_Recv(data, 1, type, 0, 99, MPI_COMM_WORLD, &status);
printf("Rank %d menerima data: ", rank);
for (i = 0; i < 15; i++)
{
printf("[%d]:%d ", i, data[i]);
}
printf("\r\n");
}
MPI_Type_free(&type);
MPI_Finalize();
return 0;
}
3. Screen shoot hasil

4. Analisa Program
Pada kodingan yang pertama, mengenai tipe data Continuous menggunakan library
#include "stdafx.h"
#include <mpi.h>
Selanjutnya menggunakan tipe data seperti dibawah ini
int main(int argc, char *argv[])
{
int i, rank;
MPI_Status status;
MPI_Datatype type;
int data[15];
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Type_contiguous(5, MPI_INT, &type);
MPI_Type_commit(&type);

Dengan menggunakan 2 kondisi yaitu jika 0 dan 1. Seperti di bawah ini


Kondisi jika rank == 0 maka akan memproses perintah seperti dibawah ini
if (rank == 0)
{
printf("Rank %d mengirim data = ", rank);
for (i = 0; i < 15; i++)
{
data[i] = i;
printf("[%d]:%d", i, data[i]);
}
printf("\r\n");
MPI_Send(data, 1, type, 1, 99, MPI_COMM_WORLD);
}
Yang artinya, jika kondisi rank == 0, maka cetak “Rank %d mengirim data = ”
Dengan kondisi for (i=0; i<15;i++)
Artinya jika kondisi i = 0 dan i kurang dari 15 kemudian ada increment i (nilai i bertambah 1)
Maka printf("\r\n"); dan kemudian MPI_Send(data, 1, type, 1, 99, MPI_COMM_WORLD);
}

Selanjutnya, jika kondisi rank==1 maka akan memproses perintah dibawah ini
else
if (rank == 1)
{
for (i = 0; i < 15; i++)
{
data[i] = -1;
}
MPI_Recv(data, 1, type, 0, 99, MPI_COMM_WORLD, &status);
printf("Rank %d menerima data: ", rank);
for (i = 0; i < 15; i++)
{
printf("[%d]:%d ", i, data[i]);
}
printf("\r\n");
}
Artinya, jika rank == 1 . Untuk kondisi i = 0; i < 15; dan kemudian increment i
(nilai bertambah 1 )
Maka data [i] = -1
Kemudian MPI_Recv(data, 1, type, 0, 99, MPI_COMM_WORLD, &status);
printf("Rank %d menerima data: ", rank);
Kemudian akan mencetak tulisan Rank ke %d menerima data : ” dengan nilai diambil dari
nilai rank
Dan selanjutnya {
printf("[%d]:%d ", i, data[i]);
}
printf("\r\n");

Kemudian
MPI_Type_free(&type);
MPI_Finalize();
return 0;
}
Yang artinya MPI sudah selesai dan ada fungsi return 0.
2. Kode Program mengenai Komunikasi Point to Point
1. Screenshoot Koding

2. Koding
// Tugas_Paralel.cpp : Defines the entry point for the console
application.
//

#include "stdafx.h"
#include <mpi.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char message[30];
int myrank;
MPI_Status status;
MPI_Init (&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
printf("Proses rank : %d \r\n", myrank);

if (myrank == 0)
{
strcpy_s(message, "Halo ini dari rank 0");
printf("Data dikirim dari rank 0: %s \r\n ", message);
MPI_Send(message, strlen(message) + 1, MPI_CHAR, 1, 99,
MPI_COMM_WORLD);
}

else if (myrank == 1)
{
MPI_Recv(message, 30, MPI_CHAR, 0, 99, MPI_COMM_WORLD, &status);
printf("Data yang diterima di rank 1 : %s \r\n", message);
}
MPI_Finalize();
return 0;
}

3. Screenshot hasil

4. Analisa
Analisa koding program mengenai Komunikasi Point to Point
Pada kodingan kali ini, menggunaka 4 library yaitu
#include "stdafx.h"
#include <mpi.h>
#include <stdio.h>
#include <string.h>
Dengan menggunakan tipe data seperti dibawah ini
int main(int argc, char *argv[])
{
char message[30];
int myrank;
MPI_Status status;
MPI_Init (&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
printf("Proses rank : %d \r\n", myrank);
Kemudian mencetak Proses rank sebannyak rank yang dimiliki.
Pada kodingan diprogram ini memiliki 2 kondisi yaitu kondisi jika :
1. (myrank == 0)
Maka akan melakukan proses seperti dibawah ini
{
strcpy_s(message, "Halo ini dari rank 0");
printf("Data dikirim dari rank 0: %s \r\n ", message);
MPI_Send(message, strlen(message) + 1, MPI_CHAR, 1, 99,
MPI_COMM_WORLD);
}

Maka akan mencetak tulisan “Halo ini dari rank 0”, kemudian akan mencetak
tulisan lagi “Data dikirim dari rank 0 : %s \r\n”
2. (myrank ==1)
Maka akan melakukan proses seperti dibawah ini
else if (myrank == 1)
{
MPI_Recv(message, 30, MPI_CHAR, 0, 99, MPI_COMM_WORLD, &status);
printf("Data yang diterima di rank 1 : %s \r\n", message);
}

Maka akan mencetak tulisan “Data yang diterima di rank 1 :%s \r\n”
Kemudian fungsi MPI Finalize() atau selesai. Dan selanjutnya ada fungsi return
0;
MPI_Finalize();
return 0;
}

Penjelasan mengenai Komuikasi Point to Point


Komunikasi point-to-point adalah bentuk komunikasi paling dasar di MPI,

memungkinkan sebuah program mengirim pesan dari satu proses ke proses lainnya

melalui seorang komunikator yang diberikan. Setiap pesan memiliki sumber dan proses

target (diidentifikasi oleh jajarannya di dalam komunikator), sebuah tag integral yang

mengidentifikasi jenis pesan, dan muatan yang berisi data sewenang-wenang. Tag akan

dibahas lebih rinci nanti.

Ada dua jenis komunikasi untuk mengirim dan menerima pesan melalui fasilitas point-

to-point MPI.NET, pemblokiran dan non-blocking. Pemblokiran operasi point-to-point

akan menunggu sampai sebuah komunikasi selesai pada prosesor lokalnya sebelum

melanjutkan. Sebagai contoh, operasi Kirim pemblokiran tidak akan kembali sampai

pesan masuk ke buffer internal MPI untuk dikirim, sementara operasi Menerima

pemblokiran akan menunggu sampai pesan diterima dan diterjemahkan seluruhnya

sebelum dikembalikan. Operasi point-to-point MPI.NET yang tidak memblok, di sisi lain,
akan memulai komunikasi tanpa menunggu komunikasi selesai. Sebagai gantinya,

sebuah objek Permintaan, yang bisa digunakan untuk query, complete, atau cancel the

communication, akan dikembalikan. Untuk contoh awal kami, kami akan menggunakan

komunikasi pemblokiran.

Anda mungkin juga menyukai