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 !!!"); }
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(); }