Пример #1
0
        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);
        }
Пример #2
0
        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);
        }