public void PlayDataFromMemory(AggregateVertex <AggDocument, int> aggVertex, string filename) { int time_epoch = 0; RegionLinkedList <Message <int, Pair <Integer, AggDocument> > > messages; using (StreamReader file = File.OpenText(filename)) { Region inputRegion = RegionAllocator.AllocateRegion(NaiadSimulator.TMP_REGION_SIZE); using (RegionContext regContext = RegionContext.Create(inputRegion)) { messages = new RegionLinkedList <Message <int, Pair <Integer, AggDocument> > >(); while (true) { var line = file.ReadLine(); if (line == null) { break; } var elements = line.Split(' '); if (elements[0] == "BEGIN") { int time = Convert.ToInt32(elements[1]); int batch_size = Convert.ToInt32(elements[2]); Message <int, Pair <Integer, AggDocument> > msg = new Message <int, Pair <Integer, AggDocument> >(time, batch_size); for (int i = 0; i < batch_size; i++) { elements = file.ReadLine().Split(' '); msg.put(new Pair <Integer, AggDocument>( new Integer(Convert.ToInt32(elements[3])), new AggDocument(new Integer(Convert.ToInt32(elements[1])), new Integer(Convert.ToInt32(elements[2])), new Integer(Convert.ToInt32(elements[3])), elements[4]))); } messages.InsertFirst(msg); time_epoch++; } } } } Int64 start = RegionAllocator.NativeGetPerformanceCounter(); for (Node <Message <int, Pair <Integer, AggDocument> > > cur = messages.Head; cur != default(Node <Message <int, Pair <Integer, AggDocument> > >); cur = cur.Next) { aggVertex.onReceive((Message <int, Pair <Integer, AggDocument> >)cur.Data.Clone()); aggVertex.onNotify(--time_epoch); } // NOTE: We do not free the input region because we don't want to include // it in measuring the runtime. The input region is just used as a // mechanism to load the data into memory. Int64 end = RegionAllocator.NativeGetPerformanceCounter(); Utils.Print(end - start); }
public void PlayDataFromMemory(JoinVertex <Document, Author, int, JoinOutput, int> joinVertex, string docFileName, string authorFileName) { int timeEpoch = 0; RegionLinkedList <Message <int, Document> > msgsDocs; RegionLinkedList <Message <int, Author> > msgsAuthors; using (StreamReader docFile = File.OpenText(docFileName)) { using (StreamReader authorFile = File.OpenText(authorFileName)) { Region inputRegion = RegionAllocator.AllocateRegion(NaiadSimulator.TMP_REGION_SIZE); using (RegionContext regContext = RegionContext.Create(inputRegion)) { bool docEmpty = false; bool authorEmpty = false; msgsDocs = new RegionLinkedList <Message <int, Document> >(); msgsAuthors = new RegionLinkedList <Message <int, Author> >(); while (!docEmpty || !authorEmpty) { var line = docFile.ReadLine(); if (line != null) { var elements = line.Split(' '); if (elements[0] == "BEGIN") { timeEpoch++; msgsDocs.InsertFirst(ReadUtils.ReadDocBatchMemory(docFile, line)); } } else { docEmpty = true; } line = authorFile.ReadLine(); if (line != null) { var elements = line.Split(' '); if (elements[0] == "BEGIN") { msgsAuthors.InsertFirst(ReadUtils.ReadAuthorBatchMemory(authorFile, line)); } } else { authorEmpty = true; } } } } } Int64 start = RegionAllocator.NativeGetPerformanceCounter(); Node <Message <int, Document> > curDocs = msgsDocs.Head; Node <Message <int, Author> > curAuthors = msgsAuthors.Head; while (curDocs != default(Node <Message <int, Document> >) && curAuthors != default(Node <Message <int, Author> >)) { joinVertex.onReceive((Message <int, Document>)curDocs.Data.Clone()); joinVertex.onReceive((Message <int, Author>)curAuthors.Data.Clone()); joinVertex.onNotify(--timeEpoch); curDocs = curDocs.Next; curAuthors = curAuthors.Next; } // NOTE: We do not free the input region because we don't want to include // it in measuring the runtime. The input region is just used as a // mechanism to load the data into memory. Int64 end = RegionAllocator.NativeGetPerformanceCounter(); Utils.Print(end - start); }