Ejemplo n.º 1
0
        private static void Main(string[] args)
        {
            REngine.SetEnvironmentVariables();
            StartupParameter parameter = args.Length > 0 ?
               new StartupParameter() { MaxMemorySize = ulong.Parse(args[0]) * (1024 * 1024) } :
               new StartupParameter() { };
            uint maxPowTwo = args.Length > 1 ? uint.Parse(args[1]) : 24;
            string outputfile = args.Length > 2 ? args[2] :
               (RDotNet.NativeLibrary.NativeUtility.IsUnix ? "~/tmp/rdotnetruntimes.csv" : "c:/tmp/runtimes.csv");

            using (var engine = REngine.GetInstance(device: device, parameter: parameter))
            {
                printMemLimit(engine);
                var measures = new List<Measurement>();

                //engine.Evaluate("cases <- expand.grid(c(2,5,10), 10^(0:6))");
                var sizes = engine.Evaluate(string.Format("as.integer(2^(0:{0}))", maxPowTwo)).AsInteger().ToArray();

                RuntimeDiagnostics r = new RuntimeDiagnostics(engine) {
                    Types = new[] { "numeric", "integer", "logical" }, // characters are much slower / cannot include here
                    Sizes = sizes
                };

                var funMap = RuntimeDiagnostics.GetMatrixCreationFunctions();
                measures.AddRange(r.DoMeasures(funMap, what: "matrix", operation: ".NET->R", tag: ""));

                funMap = RuntimeDiagnostics.GetVectorCreationFunctions();
                measures.AddRange(r.DoMeasures(funMap, what: "vector", operation: ".NET->R", tag: ""));

                funMap = RuntimeDiagnostics.GetMatrixRetrievalFunctions();
                measures.AddRange(r.DoMeasures(funMap, what: "matrix", operation: "R->.NET", tag: ""));

                funMap = RuntimeDiagnostics.GetVectorRetrievalFunctions();
                measures.AddRange(r.DoMeasures(funMap, what: "vector", operation: "R->.NET", tag: ""));

                Console.WriteLine("Writing results to {0}", outputfile);
                engine.SetSymbol("runtimes", r.CollateResults(measures));
                engine.Evaluate(string.Format("write.table(runtimes, '{0}', row.names=FALSE, col.names=TRUE, quote=FALSE, sep = ',')", outputfile));

                // rt <- read.csv('c:/tmp/runtimes.csv')
                // d <- ggplot(rt, aes_string(x='Size', y="Duration", color='Type', shape='What'))
                // d <- d + geom_point() + facet_wrap( ~ Operation )
                // d <- d + scale_y_log10() + scale_x_log10() + annotation_logticks(sides='bl')
                // d + ggtitle('Data conversion') + xlab("data size") + ylab('duration (ms)')

                engine.Dispose();
            }
        }