Esempio n. 1
0
    static void Main(string[] args)
    {
        // 1. allocate a new dataflow computation.
        using (var computation = NewComputation.FromArgs(ref args))
        {
            Int32 iterations = 10;
            if (args.Length >= 1)
            {
                iterations = Int32.Parse(args[0]);
            }

            Console.Out.WriteLine("iterations: " + iterations);
            Console.Out.Flush();

            int counts    = 5;
            int dimension = 10;


            Stream <Sample, Epoch> nodes =
                GenerateSamples(dimension, counts, computation.Configuration.ProcessID).AsNaiadStream(computation);

            // Stream<Weight, Epoch> weight =
            //   GenerateWeight(dimension, computation.Configuration.ProcessID).AsNaiadStream(computation);
            // nodes = nodes.PartitionBy(x => x.source);

            // nodes.IterateAndAccumulate((lc, x)  => x, x => Print(x), iterations, "LogisticRegression");


            LogisticRegression lg = new LogisticRegression(dimension, computation.Configuration.ProcessID);

            var end_nodes  = nodes.Iterate((lc, x) => lg.Operate(x), iterations, "LogisticRegression");
            var node_count = Microsoft.Research.Naiad.Frameworks.Lindi.ExtensionMethods.Count(end_nodes);
            end_nodes.WriteToFiles("output_nodes_{0}.txt", (record, writer) => writer.Write(true));
            node_count.WriteToFiles("output_count_{0}.txt", (record, writer) => writer.Write(true));
            // var end_nodes  = nodes.IterateAndAccumulate((lc , x) => Operate(x), iterations, "LogisticRegression");

            Console.Out.WriteLine("Proc ID: " + computation.Configuration.ProcessID);
            Console.Out.Flush();

            var output = node_count.Subscribe(x => {
                foreach (var e in x)
                {
                    Console.WriteLine("vector: " + PrintList(e.First) + " count: " + e.Second);
                }
            });

            // 2. define an object which accepts input strings.
            // var source = new BatchedDataSource<string>();

            // 3. convert the data source into a Naiad stream of strings.
            // var input = computation.NewInput(source);

            // 4.request a notification for each batch of strings
            // received.
            // var output = input.Subscribe(x =>
            //     {
            //     foreach (var line
            //       in x)
            //     Console.WriteLine(line);
            //     });

            Console.Out.WriteLine("Before Activate!");
            Console.Out.Flush();

            // 5. start the computation, fixing the structure of
            // the dataflow graph.
            computation.Activate();

            Console.Out.WriteLine("After Activate!");
            Console.Out.Flush();

            // 6. read inputs from the console as long as the
            // user supplies them.
            // for (var l = Console.ReadLine(); l.Length > 0; l
            //     = Console.ReadLine()) {}
            //   // source.OnNext(l.Split());

            // 7. signal that the source is now complete.
            // source.OnCompleted();

            // 8. block until all work is finished.
            computation.Join();

            Console.Out.WriteLine("After Join!");
            Console.Out.WriteLine("Sample Conter: " + PrintList(lg.sample_counter));
            Console.Out.WriteLine("Reduction Counter: " + PrintList(lg.reduction_counter));
            Console.Out.Flush();
        }
    }