All pastes #1236985 Raw Edit

MPI di Visual C#

public text v1 · immutable
#1236985 ·published 2008-10-26 15:46 UTC
rendered paste body
//by andrew fiade 26 oktober 2008
//mpi di visual c# menggunakan alchemi 
//tapi belum selesai baru 80 %

using System;
using Alchemi.Parallel;
using Environment = Alchemi.Parallel.Environment;
namespace ConsoleApplication1
{
    class Program
    {

        private int[] data3 = new int[10];
        static void Main(string[] args)
        {
            int size, rank, i, j,s,p,r,n;
            object data;
            Program sort = new Program();
            DateTime tmenow = DateTime.Now;
            int mls = tmenow.Millisecond;
            Random rndnumber = new Random(mls);
            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,temp;  n= Int32.Parse(args[1]);
              data1 = new int[n];
            sort.data3 = new int[n]; temp = new int[n];
         //   data1[1] = 13; data1[2] = 16; data1[3] = 14;
            r = n % size;
            if (rank == 0)
            {
                s = n / size;
                int numWorkers = size - 1;

                Console.WriteLine("dikasih kesiapa ???jumlah prosesor {0}= {1}={2}={3}", numWorkers,s,size,rank);
                for (i = 0; i < n; i++)
                data1[i] = rndnumber.Next(0, 999);/* kriim ke pekerja */
                for (int d = 1; d <= numWorkers; d++)
                {
                    for (i = d * s; i < (s * (d + 1)); i++)
                    {
                       mpi.Send(data1[i], d, 0, comm);
                    }
                }
               /* terima dari pekerja*/
                Object offsetArray;
                int dest;
                Console.WriteLine("untuk dikerjakan proseor 0");
                for (int yi = 0; yi < s; yi++)
                {
                    //untuk id =0
                    sort.data3[yi] = data1[yi];
                    Console.WriteLine("data ke {0} = {1}", yi, sort.data3[yi]);

                }
                sort.sortArray(s);

                Console.WriteLine("============"); int tambah;
                tambah = s;
                   for (int d = 1; d <= numWorkers; d++)
                   {
                     mpi.Recv(out offsetArray, d, 0, comm, status);
                    temp = (int[])offsetArray;
                    for (i = d * s; i < (s * (d + 1)); i++)
                    {
                        sort.data3[i] = temp[i];
                    }
                    }

                    sort.sortArray(n-1);
                    for (i = 0; i < n; i++)
                         {

                             Console.WriteLine("nilai awal {0}={1}", i, sort.data3[i]);
                          } ;

            }
            else
            {
                Object payload;
                int[] nilai; int nilaidata;
                int[] nilai2; s = n / size;
                nilai2 = new int[n]; nilai = new int[n];
                            /* receive data from master */
                //terima dari master
                int id; id = rank-1; //karena di prosesor 0 dikirim melalui id=0
                //maka dibuat id=0
                int tampung;
             //   nilai2 = new int[s + 2];
                int kk = s;
                Console.WriteLine("identifikasi pekerje = {0} ",rank);

              //  for (i = 0; i < s ; i++)
                int d = rank;
                for (i = d * s; i = 0; i--)
            {
                siftDown(i, x);
            }

            for (i = x - 1; i >= 1; i--)
            {
                temp = data3[0];
                data3[0] = data3[i];
                data3[i] = temp;
                siftDown(0, i - 1);
            }
        }
        public void siftDown(int root, int bottom)
        {
            bool done = false;
            int maxChild;
            int temp;

            while ((root * 2  data3[root * 2 + 1])
                    maxChild = root * 2;
                else
                    maxChild = root * 2 + 1;

                if (data3[root] < data3[maxChild])
                {
                    temp = data3[root];
                    data3[root] = data3[maxChild];
                    data3[maxChild] = temp;
                    root = maxChild;
                }
                else
                {
                    done = true;
                }
            }
        }

    }
}