//menggunakan semua host
andrew fiade
andrew_fiade@yahoo.co.id
using System;
using Alchemi.Parallel;
using Environment = Alchemi.Parallel.Environment;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int size, rank, i, j;
object data;
MPI mpi = Alchemi.Parallel.Environment.GetInstance().GetMPI;
mpi.Init();
mpi.Comm_Size(out size);
mpi.Comm_Rank(out rank);
MPI_Comm comm = new MPI_Comm("Andrew");
MPI_Status status = new MPI_Status();
int[] data1, data3;
data1 = new int[5];
data3 = new int[5];
data1[1] = 13; data1[2] = 16; data1[3] = 14;
if (rank == 0)
{
int numWorkers = size - 1;
Console.WriteLine("dikasih kesiapa ???jumlah prosesor {0}", numWorkers);
/* kriim ke pekerja */
for (int d = 1; d <= numWorkers; d++)
{
mpi.Send(data1, d, 0, comm);//format (Data, nomor prosesortujuan,tag nilainya 0, comm
}
/* terima dari pekerja*/
Object offsetArray;
int dest;
for (int yi = 1; yi <= numWorkers; yi++)
{
// dest = status.Src;
mpi.Recv(out offsetArray, yi, 0, comm, status);
data3 = (int[])offsetArray;
for (i = 1; i < 4; i++)
{
Console.WriteLine("untuk master,data diterima dari pekerja {0}", data3[i]);
}
}
}
else
{
Object payload;
int[] nilai;
int[] nilai2;
nilai2 = new int[5]; nilai = new int[5];
nilai2[1] = 3;
nilai2[2] = 10; nilai2[3] = 4;
/* receive data from master */
//terima dari master
mpi.Recv(out payload, 0, 0, comm, status);
nilai = (int[])payload;
for (int k = 1; k < 4; k++)
{
Console.WriteLine("untuk pekerja,data diterima dari pid 0 nilai data {0}", nilai[k]);
}
// kirim ke master
mpi.Send(nilai2, 0, 0, comm);
}
mpi.Finalise();
}
}
}