Skip to content

Commit ca0fb49

Browse files
authored
Statistics service update (LLNL#406)
1 parent 872b738 commit ca0fb49

File tree

1 file changed

+54
-6
lines changed

1 file changed

+54
-6
lines changed

src/services/statistics/Statistics.cpp

+54-6
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
#include "caliper/CaliperService.h"
88

99
#include "caliper/Caliper.h"
10+
#include "caliper/SnapshotRecord.h"
1011

1112
#include "caliper/common/Log.h"
1213

1314
#include <atomic>
15+
#include <mutex>
1416

1517
using namespace cali;
1618

@@ -25,6 +27,10 @@ class Statistics
2527
std::atomic<unsigned> num_end;
2628
std::atomic<unsigned> num_set;
2729

30+
std::mutex lock;
31+
32+
unsigned max_snapshot_len;
33+
2834
unsigned num_threads;
2935
unsigned max_threads;
3036

@@ -34,15 +40,47 @@ class Statistics
3440
<< "\n Number of end events: " << num_end.load()
3541
<< "\n Number of set events: " << num_set.load()
3642
<< "\n Number of snapshots: " << num_snapshots.load()
43+
<< "\n Max snapshot entries: " << max_snapshot_len
3744
<< std::endl;
3845

39-
if (chn->id() == 0) {
46+
if (chn->id() == 0) {
4047
// only print this for the default channel
4148

4249
auto vec = c->get_all_attributes();
43-
50+
51+
unsigned n_global = 0;
52+
unsigned n_hidden_ref = 0;
53+
unsigned n_hidden_val = 0;
54+
unsigned n_val = 0;
55+
unsigned n_ref = 0;
56+
57+
for (const Attribute& attr : vec) {
58+
if (attr.is_hidden()) {
59+
if (attr.store_as_value())
60+
++n_hidden_val;
61+
else
62+
++n_hidden_ref;
63+
continue;
64+
}
65+
66+
if (attr.is_global()) {
67+
++n_global;
68+
continue;
69+
}
70+
71+
if(attr.store_as_value())
72+
++n_val;
73+
else
74+
++n_ref;
75+
}
76+
4477
Log(1).stream() << "Global statistics:"
4578
<< "\n Number of attributes: " << vec.size()
79+
<< "\n reference: " << n_ref
80+
<< "\n value: " << n_val
81+
<< "\n global: " << n_global
82+
<< "\n hidden: " << (n_hidden_ref + n_hidden_val)
83+
<< " (" << n_hidden_ref << " reference, " << n_hidden_val << " value)"
4684
<< "\n Number of threads: " << num_threads
4785
<< " (max " << max_threads << ")" << std::endl;
4886
}
@@ -53,15 +91,16 @@ class Statistics
5391
num_begin(0),
5492
num_end(0),
5593
num_set(0),
94+
max_snapshot_len(0),
5695
num_threads(1),
5796
max_threads(1)
5897
{ }
5998

6099
public:
61-
100+
62101
static void statistics_service_register(Caliper* c, Channel* chn) {
63102
Statistics* instance = new Statistics;
64-
103+
65104
chn->events().pre_begin_evt.connect(
66105
[instance](Caliper* c, Channel* chn, const Attribute&, const Variant&){
67106
++instance->num_begin;
@@ -75,9 +114,18 @@ class Statistics
75114
++instance->num_set;
76115
});
77116
chn->events().snapshot.connect(
78-
[instance](Caliper*,Channel*,int,const SnapshotRecord*,SnapshotRecord*){
117+
[instance](Caliper*,Channel*,int,const SnapshotRecord*,SnapshotRecord* rec){
79118
++instance->num_snapshots;
80119
});
120+
chn->events().process_snapshot.connect(
121+
[instance](Caliper*,Channel*,const SnapshotRecord*,const SnapshotRecord* rec){
122+
unsigned len = rec->num_nodes() + rec->num_immediate();
123+
124+
std::lock_guard<std::mutex>
125+
g(instance->lock);
126+
127+
instance->max_snapshot_len = std::max(len, instance->max_snapshot_len);
128+
});
81129

82130
if (chn->id() == 0) {
83131
chn->events().create_thread_evt.connect(
@@ -91,7 +139,7 @@ class Statistics
91139
--instance->num_threads;
92140
});
93141
}
94-
142+
95143
chn->events().finish_evt.connect(
96144
[instance](Caliper* c, Channel* chn){
97145
instance->finish_cb(c, chn);

0 commit comments

Comments
 (0)