Browse Source

Speed up TPercentileTracker/TPercentileTrackerLg

old values:
NMonitoring::TPercentileTracker<4ul, 512ul, 15ul>
0.748282s
NMonitoring::TPercentileTrackerLg<4ul, 3ul, 15ul>
0.221432s

new values:
NMonitoring::TPercentileTracker<4ul, 512ul, 15ul>
0.640864s
NMonitoring::TPercentileTrackerLg<4ul, 3ul, 15ul>
0.205138s
dcherednik 1 year ago
parent
commit
db31d57343

+ 1 - 2
library/cpp/monlib/dynamic_counters/percentile/percentile.h

@@ -34,8 +34,7 @@ struct TPercentileTracker : public TPercentileBase {
 
     // shift frame (call periodically)
     void Update() {
-        TVector<size_t> totals(BUCKET_COUNT);
-        totals.resize(BUCKET_COUNT);
+        std::array<size_t, BUCKET_COUNT> totals;
         size_t total = 0;
         for (size_t i = 0; i < BUCKET_COUNT; ++i) {
             size_t item = Items[i].load(std::memory_order_relaxed);

+ 2 - 4
library/cpp/monlib/dynamic_counters/percentile/percentile_lg.h

@@ -1,7 +1,5 @@
 #pragma once
 
-#include <library/cpp/containers/stack_vector/stack_vec.h>
-
 #include <util/generic/bitops.h>
 
 #include <cmath>
@@ -140,7 +138,7 @@ struct TPercentileTrackerLg : public TPercentileBase {
 
     // Needed only for tests
     size_t GetPercentile(float threshold) {
-        TStackVec<size_t, ITEMS_COUNT> totals(ITEMS_COUNT);
+        std::array<size_t, ITEMS_COUNT> totals;
         size_t total = 0;
         for (size_t i = 0; i < ITEMS_COUNT; ++i) {
             total += Items[i].load();
@@ -156,7 +154,7 @@ struct TPercentileTrackerLg : public TPercentileBase {
 
     // shift frame (call periodically)
     void Update() {
-        TStackVec<size_t, ITEMS_COUNT> totals(ITEMS_COUNT);
+        std::array<size_t, ITEMS_COUNT> totals;
         size_t total = 0;
         for (size_t i = 0; i < ITEMS_COUNT; ++i) {
             size_t item = Items[i].load(std::memory_order_relaxed);