1971 using namespace asg::msgUserCode;
1977 throw std::runtime_error (
"tool does not support systematics");
1978 std::cout <<
"applying systematic variation: " <<
sysName << std::endl;
1980 throw std::runtime_error (
"failed to apply systematic variation: " +
sysName);
1984 auto *myTool =
dynamic_cast<ColumnarTool<ColumnarModeArray>*
>(&
tool);
1985 if (!containerRenames.empty())
1987 ColumnVectorHeader columnHeader;
1988 ToolColumnVectorMap toolWrapper (columnHeader, *myTool);
1993 Benchmark benchmark (
name, batchSize);
1994 Benchmark benchmarkCheck (
name +
"(column check)", batchSize);
1995 Benchmark benchmarkEmpty (
"empty");
1997 const std::vector<ColumnarOffsetType>* offsetColumn =
nullptr;
1998 if (!container.empty())
2002 throw std::runtime_error (
"missing size column: " + container);
2003 offsetColumn =
iter->second;
2006 const auto numberOfEvents =
tree->GetEntries();
2010 bool endLoop =
false;
2011 for (; !endLoop; ++
entry)
2015 benchmarkEmpty.startTimer ();
2016 benchmarkEmpty.stopTimer ();
2018 ColumnVectorData columnData (&columnHeader);
2019 TestUtils::ToolWrapperData toolColumnData (&columnData, &toolWrapper);
2024 if (
entry + 1 == numberOfEvents)
2025 std::cout <<
"average size: " <<
float (
totalSize + offsetColumn->back()) / numberOfEvents << std::endl;
2027 if ((
entry + 1) % batchSize == 0)
2032 column->setData (toolColumnData);
2033 benchmarkCheck.startTimer ();
2034 columnData.checkData ();
2035 benchmarkCheck.stopTimer ();
2036 benchmark.startTimer ();
2037 columnData.callNoCheck (*myTool);
2038 benchmark.stopTimer ();
2045 std::cout <<
"Entries in file: " << numberOfEvents << std::endl;
2046 std::cout <<
"Total entries read: " <<
entry << std::endl;
2047 const float emptyTime = benchmarkEmpty.getEntryTime(0).value();
2048 std::cout <<
"Empty benchmark time: " << emptyTime <<
"ns" << std::endl;
2049 benchmarkEmpty.setSilence();
2051 std::vector<TestUtils::BranchPerfData> branchPerfData;
2052 TestUtils::BranchPerfData
summary {.name =
"total", .timeRead = 0, .timeUnpack = 0, .entrySize = 0, .uncompressedSize = 0, .numBaskets = 0};
2055 branchPerfData.push_back (
column->getPerfData (emptyTime));
2056 summary.timeRead.value() += branchPerfData.back().timeRead.value_or(0);
2057 summary.timeUnpack.value() += branchPerfData.back().timeUnpack.value_or(0);
2058 summary.entrySize.value() += branchPerfData.back().entrySize.value_or(0);
2059 summary.uncompressedSize.value() += branchPerfData.back().uncompressedSize.value_or(0);
2060 summary.numBaskets.value() += branchPerfData.back().numBaskets.value_or(0);
2062 std::sort (branchPerfData.begin(), branchPerfData.end(), [] (
const auto&
a,
const auto&
b) {return a.name < b.name;});
2063 branchPerfData.insert (branchPerfData.end(),
summary);
2064 const std::size_t nameWidth = std::max_element (branchPerfData.begin(), branchPerfData.end(), [] (
const auto&
a,
const auto&
b) {return a.name.size() < b.name.size();})->name.size();
2065 std::string
header =
std::format (
"{:{}} | read(ns) | unpack(ns) | size(B) | rate(MB/s) | compression | baskets",
"branch name", nameWidth);
2066 std::cout <<
"\n" <<
header << std::endl;
2067 std::cout << std::string (
header.size(),
'-') << std::endl;
2068 for (
auto&
data : branchPerfData)
2070 if (
data.name ==
"total")
2071 std::cout << std::string (
header.size(),
'-') << std::endl;
2077 if (
data.timeUnpack)
2085 if (
data.timeRead &&
data.entrySize)
2086 std::cout <<
std::format (
"{:>11.1f} |", (
data.entrySize.value() / (
data.timeRead.value() * 1
e-3 * 1.024 * 1.024)));
2089 if (
data.entrySize &&
data.uncompressedSize)
2090 std::cout <<
std::format (
"{:>12.2f} |",
float (
data.uncompressedSize.value()) /
data.entrySize.value());
2093 if (
data.numBaskets)
2095 std::cout << std::endl;
2099 std::vector<TestUtils::ToolPerfData> toolPerfData;
2100 toolPerfData.emplace_back ();
2101 toolPerfData.back().name =
name;
2102 toolPerfData.back().timeCall = benchmark.getEntryTime(emptyTime);
2103 toolPerfData.back().timeCheck = benchmarkCheck.getEntryTime(emptyTime);
2104 benchmark.setSilence();
2105 benchmarkCheck.setSilence();
2106 const std::size_t nameWidth = std::max_element (toolPerfData.begin(), toolPerfData.end(), [] (
const auto&
a,
const auto&
b) {return a.name.size() < b.name.size();})->name.size();
2107 std::string
header =
std::format (
"{:{}} | call(ns) | check(ns)",
"tool name", nameWidth);
2108 std::cout <<
"\n" <<
header << std::endl;
2109 std::cout << std::string (
header.size(),
'-') << std::endl;
2110 for (
auto&
data : toolPerfData)
2119 std::cout << std::endl;
2125 #ifdef XAOD_STANDALONE
2133 #ifdef XAOD_STANDALONE
2134 Benchmark benchmarkEmptyClear (
name +
" empty clear");
2135 Benchmark benchmarkCallClear (
name +
" call clear");
2136 Benchmark benchmarkPrepClear (
name +
" prep clear");
2138 Benchmark benchmarkCall (
name +
" call");
2139 Benchmark benchmarkCallCopyRecord (
name +
" call copy-record");
2140 Benchmark benchmarkCallRetrieve (
name +
" call retrieve");
2141 Benchmark benchmarkPrep (
name +
" prep");
2142 Benchmark benchmarkPrepCopyRecord (
name +
" prep copy-record");
2143 Benchmark benchmarkPrepRetrieve (
name +
" prep retrieve");
2144 Benchmark benchmarkGetEntry (
name +
" getEntry");
2146 const auto numberOfEvents =
event.getEntries();
2147 #ifdef XAOD_STANDALONE
2148 std::cout <<
"known container keys:" << std::endl;
2149 for (
auto& [container,
key] : columnar::TestUtils::knownKeys)
2151 std::cout <<
std::format (
" {} -> 0x{:x}, 0x{:x} -> {}", container,
event.getHash (container),
key,
event.getName (
key)) << std::endl;
2154 if (numberOfEvents == 0){
2155 throw std::runtime_error (
"ColumnarPhysLiteTest: numberOfEvents == 0");
2167 benchmarkGetEntry.startTimer ();
2168 event.getEntry (
entry % numberOfEvents);
2169 benchmarkGetEntry.stopTimer ();
2170 benchmarkPrepRetrieve.startTimer ();
2172 benchmarkPrepRetrieve.stopTimer ();
2173 benchmarkPrepCopyRecord.startTimer ();
2174 static const std::string prepPostfix =
"Prep";
2176 benchmarkPrepCopyRecord.stopTimer ();
2177 benchmarkPrep.startTimer ();
2179 benchmarkPrep.stopTimer ();
2180 #ifdef XAOD_STANDALONE
2181 benchmarkPrepClear.startTimer ();
2183 benchmarkPrepClear.stopTimer ();
2185 benchmarkCallRetrieve.startTimer ();
2187 benchmarkCallRetrieve.stopTimer ();
2188 benchmarkCallCopyRecord.startTimer ();
2189 static const std::string callPostfix =
"Call";
2191 benchmarkCallCopyRecord.stopTimer ();
2192 benchmarkCall.startTimer ();
2194 benchmarkCall.stopTimer ();
2195 #ifdef XAOD_STANDALONE
2196 benchmarkCallClear.startTimer ();
2198 benchmarkCallClear.stopTimer ();
2199 benchmarkEmptyClear.startTimer ();
2201 benchmarkEmptyClear.stopTimer ();
2204 std::cout <<
"Total entries read: " <<
entry << std::endl;