Ejemplo n.º 1
0
        public RunResults Run()
        {
            if (!isJitted || !isPreAllocated)
            {
                throw new Exception("You must call PreAllocate() and Jitting() first!");
            }

            long invokeCount = InvocationCount;
            IReadOnlyList <Measurement> idle = null;

            if (Strategy != RunStrategy.ColdStart)
            {
                invokeCount = pilotStage.Run();

                if (EvaluateOverhead)
                {
                    warmupStage.RunIdle(invokeCount, UnrollFactor);
                    idle = targetStage.RunIdle(invokeCount, UnrollFactor);
                }

                warmupStage.RunMain(invokeCount, UnrollFactor);
            }

            var main = targetStage.RunMain(invokeCount, UnrollFactor);

            bool removeOutliers = TargetJob.ResolveValue(AccuracyMode.RemoveOutliersCharacteristic, Resolver);

            return(new RunResults(idle, main, removeOutliers));
        }
Ejemplo n.º 2
0
        public RunResults Run()
        {
            long invokeCount = InvocationCount;
            IReadOnlyList <Measurement> idle = null;

            if (Strategy != RunStrategy.ColdStart)
            {
                if (Strategy != RunStrategy.Monitoring)
                {
                    invokeCount = pilotStage.Run();

                    if (EvaluateOverhead)
                    {
                        warmupStage.RunIdle(invokeCount, UnrollFactor);
                        idle = targetStage.RunIdle(invokeCount, UnrollFactor);
                    }
                }

                warmupStage.RunMain(invokeCount, UnrollFactor, forceSpecific: Strategy == RunStrategy.Monitoring);
            }

            Host.BeforeMainRun();

            var main = targetStage.RunMain(invokeCount, UnrollFactor, forceSpecific: Strategy == RunStrategy.Monitoring);

            Host.AfterMainRun();

            var workGcHasDone = includeMemoryStats
                ? MeasureGcStats(new IterationData(IterationMode.MainTarget, 0, invokeCount, UnrollFactor))
                : GcStats.Empty;

            var outlierMode = TargetJob.ResolveValue(AccuracyMode.OutlierModeCharacteristic, Resolver);

            return(new RunResults(idle, main, outlierMode, workGcHasDone, Encoding));
        }
Ejemplo n.º 3
0
 /// <summary>
 /// 触发触发器
 /// </summary>
 protected void Fire()
 {
     if (TargetJob != null)
     {
         TargetJob.Run();
     }
 }
Ejemplo n.º 4
0
        /// <returns>Perfect invocation count</returns>
        public long Run()
        {
            // If InvocationCount is specified, pilot stage should be skipped
            if (TargetJob.HasValue(RunMode.InvocationCountCharacteristic))
            {
                return(TargetJob.Run.InvocationCount);
            }

            // Here we want to guess "perfect" amount of invocation
            return(TargetJob.HasValue(RunMode.IterationTimeCharacteristic)
                ? RunSpecific()
                : RunAuto());
        }
Ejemplo n.º 5
0
        public RunResults Run()
        {
            if (Strategy.NeedsJitting() != isJitted)
            {
                throw new Exception($"You must{(Strategy.NeedsJitting() ? "" : " not")} call Jitting() first (Strategy = {Strategy})!");
            }
            if (!isPreAllocated)
            {
                throw new Exception("You must call PreAllocate() first!");
            }

            long invokeCount = InvocationCount;
            IReadOnlyList <Measurement> idle = null;

            if (Strategy != RunStrategy.ColdStart)
            {
                if (Strategy != RunStrategy.Monitoring)
                {
                    invokeCount = pilotStage.Run();

                    if (EvaluateOverhead)
                    {
                        warmupStage.RunIdle(invokeCount, UnrollFactor);
                        idle = targetStage.RunIdle(invokeCount, UnrollFactor);
                    }
                }

                warmupStage.RunMain(invokeCount, UnrollFactor, forceSpecific: Strategy == RunStrategy.Monitoring);
            }

            // we enable monitoring after pilot & warmup, just to ignore the memory allocated by these runs
            EnableMonitoring();
            if (IsDiagnoserAttached)
            {
                Host.BeforeMainRun();
            }
            forcedFullGarbageCollections = 0; // zero it in case the Engine instance is reused (InProcessToolchain)
            var initialGcStats = GcStats.ReadInitial(IsDiagnoserAttached);

            var main = targetStage.RunMain(invokeCount, UnrollFactor, forceSpecific: Strategy == RunStrategy.Monitoring);

            var finalGcStats      = GcStats.ReadFinal(IsDiagnoserAttached);
            var forcedCollections = GcStats.FromForced(forcedFullGarbageCollections);
            var workGcHasDone     = finalGcStats - forcedCollections - initialGcStats;

            bool removeOutliers = TargetJob.ResolveValue(AccuracyMode.RemoveOutliersCharacteristic, Resolver);

            return(new RunResults(idle, main, removeOutliers, workGcHasDone));
        }
Ejemplo n.º 6
0
        protected override JobHandle OnUpdate(JobHandle inputDeps)
        {
            var targetJob = new TargetJob
            {
                targetEntities     = _targetGroup.ToEntityArray(Allocator.TempJob),
                targetTranslations = _targetGroup.ToComponentDataArray <Translation>(Allocator.TempJob),
                commandBuffer      = _endSimulationEntityCommandBufferSystem.CreateCommandBuffer().ToConcurrent()
            };

            var jobHandle = targetJob.Schedule(this, inputDeps);

            _endSimulationEntityCommandBufferSystem.AddJobHandleForProducer(jobHandle);

            return(jobHandle);
        }
        protected override JobHandle OnUpdate(JobHandle inputDeps)
        {
            if (Time.frameCount % 100 == 0)
            {
                // I need to call this here to mutate the rng state, because the threads dont?
                _rng.NextFloat3();
            }

            TargetJob targetJob = new TargetJob
            {
                baseSeed   = _rng.state,
                frameCount = Time.frameCount
            };

            return(targetJob.Schedule(this, inputDeps));
        }
Ejemplo n.º 8
0
        public RunResults Run()
        {
            long invokeCount = InvocationCount;
            IReadOnlyList <Measurement> idle = null;

            if (EngineEventSource.Log.IsEnabled())
            {
                EngineEventSource.Log.BenchmarkStart(BenchmarkName);
            }

            if (Strategy != RunStrategy.ColdStart)
            {
                if (Strategy != RunStrategy.Monitoring)
                {
                    invokeCount = pilotStage.Run();

                    if (EvaluateOverhead)
                    {
                        warmupStage.RunOverhead(invokeCount, UnrollFactor);
                        idle = actualStage.RunOverhead(invokeCount, UnrollFactor);
                    }
                }

                warmupStage.RunWorkload(invokeCount, UnrollFactor, Strategy);
            }

            Host.BeforeMainRun();

            var main = actualStage.RunWorkload(invokeCount, UnrollFactor, forceSpecific: Strategy == RunStrategy.Monitoring);

            Host.AfterMainRun();

            (GcStats workGcHasDone, ThreadingStats threadingStats) = includeExtraStats
                ? GetExtraStats(new IterationData(IterationMode.Workload, IterationStage.Actual, 0, invokeCount, UnrollFactor))
                : (GcStats.Empty, ThreadingStats.Empty);

            if (EngineEventSource.Log.IsEnabled())
            {
                EngineEventSource.Log.BenchmarkStop(BenchmarkName);
            }

            var outlierMode = TargetJob.ResolveValue(AccuracyMode.OutlierModeCharacteristic, Resolver);

            return(new RunResults(idle, main, outlierMode, workGcHasDone, threadingStats, Encoding));
        }
Ejemplo n.º 9
0
        public RunResults Run()
        {
            if (Strategy.NeedsJitting() != isJitted)
            {
                throw new Exception($"You must{(Strategy.NeedsJitting() ? "" : " not")} call Jitting() first (Strategy = {Strategy})!");
            }

            long invokeCount = InvocationCount;
            IReadOnlyList <Measurement> idle = null;

            if (Strategy != RunStrategy.ColdStart)
            {
                if (Strategy != RunStrategy.Monitoring)
                {
                    invokeCount = pilotStage.Run();

                    if (EvaluateOverhead)
                    {
                        warmupStage.RunIdle(invokeCount, UnrollFactor);
                        idle = targetStage.RunIdle(invokeCount, UnrollFactor);
                    }
                }

                warmupStage.RunMain(invokeCount, UnrollFactor, forceSpecific: Strategy == RunStrategy.Monitoring);
            }

            Host.BeforeMainRun();

            var main = targetStage.RunMain(invokeCount, UnrollFactor, forceSpecific: Strategy == RunStrategy.Monitoring);

            Host.AfterMainRun();

            var workGcHasDone = includeMemoryStats
                ? MeasureGcStats(new IterationData(IterationMode.MainTarget, 0, invokeCount, UnrollFactor))
                : GcStats.Empty;

            bool removeOutliers = TargetJob.ResolveValue(AccuracyMode.RemoveOutliersCharacteristic, Resolver);

            return(new RunResults(idle, main, removeOutliers, workGcHasDone));
        }
Ejemplo n.º 10
0
        public RunResults Run()
        {
            if (!isJitted || !isPreAllocated)
            {
                throw new Exception("You must call PreAllocate() and Jitting() first!");
            }

            long invokeCount = InvocationCount;
            IReadOnlyList <Measurement> idle = null;

            if (Strategy != RunStrategy.ColdStart)
            {
                invokeCount = pilotStage.Run();

                if (EvaluateOverhead)
                {
                    warmupStage.RunIdle(invokeCount, UnrollFactor);
                    idle = targetStage.RunIdle(invokeCount, UnrollFactor);
                }

                warmupStage.RunMain(invokeCount, UnrollFactor);
            }

            // we enable monitoring after pilot & warmup, just to ignore the memory allocated by these runs
            EnableMonitoring();
            var initialGcStats = GcStats.ReadInitial(IsDiagnoserAttached);

            var main = targetStage.RunMain(invokeCount, UnrollFactor);

            var finalGcStats      = GcStats.ReadFinal(IsDiagnoserAttached);
            var forcedCollections = GcStats.FromForced(forcedFullGarbageCollections);
            var workGcHasDone     = finalGcStats - forcedCollections - initialGcStats;

            bool removeOutliers = TargetJob.ResolveValue(AccuracyMode.RemoveOutliersCharacteristic, Resolver);

            return(new RunResults(idle, main, removeOutliers, workGcHasDone));
        }
Ejemplo n.º 11
0
        protected override JobHandle OnUpdate(JobHandle inputDeps)
        {
            var closestTargets = new NativeArray <Entity>(_noTargetHeroes.CalculateEntityCount(),
                                                          Allocator.TempJob);
            var targetJob = new TargetJob
            {
                targetEntities     = _targetGroup.ToEntityArray(Allocator.TempJob),
                targetTranslations = _targetGroup.ToComponentDataArray <Translation>(Allocator.TempJob),
                closestTargets     = closestTargets
            };

            var addTargetJob = new AddTargetJob
            {
                closestTargets = closestTargets,
                commandBuffer  = _endSimulationEntityCommandBufferSystem.CreateCommandBuffer().ToConcurrent()
            };

            var jobHandle       = targetJob.Schedule(this, inputDeps);
            var addTargetHandle = addTargetJob.Schedule(this, jobHandle);

            _endSimulationEntityCommandBufferSystem.AddJobHandleForProducer(addTargetHandle);

            return(addTargetHandle);
        }