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(); }
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(); } } }
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(); }
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(); }
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(); }
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; }
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(); } } }