public void Reset() { this.ExecutionEventBuffer = new CounterBuffer <CommandExecutionEventEnum>(this.ConfigSet.MetricsRollingStatisticalWindowInMilliseconds, this.ConfigSet.MetricsRollingStatisticalWindowBuckets); this.ExecutionLatencyBuffer = new IntegerPercentileBuffer(this.ConfigSet.MetricsRollingPercentileWindowInMilliseconds, this.ConfigSet.MetricsRollingPercentileWindowBuckets, this.ConfigSet.MetricsRollingPercentileBucketSize); this.TotalExecutionLatencyBuffer = new IntegerPercentileBuffer(this.ConfigSet.MetricsRollingPercentileWindowInMilliseconds, this.ConfigSet.MetricsRollingPercentileWindowBuckets, this.ConfigSet.MetricsRollingPercentileBucketSize); this._lastUpdateExecutionEventSnapshotTimeInMilliseconds = 0L; this._executionEventDistributionSnapshot = new Dictionary <CommandExecutionEventEnum, int>(); this._executionEventHealthSnapshot = new CommandExecutionHealthSnapshot(0, 0); this._lastGetLatencyBufferSnapshotTimeInMilliseconds = 0L; this._latencyBufferSnapshot = new List <long>(); this._lastGetTotalLatencyBufferSnapshotTimeInMilliseconds = 0L; this._totalLatencyBufferSnapshot = new List <long>(); }
public async Task Insert(Vector3[] data) { uint gx, gy, gz; shader.GetKernelThreadGroupSizes(computeLeavesKernel, out gx, out gy, out gz); int numGroupsX = Mathf.CeilToInt((float)data.Length / gx); using (var leaves = new StructuredBuffer <int>(data.Length)) using (var leafCount = new RawBuffer <uint>(1)) using (var keys = new CounterBuffer <int>(data.Length)) using (var points = new StructuredBuffer <Vector3>(data.Length)) { points.SetData(data); shader.SetFloats("size", bounds.size.x, bounds.size.y, bounds.size.z); shader.SetFloats("min_corner", bounds.min.x, bounds.min.y, bounds.min.z); shader.SetInt("max_depth", maxDepth); shader.SetInt("point_count", data.Length); shader.SetBuffer(computeLeavesKernel, "leaves", leaves.Buffer); shader.SetBuffer(computeLeavesKernel, "points", points.Buffer); shader.Dispatch(computeLeavesKernel, numGroupsX, 1, 1); sorter.Sort(leaves, data.Length); shader.SetBuffer(markUniqueLeavesKernel, "leaves", leaves.Buffer); shader.SetBuffer(markUniqueLeavesKernel, "unique", keys.Buffer); shader.Dispatch(markUniqueLeavesKernel, numGroupsX, 1, 1); compactor.Compact(leaves, keys, data.Length); keys.CopyCount(indirectArgs); shader.SetBuffer(computeArgsKernel, "args", indirectArgs.Buffer); shader.Dispatch(computeArgsKernel, 1, 1, 1); keys.CopyCount(leafCount); shader.SetBuffer(subdivideKernel, "leaf_count", leafCount.Buffer); shader.SetBuffer(subdivideKernel, "leaves", leaves.Buffer); shader.SetBuffer(subdivideKernel, "nodes", nodes.Buffer); for (int i = 0; i < maxDepth; i++) { shader.SetInt("current_level", i); shader.DispatchIndirect(subdivideKernel, indirectArgs.Buffer); } nodeData = await nodes.GetDataAsync(); nodeCount = (int)nodes.GetCounterValue(); } }
public Octree(Bounds bounds, int maxDepth = 5) { indirectArgs = new ArgsBuffer(); int maxNodes = 0; for (int i = 1; i <= maxDepth; i++) { int res = 1 << i; maxNodes += res * res * res; } nodes = new CounterBuffer <Node>(maxNodes, 1); nodes.SetData(new Node[maxNodes]); this.bounds = bounds; this.maxDepth = maxDepth; }
private void Reset() { if (_timeBufferConfig == null) { _timeBufferConfig = GetCounterBufferConfig(); _counterBuffer = new CounterBuffer <bool>(_timeBufferConfig.BufferTimeWindow, _timeBufferConfig.BufferTimeWindow / _timeBufferConfig.BucketTimeWindow); return; } TimeBufferConfig newConfig = GetCounterBufferConfig(); if (_timeBufferConfig.Equals(newConfig)) { return; } var message = string.Format("Count buffer reset due to config change, new config: {0}", newConfig); _logger.Info(message, _loadBalancerContext.AdditionalInfo); _timeBufferConfig = newConfig; _counterBuffer = new CounterBuffer <bool>(_timeBufferConfig.BufferTimeWindow, _timeBufferConfig.BufferTimeWindow / _timeBufferConfig.BucketTimeWindow); }