Example #1
0
        public override void main()
        {
            Trace.WriteLine(WorldComm.Rank + ": STARTING BREAK IN LINE  (SPLIT FUNCTION)");
            IStringInstance input_data_instance = (IStringInstance)Input_data.Instance;
            IIteratorInstance <IKVPair <IInteger, IString> > output_data_instance = (IIteratorInstance <IKVPair <IInteger, IString> >)Output_data.Instance;

            string s = input_data_instance.Value;

            string[] lines        = s.Split(new char[] { System.Environment.NewLine[0] });
            int      line_counter = 0;

            foreach (string line in lines)
            {
                if (!line.Trim().Equals(""))
                {
                    Trace.WriteLine(WorldComm.Rank + ": LINE = " + line);
                    IKVPairInstance <IInteger, IString> line_pair = (IKVPairInstance <IInteger, IString>)Output_data.createItem();
                    ((IIntegerInstance)line_pair.Key).Value  = line_counter++;
                    ((IStringInstance)line_pair.Value).Value = line;
                    output_data_instance.put(line_pair);
                }
            }

            Trace.WriteLine(WorldComm.Rank + ": FINISH BREAK IN LINES #1 !!! " + output_data_instance.GetHashCode());
            output_data_instance.finish();
            Trace.WriteLine(WorldComm.Rank + ": FINISH BREAK IN LINES #2 !!!");
        }
Example #2
0
        public override void main()
        {
            int count = 0;

            Trace.WriteLine(WorldComm.Rank + ": STARTING SCATTER SPLIT DATA SOURCE #1");

            Bin_function.NumberOfPartitions = this.UnitSize["target"];

            IIteratorInstance <IKVPair <IMK, IMV> > bins_instance = (IIteratorInstance <IKVPair <IMK, IMV> >)Bins.Instance;

            int[] rank_workers = this.UnitRanks["target"];

            Trace.WriteLine(WorldComm.Rank + ": STARTING SCATTER SPLIT DATA SOURCE #2");

            // 1. Ler os bins, um a um, do iterator, e enviá-los a cada mapper (unidades target) usando MPI.
            object bins_object;

            while (bins_instance.fetch_next(out bins_object))
            {
                Trace.WriteLine(WorldComm.Rank + ": LOOP BIN " + (bins_object == null));

                // Ler um bin.
                IKVPairInstance <IMK, IMV> bin = (IKVPairInstance <IMK, IMV>)bins_object;


                Trace.WriteLine(bin.Key.GetType() + " +++++ " + Key.Instance.GetType());

                // Recuperar a chave do bin.
                Key.Instance = bin.Key;

                // Descobre o rank do Mapper.
                Trace.WriteLine(WorldComm.Rank + ": BEFORE BIN FUNCTION " + bins_instance.GetHashCode());
                Bin_function.go();
                Trace.WriteLine(WorldComm.Rank + ": AFTER BIN FUNCTION");

                int i    = (int)((IIntegerInstance)Rank.Instance).Value;
                int rank = rank_workers[i];

                // Inicia o envio do bin para o Mapper.
                Trace.WriteLine(WorldComm.Rank + ": BEGIN SEND BIN KEY/VALUE to " + rank + "cont=" + (count++));
                comm.Send <object> (bin.Key, rank, TAG_SPLITTER_IMK);                 //Trace.WriteLine(WorldComm.Rank + ": SEND BIN KEY OK to " + rank);
                comm.Send <object> (bin.Value, rank, TAG_SPLITTER_IMV);               //Trace.WriteLine(WorldComm.Rank + ": SEND BIN VALUE OK to " + rank);
                Trace.WriteLine(WorldComm.Rank + ": END SEND BIN KEY/VALUE to " + rank + "cont=" + (count++));
            }

            Trace.WriteLine(Rank + ": FINISH LOOP SEND BINS !!!");

            // send "finish" message
            MPI.RequestList requests = new MPI.RequestList();

            foreach (int i in rank_workers)
            {
                Trace.WriteLine(WorldComm.Rank + ": BEGIN SEND BIN FINISH OK to " + i);
                MPI.Request request = comm.ImmediateSend <object> (0, i, TAG_SPLITTER_IMK_FINISH);
                Trace.WriteLine(WorldComm.Rank + ": END SEND BIN FINISH OK to " + i);

                requests.Add(request);
            }

            requests.WaitAll();
//			Trace.WriteLine(WorldComm.Rank + ": SEND BIN FINISH OK ALL ");

            //requestList.WaitAll();
        }