6#include "GaudiKernel/ISvcLocator.h"
7#include "GaudiKernel/ConcurrencyFlags.h"
8#include "GaudiKernel/EventContext.h"
15 : base_class( name, svc ) {}
26 size_t nslots = Gaudi::Concurrency::ConcurrencyFlags::numConcurrentEvents();
31 ATH_MSG_INFO(
"initialize structures of size " << nslots);
37 m = std::make_unique<std::mutex>();
40 return StatusCode::SUCCESS;
50 std::map<std::string,unsigned int> sum;
51 std::map<std::string,unsigned int> sumSq;
52 std::map<std::string,unsigned int> num;
54 for (
const auto &ve :
m_times) {
55 for (
const auto &e : ve) {
56 sum[e.algName] += e.sleep_time;
57 sumSq[e.algName] += e.sleep_time * e.sleep_time;
62 info() <<
"listing timing by alg:";
63 for (
const auto &s : sum) {
64 float avg =
static_cast<float>(s.second)/num[s.first];
65 float sig = sqrt( ( sumSq[s.first] - 2*s.second*avg + num[s.first]*avg*avg )/(num[s.first]) );
66 info() <<
"\n " << s.first
67 <<
" avg: " << avg <<
" sig: " << sig;
71 return StatusCode::SUCCESS;
77HiveExSvc::add(
const EventContext& ctx,
const std::string& algName,
const unsigned int& time) {
89 const EventContext::ContextID_t slot = ctx.slot();
90 std::lock_guard<std::mutex>
lock ( *
m_locks[slot] );
Simple service that accumulates timings for Algorithms by name.
virtual void lock()=0
Interface to allow an object to lock itself when made const in SG.
virtual void add(const EventContext &, const std::string &, const unsigned int &) override
std::vector< std::unique_ptr< std::mutex > > m_locks
std::vector< std::list< tDat > > m_times
HiveExSvc(const std::string &name, ISvcLocator *svc)
virtual StatusCode finalize() override
virtual StatusCode initialize() override