public Measurement RunIteration(IterationData data)
 {
     double nanoseconds = measure(data).Nanoseconds;
     var measurement = new Measurement(1, data.IterationMode, data.Index, data.InvokeCount * OperationsPerInvoke, nanoseconds);
     WriteLine(measurement.ToOutputLine());
     return measurement;
 }
示例#2
0
 [PublicAPI] public static bool IsWorkload(this Measurement measurement) => measurement.IterationMode == IterationMode.Workload;
示例#3
0
 public static bool Is(this Measurement measurement, IterationMode mode, IterationStage stage)
 => measurement.IterationMode == mode && measurement.IterationStage == stage;
示例#4
0
 [PublicAPI] public static bool IsOverhead(this Measurement measurement) => measurement.IterationMode == IterationMode.Overhead;
示例#5
0
 //TODO OPTIONAL ENCODING
 public static string ToStr(this Measurement run, Encoding encoding) =>
 $"{run.IterationMode}{run.IterationStage} {run.IterationIndex}: {run.Operations} op, {run.Nanoseconds.ToStr()} ns, {run.GetAverageNanoseconds().ToTimeStr(encoding ?? Encoding.ASCII)}/op";
示例#6
0
 /// <summary>
 /// Gets the average duration of one operation in nanoseconds.
 /// </summary>
 public static double GetAverageNanoseconds(this Measurement report) =>
 report.Nanoseconds / report.Operations;
示例#7
0
 /// <summary>
 /// Gets the number of operations performed per second (ops/sec).
 /// </summary>
 public static double GetOpsPerSecond(this Measurement report) =>
 report.Operations / (report.Nanoseconds / NanosecondsInSecond);
示例#8
0
        public Measurement RunIteration(IterationData data)
        {
            // Initialization
            long invokeCount = data.InvokeCount;
            int unrollFactor = data.UnrollFactor;
            long totalOperations = invokeCount * OperationsPerInvoke;
            var action = data.IterationMode.IsIdle() ? IdleAction : MainAction;

            GcCollect();

            // Measure
            var clock = Clock.Start();
            action(invokeCount / unrollFactor);
            var clockSpan = clock.Stop();

            GcCollect();

            // Results
            var measurement = new Measurement(0, data.IterationMode, data.Index, totalOperations, clockSpan.GetNanoseconds());
            if (!IsDiagnoserAttached) WriteLine(measurement.ToOutputLine());

            return measurement;
        }
示例#9
0
 public static string ToStr(this Measurement run) =>
 $"{run.IterationMode} {run.IterationIndex}: {run.Operations} op, {run.Nanoseconds.ToStr()} ns, {run.GetAverageNanoseconds().ToTimeStr()}/op";