private string Format(Summary summary, ImmutableConfig config, Statistics statistics, SummaryStyle style) { if (statistics == null) { return("NA"); } int precision = summary.DisplayPrecisionManager.GetPrecision(style, this, parentColumn); string format = "N" + precision; double value = calc(statistics); if (double.IsNaN(value)) { return("NA"); } return(UnitType == UnitType.Time ? TimeInterval.FromNanoseconds(value) .ToString( style.TimeUnit, style.CultureInfo, format, UnitPresentation.FromVisibility(style.PrintUnitsInContent)) : value.ToString(format, style.CultureInfo)); }
public override IEnumerable<Conclusion> AnalyseReport(BenchmarkReport report, Summary summary) { var target = report.AllMeasurements.Where(m => m.Is(IterationMode.Workload, IterationStage.General)).ToArray(); if (target.IsEmpty()) yield break; var minActualIterationTime = TimeInterval.FromNanoseconds(target.Min(m => m.Nanoseconds)); if (minActualIterationTime < MinSufficientIterationTime) yield return CreateWarning($"MinIterationTime = {minActualIterationTime} which is very small. It's recommended to increase it.", report); }
public static void Print([NotNull] this ITestOutputHelper output, [NotNull] string title, [NotNull] Histogram histogram) { var values = histogram.GetAllValues().CopyToArray(); double mValue = MValueCalculator.Calculate(values); var cultureInfo = TestCultureInfo.Instance; var binSizeInterval = TimeInterval.FromNanoseconds(histogram.BinSize); output.WriteLine($"=== {title}:Short (BinSize={binSizeInterval.ToString(cultureInfo)}, mValue={mValue.ToString("0.##", cultureInfo)}) ==="); output.WriteLine(histogram.ToString(histogram.CreateNanosecondFormatter(cultureInfo, "0.0000"))); output.WriteLine($"=== {title}:Full (BinSize={binSizeInterval.ToString(cultureInfo)}, mValue={mValue.ToString("0.##", cultureInfo)}) ==="); output.WriteLine(histogram.ToString(histogram.CreateNanosecondFormatter(cultureInfo, "0.0000"), full: true)); }
public static void Print([NotNull] this ITestOutputHelper output, [NotNull] string title, [NotNull] Histogram histogram) { var s = new Statistics(histogram.GetAllValues()); double mValue = MathHelper.CalculateMValue(s); var cultureInfo = TestCultureInfo.Instance; var binSizeInterval = TimeInterval.FromNanoseconds(histogram.BinSize); output.WriteLine($"=== {title}:Short (BinSize={binSizeInterval.ToString(cultureInfo)}, mValue={mValue.ToString("0.##", cultureInfo)}) ==="); output.WriteLine(histogram.ToString(histogram.CreateNanosecondFormatter(cultureInfo, "0.0000"))); output.WriteLine($"=== {title}:Full (BinSize={binSizeInterval.ToString(cultureInfo)}, mValue={mValue.ToString("0.##", cultureInfo)}) ==="); output.WriteLine(histogram.ToString(histogram.CreateNanosecondFormatter(cultureInfo, "0.0000"), full: true)); output.WriteLine("OUTLIERS: {0}", string.Join(", ", s.AllOutliers.Select(it => TimeInterval.FromNanoseconds(it).ToString(cultureInfo)))); }
public override IEnumerable <Conclusion> AnalyseReport(BenchmarkReport report) { var target = report.AllMeasurements.Where(m => m.IterationMode == IterationMode.MainTarget).ToArray(); if (target.IsEmpty()) { yield break; } var minActualIterationTime = TimeInterval.FromNanoseconds(target.Min(m => m.Nanoseconds)); if (minActualIterationTime < MinSufficientIterationTime) { yield return(CreateWarning($"MinIterationTime = {minActualIterationTime} which is very small. It's recommended to increase it.", report)); } }
protected override IEnumerable <Conclusion> AnalyseReport(BenchmarkReport report, Summary summary) { var target = report.AllMeasurements.Where(m => m.Is(IterationMode.Workload, IterationStage.Actual)).ToArray(); if (target.IsEmpty()) { yield break; } var minActualIterationTime = TimeInterval.FromNanoseconds(target.Min(m => m.Nanoseconds)); if (minActualIterationTime < MinSufficientIterationTime) { yield return(CreateWarning($"The minimum observed iteration time is {minActualIterationTime} which is very small. It's recommended to increase it to at least {MinSufficientIterationTime} using more operations.", report)); } }
/// <returns>the time it took to run the benchmark</returns> private static TimeInterval Jit(Engine engine, int jitIndex, int invokeCount, int unrollFactor) { engine.Dummy1Action.Invoke(); DeadCodeEliminationHelper.KeepAliveWithoutBoxing(engine.RunIteration(new IterationData(IterationMode.Overhead, IterationStage.Jitting, jitIndex, invokeCount, unrollFactor))); // don't forget to JIT idle engine.Dummy2Action.Invoke(); var result = engine.RunIteration(new IterationData(IterationMode.Workload, IterationStage.Jitting, jitIndex, invokeCount, unrollFactor)); engine.Dummy3Action.Invoke(); engine.WriteLine(); return(TimeInterval.FromNanoseconds(result.Nanoseconds)); }
private static string GetRangeMessage([NotNull] double[] values, CultureInfo cultureInfo) { string Format(double value) => TimeInterval.FromNanoseconds(value).ToString(cultureInfo, "N2"); switch (values.Length) { case 0: return(null); case 1: return(Format(values.First())); case 2: return(Format(values.Min()) + ", " + Format(values.Max())); default: return(Format(values.Min()) + ".." + Format(values.Max())); } }
public static Threshold Create(ThresholdUnit unit, double value) { switch (unit) { case ThresholdUnit.Ratio: return(new RelativeThreshold(value)); case ThresholdUnit.Nanoseconds: return(new AbsoluteTimeThreshold(TimeInterval.FromNanoseconds(value))); case ThresholdUnit.Microseconds: return(new AbsoluteTimeThreshold(TimeInterval.FromMicroseconds(value))); case ThresholdUnit.Milliseconds: return(new AbsoluteTimeThreshold(TimeInterval.FromMilliseconds(value))); case ThresholdUnit.Seconds: return(new AbsoluteTimeThreshold(TimeInterval.FromSeconds(value))); case ThresholdUnit.Minutes: return(new AbsoluteTimeThreshold(TimeInterval.FromMinutes(value))); default: throw new ArgumentOutOfRangeException(nameof(unit), unit, null); } }
[PublicAPI] public string ToString(CultureInfo cultureInfo) { var unit = TimeUnit.GetBestTimeUnit(Values); var builder = new StringBuilder(); builder.Append('['); builder.Append(TimeInterval.FromNanoseconds(Lower).ToString(unit, cultureInfo)); builder.Append(';'); builder.Append(TimeInterval.FromNanoseconds(Upper).ToString(unit, cultureInfo)); builder.Append(' '); builder.Append('{'); for (var i = 0; i < Values.Length; i++) { if (i != 0) { builder.Append("; "); } builder.Append(TimeInterval.FromNanoseconds(Values[i]).ToString(unit, cultureInfo)); } builder.Append('}'); return(builder.ToString()); }
public static Func <double, string> CreateNanosecondFormatter(this Histogram histogram, CultureInfo cultureInfo = null, string format = "0.000") { var timeUnit = TimeUnit.GetBestTimeUnit(histogram.Bins.SelectMany(bin => bin.Values).ToArray()); return(value => TimeInterval.FromNanoseconds(value).ToString(timeUnit, cultureInfo, format)); }
public MaxAbsoluteErrorAttribute(double nanoseconds) : base(Job.Default.WithMaxAbsoluteError(TimeInterval.FromNanoseconds(nanoseconds))) { }
public WelchTTestAbsoluteNanosecondsAttribute(double threshold) : base(BaselineScaledColumn.CreateWelchTTest(new AbsoluteHypothesis(TimeInterval.FromNanoseconds(threshold)))) { }
/// <summary> /// Gets the average duration of one operation. /// </summary> public TimeInterval GetAverageTime() => TimeInterval.FromNanoseconds(Nanoseconds / Operations);
public static Func <double, string> CreateNanosecondFormatter(this Statistics s, CultureInfo cultureInfo, string format = "N3") { var timeUnit = TimeUnit.GetBestTimeUnit(s.Mean); return(x => TimeInterval.FromNanoseconds(x).ToString(timeUnit, cultureInfo, format)); }