static void Main(string[] args) { string rootPath = string.Format(@"..{0}..{0}..{0}", Path.DirectorySeparatorChar); uint numIterations = 0; if (args.Length == 1 && !UInt32.TryParse(args[0], out numIterations)) { rootPath = args[0]; } else if (args.Length == 2) { UInt32.TryParse(args[0], out numIterations); rootPath = args[1]; } Console.WriteLine("Loading data from path {0}", rootPath); var portfolioProvider = new PortfoliosProvider(rootPath + "datas/Portfolios"); var productParametersProvider = new StocksPricesProvider(rootPath + "datas/Parameters"); if (numIterations > 0) { Console.WriteLine("Benchmarking {0} times", numIterations); Benchmark(UInt32.Parse(args[0]), portfolioProvider, productParametersProvider); return; } Console.WriteLine(" * Starting BasicVarCalculator"); var basicPerf = RunCalculator <BasicVarCalculator>(portfolioProvider, productParametersProvider); Console.WriteLine(" * Starting DataFlowCalculator with {0} processors", Environment.ProcessorCount); var dataFlowPerf = RunCalculator <DataFlowVarCalculator>(portfolioProvider, productParametersProvider); Console.WriteLine(" Delta t = {0} ms ({1:0.00} %)", dataFlowPerf - basicPerf, (dataFlowPerf - basicPerf) / (double)basicPerf * 100.0); Console.ReadKey(); }
private static long RunCalculator <TCalculator>(PortfoliosProvider portfolioProvider, StocksPricesProvider productParametersProvider) where TCalculator : IVarCalculator, new() { var stopwatch = new Stopwatch(); stopwatch.Start(); var calculator = new TCalculator { PortfolioProvider = portfolioProvider, ProductParametersProvider = productParametersProvider }; var result = calculator.Calculate(); stopwatch.Stop(); Console.WriteLine("\tResult -> {0}, Duration -> {1} ms", result, stopwatch.ElapsedMilliseconds); return(stopwatch.ElapsedMilliseconds); }
static void Benchmark(uint nIterations, PortfoliosProvider portfolioProvider, StocksPricesProvider productParametersProvider) { double basicPerf = 0; double dataFlowPerf = 0; for (var i = 0; i < nIterations; ++i) { basicPerf += RunCalculator <BasicVarCalculator>(portfolioProvider, productParametersProvider); dataFlowPerf += RunCalculator <DataFlowVarCalculator>(portfolioProvider, productParametersProvider); } basicPerf /= nIterations; dataFlowPerf /= nIterations; Console.WriteLine("{0} iterations: Basic = {1}, DataFlow = {2}", nIterations, basicPerf, dataFlowPerf); Console.WriteLine(" Delta t = {0} ms ({1:0.00} %)", dataFlowPerf - basicPerf, (dataFlowPerf - basicPerf) / basicPerf * 100.0); }