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)); }
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)); }
/// <summary> /// 触发触发器 /// </summary> protected void Fire() { if (TargetJob != null) { TargetJob.Run(); } }
/// <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()); }
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)); }
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)); }
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)); }
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)); }
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)); }
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); }