in src/beanmachine/graph/perf_report.cpp [186:262]
void Graph::_produce_performance_report(
uint num_samples,
InferenceType algorithm,
uint seed) {
_performance_report = "";
JSON js;
if (!_collect_performance_data)
return;
uint edge_count = 0;
uint factor_count = 0;
uint const_count = 0;
uint dist_count = 0;
uint op_count = 0;
uint add_count = 0;
for (uint node_id = 0; node_id < static_cast<uint>(nodes.size()); node_id++) {
Node* node = nodes[node_id].get();
edge_count += static_cast<uint>(node->in_nodes.size());
switch (node->node_type) {
case NodeType::FACTOR:
factor_count += 1;
break;
case NodeType::CONSTANT:
const_count += 1;
break;
case NodeType::DISTRIBUTION:
dist_count += 1;
break;
case NodeType::OPERATOR: {
op_count += 1;
auto op = static_cast<oper::Operator*>(node);
if (op->op_type == OperatorType::ADD) {
add_count += 1;
}
break;
}
default:
break;
}
}
js.start_object();
js.text("title", "Bean Machine Graph performance report");
js.date("generated_at", system_clock::now());
js.number("num_samples", static_cast<long>(num_samples));
js.number("algorithm", static_cast<uint>(algorithm));
js.number("seed", seed);
js.number("node_count", static_cast<long>(nodes.size()));
js.number("edge_count", static_cast<long>(edge_count));
js.number("factor_count", static_cast<long>(factor_count));
js.number("dist_count", static_cast<long>(dist_count));
js.number("const_count", static_cast<long>(const_count));
js.number("op_count", static_cast<long>(op_count));
js.number("add_count", static_cast<long>(add_count));
js.member("profiler_data");
js.start_array();
for (auto e : profiler_data.events) {
js.comma();
js.start_object();
js.boolean("begin", e.begin);
js.event("kind", e.kind);
js.ticks("timestamp", e.timestamp);
js.end_object();
}
js.end_array();
js.member("det_supp_count");
js.start_array();
for (auto pair : profiler_data.det_supp_count) {
js.comma();
js.number(pair.second);
}
js.end_array();
js.end_object();
_performance_report = js.str();
}