コード例 #1
0
        internal SummaryTable(Summary summary)
        {
            Summary = summary;

            if (summary.HasCriticalValidationErrors)
            {
                Columns                 = new SummaryTableColumn[0];
                ColumnCount             = 0;
                FullHeader              = new string[0];
                FullContent             = new string[0][];
                FullContentStartOfGroup = new bool[0];
                FullContentWithHeader   = new string[0][];
                return;
            }

            var configColumns = summary.Config.
                                GetColumns().
                                Where(c => c.IsAvailable(summary));
            var paramColumns = summary.Benchmarks.
                               SelectMany(b => b.Parameters.Items.Select(item => item.Name)).
                               Distinct().
                               Select(name => new ParamColumn(name));
            var diagnoserColumns = summary.Config.
                                   GetDiagnosers().
                                   Where(d => d is IColumnProvider).
                                   Cast <IColumnProvider>().
                                   SelectMany(cp => cp.GetColumns);
            var columns = configColumns.Concat(paramColumns).Concat(diagnoserColumns).ToArray().OrderBy(c => c.Category).ToArray();

            ColumnCount = columns.Length;
            FullHeader  = columns.Select(c => c.ColumnName).ToArray();

            var orderProvider = summary.Config.GetOrderProvider() ?? DefaultOrderProvider.Instance;

            FullContent = summary.Reports.Select(r => columns.Select(c => c.GetValue(summary, r.Benchmark)).ToArray()).ToArray();
            var groupKeys = summary.Benchmarks.Select(b => orderProvider.GetGroupKey(b, summary)).ToArray();

            FullContentStartOfGroup = new bool[summary.Reports.Length];

            if (groupKeys.Distinct().Count() > 1 && FullContentStartOfGroup.Length > 0)
            {
                FullContentStartOfGroup[0] = true;
                for (int i = 1; i < summary.Reports.Length; i++)
                {
                    FullContentStartOfGroup[i] = groupKeys[i] != groupKeys[i - 1];
                }
            }

            var full = new List <string[]> {
                FullHeader
            };

            full.AddRange(FullContent);
            FullContentWithHeader = full.ToArray();

            Columns = Enumerable.Range(0, columns.Length).Select(i => new SummaryTableColumn(this, i, columns[i].AlwaysShow)).ToArray();
        }
コード例 #2
0
        static void Main(string[] args)
        {
            var summaries = BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);

            //Generate an average speedup report
            foreach (var summary in summaries)
            {
                if (summary.HasCriticalValidationErrors)
                {
                    Console.WriteLine("Average Speedup is unavailable");
                    Console.WriteLine();
                    continue;
                }

                SummaryTableColumn speedUpColumn = null;
                for (var i = 0; i < summary.Table.ColumnCount; i++)
                {
                    var column = summary.Table.Columns[i];
                    if (column.Header == "Speedup")
                    {
                        speedUpColumn = column;
                        break;
                    }
                }

                if (speedUpColumn != null)
                {
                    var speedupColumnContent = speedUpColumn.Content;
                    var workloadRatios       = new List <SpeedupReport>();
                    for (var i = 0; i < summary.Reports.Length; i++)
                    {
                        var report = summary.Reports[i];
                        if (decimal.TryParse(speedupColumnContent[i], out var speedup))
                        {
                            workloadRatios.Add(new SpeedupReport
                            {
                                Speedup  = speedup,
                                Workload = report.BenchmarkCase.Descriptor.WorkloadMethodDisplayInfo
                            });
                        }
                    }

                    Console.WriteLine("Average Speedup");
                    foreach (var group in workloadRatios.GroupBy(r => r.Workload))
                    {
                        var averageSpeedup = group.Average(r => r.Speedup);
                        Console.Write($"{group.Key}: ".PadRight(16));
                        Console.WriteLine(averageSpeedup.ToString("0.00").PadLeft(7));
                    }

                    Console.WriteLine();
                }
            }
        }
コード例 #3
0
        internal SummaryTable(Summary summary)
        {
            Summary = summary;

            if (summary.HasCriticalValidationErrors)
            {
                Columns = new SummaryTableColumn[0];
                ColumnCount = 0;
                FullHeader = new string[0];
                FullContent = new string[0][];
                FullContentStartOfGroup = new bool[0];
                FullContentWithHeader = new string[0][];
                return;
            }

            var configColumns = summary.Config.
                GetColumns().
                Where(c => c.IsAvailable(summary));
            var paramColumns = summary.Benchmarks.
                SelectMany(b => b.Parameters.Items.Select(item => item.Name)).
                Distinct().
                Select(name => new ParamColumn(name));
            var diagnoserColumns = summary.Config.
                GetDiagnosers().
                Where(d => d is IColumnProvider).
                Cast<IColumnProvider>().
                SelectMany(cp => cp.GetColumns);
            var columns = configColumns.Concat(paramColumns).Concat(diagnoserColumns).ToArray().OrderBy(c => c.Category).ToArray();

            ColumnCount = columns.Length;
            FullHeader = columns.Select(c => c.ColumnName).ToArray();

            var orderProvider = summary.Config.GetOrderProvider() ?? DefaultOrderProvider.Instance;
            FullContent = summary.Reports.Select(r => columns.Select(c => c.GetValue(summary, r.Benchmark)).ToArray()).ToArray();
            var groupKeys = summary.Benchmarks.Select(b => orderProvider.GetGroupKey(b, summary)).ToArray();
            FullContentStartOfGroup = new bool[summary.Reports.Length];

            if (groupKeys.Distinct().Count() > 1 && FullContentStartOfGroup.Length > 0)
            {
                FullContentStartOfGroup[0] = true;
                for (int i = 1; i < summary.Reports.Length; i++)
                    FullContentStartOfGroup[i] = groupKeys[i] != groupKeys[i - 1];
            }            

            var full = new List<string[]> { FullHeader };
            full.AddRange(FullContent);
            FullContentWithHeader = full.ToArray();

            Columns = Enumerable.Range(0, columns.Length).Select(i => new SummaryTableColumn(this, i, columns[i].AlwaysShow)).ToArray();
        }
コード例 #4
0
        internal SummaryTable(Summary summary)
        {
            Summary = summary;

            if (summary.HasCriticalValidationErrors)
            {
                Columns                 = new SummaryTableColumn[0];
                ColumnCount             = 0;
                FullHeader              = new string[0];
                FullContent             = new string[0][];
                FullContentStartOfGroup = new bool[0];
                FullContentWithHeader   = new string[0][];
                IsDefault               = new bool[0];
                return;
            }

            var columns = summary.GetColumns();

            ColumnCount = columns.Length;
            FullHeader  = columns.Select(c => c.ColumnName).ToArray();

            var orderProvider = summary.Config.GetOrderProvider() ?? DefaultOrderProvider.Instance;

            FullContent = summary.Reports.Select(r => columns.Select(c => c.GetValue(summary, r.Benchmark)).ToArray()).ToArray();
            IsDefault   = columns.Select(c => summary.Reports.All(r => c.IsDefault(summary, r.Benchmark))).ToArray();
            var groupKeys = summary.Benchmarks.Select(b => orderProvider.GetGroupKey(b, summary)).ToArray();

            FullContentStartOfGroup = new bool[summary.Reports.Length];

            if (groupKeys.Distinct().Count() > 1 && FullContentStartOfGroup.Length > 0)
            {
                FullContentStartOfGroup[0] = true;
                for (int i = 1; i < summary.Reports.Length; i++)
                {
                    FullContentStartOfGroup[i] = groupKeys[i] != groupKeys[i - 1];
                }
            }

            var full = new List <string[]> {
                FullHeader
            };

            full.AddRange(FullContent);
            FullContentWithHeader = full.ToArray();

            Columns = Enumerable.Range(0, columns.Length).Select(i => new SummaryTableColumn(this, i, columns[i].AlwaysShow)).ToArray();
        }
コード例 #5
0
        internal SummaryTable(Summary summary)
        {
            Summary = summary;

            if (summary.HasCriticalValidationErrors)
            {
                Columns = new SummaryTableColumn[0];
                ColumnCount = 0;
                FullHeader = new string[0];
                FullContent = new string[0][];
                FullContentStartOfGroup = new bool[0];
                FullContentWithHeader = new string[0][];
                IsDefault = new bool[0];
                return;
            }

            var columns = summary.GetColumns();

            ColumnCount = columns.Length;
            FullHeader = columns.Select(c => c.ColumnName).ToArray();

            var orderProvider = summary.Config.GetOrderProvider() ?? DefaultOrderProvider.Instance;
            FullContent = summary.Reports.Select(r => columns.Select(c => c.GetValue(summary, r.Benchmark)).ToArray()).ToArray();
            IsDefault = columns.Select(c => summary.Reports.All(r => c.IsDefault(summary, r.Benchmark))).ToArray();
            var groupKeys = summary.Benchmarks.Select(b => orderProvider.GetGroupKey(b, summary)).ToArray();
            FullContentStartOfGroup = new bool[summary.Reports.Length];

            if (groupKeys.Distinct().Count() > 1 && FullContentStartOfGroup.Length > 0)
            {
                FullContentStartOfGroup[0] = true;
                for (int i = 1; i < summary.Reports.Length; i++)
                    FullContentStartOfGroup[i] = groupKeys[i] != groupKeys[i - 1];
            }            

            var full = new List<string[]> { FullHeader };
            full.AddRange(FullContent);
            FullContentWithHeader = full.ToArray();

            Columns = Enumerable.Range(0, columns.Length).Select(i => new SummaryTableColumn(this, i, columns[i].AlwaysShow)).ToArray();
        }
コード例 #6
0
        internal SummaryTable(Summary summary, SummaryStyle style = null)
        {
            Summary = summary;

            if (summary.HasCriticalValidationErrors)
            {
                Columns     = Array.Empty <SummaryTableColumn>();
                ColumnCount = 0;
                FullHeader  = Array.Empty <string>();
                FullContent = Array.Empty <string[]>();
                FullContentStartOfHighlightGroup = Array.Empty <bool>();
                FullContentWithHeader            = Array.Empty <string[]>();
                IsDefault = Array.Empty <bool>();
                return;
            }

            // Ensure we have all required data for styling
            style = style ?? summary.Style ?? SummaryStyle.Default;
            if (style.TimeUnit == null)
            {
                style = style.WithTimeUnit(TimeUnit.GetBestTimeUnit(summary.Reports.Where(r => r.ResultStatistics != null).Select(r => r.ResultStatistics.Mean)
                                                                    .ToArray()));
            }

            if (style.SizeUnit == null)
            {
                style = style.WithSizeUnit(SizeUnit.GetBestSizeUnit(summary.Reports.Select(r => r.GcStats.GetBytesAllocatedPerOperation(r.BenchmarkCase)).ToArray()));
            }

            var columns = summary.GetColumns();

            ColumnCount = columns.Length;
            FullHeader  = columns.Select(c => c.GetColumnTitle(style)).ToArray();

            FullContent = summary.Reports.Select(r => columns.Select(c => c.GetValue(summary, r.BenchmarkCase, style)).ToArray()).ToArray();
            IsDefault   = columns.Select(c => summary.Reports.All(r => c.IsDefault(summary, r.BenchmarkCase))).ToArray();

            var highlightGroupKeys = summary.BenchmarksCases.Select(b => b.Config.Orderer.GetHighlightGroupKey(b)).ToArray();

            FullContentStartOfHighlightGroup = new bool[summary.Reports.Length];
            if (highlightGroupKeys.Distinct().Count() > 1 && FullContentStartOfHighlightGroup.Length > 0)
            {
                FullContentStartOfHighlightGroup[0] = true;
                for (int i = 1; i < summary.Reports.Length; i++)
                {
                    FullContentStartOfHighlightGroup[i] = highlightGroupKeys[i] != highlightGroupKeys[i - 1];
                }
            }

            var logicalGroupKeys = summary.BenchmarksCases
                                   .Select(b => b.Config.Orderer.GetLogicalGroupKey(summary.BenchmarksCases, b))
                                   .ToArray();

            FullContentStartOfLogicalGroup = new bool[summary.Reports.Length];
            if (logicalGroupKeys.Distinct().Count() > 1 && FullContentStartOfLogicalGroup.Length > 0)
            {
                FullContentStartOfLogicalGroup[0] = true;
                for (int i = 1; i < summary.Reports.Length; i++)
                {
                    FullContentStartOfLogicalGroup[i] = logicalGroupKeys[i] != logicalGroupKeys[i - 1];
                }
            }

            SeparateLogicalGroups = summary.Orderer.SeparateLogicalGroups;

            var full = new List <string[]> {
                FullHeader
            };

            full.AddRange(FullContent);
            FullContentWithHeader = full.ToArray();

            Columns = new SummaryTableColumn[columns.Length];
            for (int i = 0; i < columns.Length; i++)
            {
                var  column = columns[i];
                bool hide   = summary.ColumnHidingRules.Any(rule => rule.NeedToHide(column));
                Columns[i] = new SummaryTableColumn(this, i, column, hide);
            }

            EffectiveSummaryStyle = style;
        }
コード例 #7
0
        static void Main(string[] args)
        {
            MediumTextComparisonBenchmark a = new MediumTextComparisonBenchmark();

            a.StringA = LongTextComparisonBenchmark.GetComparisonStrings().Where(s => !string.IsNullOrEmpty(s)).First();
            a.StringB = LongTextComparisonBenchmark.GetComparisonStrings().Where(s => !string.IsNullOrEmpty(s)).Skip(1).First();

            for (int i = 0; i < 1000; ++i)
            {
                a.Simd();
                a.Simd16();
                a.Quickenshtein();
            }
            return;

            //	return;
            //var benchmark = new QuickenshteinBenchmark();
            //benchmark.Setup();
            //benchmark.Quickenshtein();
            //return;
            BenchmarkRunner.Run(typeof(FillRowBenchmarks));
            BenchmarkRunner.Run(typeof(MediumTextComparisonBenchmark));
            return;

            var summaries = BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);

            //Generate an average speedup report
            foreach (var summary in summaries)
            {
                if (summary.HasCriticalValidationErrors)
                {
                    Console.WriteLine("Average Speedup is unavailable");
                    Console.WriteLine();
                    continue;
                }

                SummaryTableColumn speedUpColumn = null;
                for (var i = 0; i < summary.Table.ColumnCount; i++)
                {
                    var column = summary.Table.Columns[i];
                    if (column.Header == "Speedup")
                    {
                        speedUpColumn = column;
                        break;
                    }
                }

                if (speedUpColumn != null)
                {
                    var speedupColumnContent = speedUpColumn.Content;
                    var workloadRatios       = new List <SpeedupReport>();
                    for (var i = 0; i < summary.Reports.Length; i++)
                    {
                        var report = summary.Reports[i];
                        if (decimal.TryParse(speedupColumnContent[i], out var speedup))
                        {
                            workloadRatios.Add(new SpeedupReport
                            {
                                Speedup  = speedup,
                                Workload = report.BenchmarkCase.Descriptor.WorkloadMethodDisplayInfo
                            });
                        }
                    }

                    Console.WriteLine("Average Speedup");
                    foreach (var group in workloadRatios.GroupBy(r => r.Workload))
                    {
                        var averageSpeedup = group.Average(r => r.Speedup);
                        Console.Write($"{group.Key}: ".PadRight(16));
                        Console.WriteLine(averageSpeedup.ToString("0.00").PadLeft(7));
                    }

                    Console.WriteLine();
                }
            }
        }