internal MessureResults(MessureContext context)
        {
            Collecting = !context.CollectAndWait;
            Context = context;
            Context.AutoSaveFileName = string.IsNullOrEmpty(Context.AutoSaveFileName)
                                           ? string.Format("{0} - {1:yyyy-MM-dd hh_mm_ss}.pmr", Description, DateTimeOffset.Now)
                                           : Context.AutoSaveFileName;

            if(!Context.CollectAndWait)
            {
                StartDateTime = DateTimeOffset.Now;
            }
        }
        public static void PipelinedSlim(MessureContext context)
        {
            var tileSize = (int)context.Data["tilesize"];
            var threads = (int)context.Data["threads"];
            var btm = (BlockTridiagonalMatrix<double>)context.Data["btm"];

            BlockTridiagonalMatrix<double> result;
            var sf = new BlockTridiagonalMatrixInverse<double>(btm, tileSize, out result);
            var nonpl = new PipelinedBlockTridiagonalMatrixInverse(sf);
            var pm = new Manager(nonpl, threads);
            pm.Start();
            pm.Join();
        }
        public static void NonPipelined(MessureContext context)
        {
            var tileSize = (int)context.Data["tilesize"];
            var threads = (int) context.Data["threads"];
            var btm = (BlockTridiagonalMatrix<double>)context.Data["btm"];

            BlockTridiagonalMatrix<double> result;
            var sf = new NonSlim.StigsFormulae<double>(btm, tileSize, out result);
            var nonpl = new NonSlim.NonPipelinedStigsFormulae(sf);
            var pm = new NonSlim.ProcessManager(nonpl, threads);
            pm.Start();
            pm.Join();
        }
 public static MessureResults Init(MessureContext context)
 {
     return new MessureResults(context);
 }
        public static MessureResults Start(int threads, int tilesize, string filename)
        {
            var mc = new MessureContext
            {
                Description = "Matrix Inversion - AutoResetEvent vs Monitor Pulse-Wait",
                CollectAndWait = true,
                Replays = 1,
                AutoSaveToFile = true,
                Data = { { "tilesize", tilesize }, { "threads", threads} },
                Reset = (x) =>
                            {
                                GC.Collect();
                                x.Data["btm"] = BlockTridiagonalMatrix<double>.DeSerializeFromFile(Path.GetFullPath(filename));
                            }
            };

            Console.WriteLine(mc);

            var m = Messure.Init(mc)
                .Messure(NonPipelined)
                .Messure(NonPipelinedSlim)
                .Messure(Pipelined)
                .Messure(PipelinedSlim)
                .Start();

            return m;
        }