Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-10-20 08:45:51

0001 #pragma once
0002 
0003 #include <vector>
0004 
0005 #include "EventTiming.hh"
0006 #include "NP.hh"
0007 
0008 namespace EventTimingProfileReport
0009 {
0010 inline constexpr const char* JUNCTURE =
0011     "EventTimingProfile__Configure,SEvt__BeginOfRun,SEvt__EndOfRun,EventTimingProfile__Configure";
0012 
0013 inline constexpr const char* RANGES = R"(
0014     EventTimingProfile__Configure:CSGFoundry__Load_HEAD           ## init
0015     CSGFoundry__Load_HEAD:CSGFoundry__Load_TAIL                   ## load_geom
0016     CSGOptiX__Create_HEAD:CSGOptiX__Create_TAIL                   ## upload_geom
0017     A%0.3d_QSim__simulate_HEAD:A%0.3d_QSim__simulate_LBEG         ## slice_genstep
0018     A%0.3d_QSim__simulate_PRUP:A%0.3d_QSim__simulate_PREL         ## upload genstep slice
0019     A%0.3d_QSim__simulate_PREL:A%0.3d_QSim__simulate_POST         ## simulate slice
0020     A%0.3d_QSim__simulate_POST:A%0.3d_QSim__simulate_DOWN         ## download slice
0021     A%0.3d_QSim__simulate_LEND:A%0.3d_QSim__simulate_PCAT         ## concat slices
0022     A%0.3d_QSim__simulate_BRES:A%0.3d_QSim__simulate_TAIL         ## save arrays
0023    )";
0024 
0025 inline NP* MakeEventTimingProfileArray(
0026     const std::vector<EventTimingProfileRecord>& records)
0027 {
0028     NP* profile = NP::Make<std::int64_t>(records.size(), 4);
0029     profile->labels = new std::vector<std::string>{
0030         "wall_time_us", "steady_time_ns", "vm_kb", "rss_kb"};
0031     std::int64_t* values = profile->values<std::int64_t>();
0032     for (std::size_t index = 0; index < records.size(); ++index)
0033     {
0034         const EventTimingProfileRecord& record = records[index];
0035         values[4 * index + 0] = record.sample.wall_time_us;
0036         values[4 * index + 1] = record.sample.steady_time_ns;
0037         values[4 * index + 2] = record.sample.vm_kb;
0038         values[4 * index + 3] = record.sample.rss_kb;
0039         profile->names.push_back(record.name);
0040     }
0041     return profile;
0042 }
0043 
0044 inline NP* MakeEventTimingRanges(
0045     const std::vector<EventTimingProfileRecord>& records)
0046 {
0047     std::vector<std::string>  keys;
0048     std::vector<std::int64_t> steady_time_us;
0049     keys.reserve(records.size());
0050     steady_time_us.reserve(records.size());
0051     for (const EventTimingProfileRecord& record : records)
0052     {
0053         keys.push_back(record.name);
0054         steady_time_us.push_back(record.sample.steady_time_ns / 1000);
0055     }
0056     return NP::MakeMetaKVS_ranges2(keys, steady_time_us, RANGES);
0057 }
0058 } // namespace EventTimingProfileReport