Пример #1
0
        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);
 }
Пример #3
0
        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));
        }
Пример #4
0
        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));
            }
        }
Пример #6
0
        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));
            }
        }
Пример #7
0
        /// <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));
        }
Пример #8
0
        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()));
            }
        }
Пример #9
0
        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);
            }
        }
Пример #10
0
        [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));
        }
Пример #12
0
 public MaxAbsoluteErrorAttribute(double nanoseconds) : base(Job.Default.WithMaxAbsoluteError(TimeInterval.FromNanoseconds(nanoseconds)))
 {
 }
 public WelchTTestAbsoluteNanosecondsAttribute(double threshold)
     : base(BaselineScaledColumn.CreateWelchTTest(new AbsoluteHypothesis(TimeInterval.FromNanoseconds(threshold))))
 {
 }
Пример #14
0
 /// <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));
        }