Skip to content
Snippets Groups Projects
Commit 9d86ea28 authored by Adam Edward Barton's avatar Adam Edward Barton
Browse files

Merge branch 'calibpeb-reserverob' into 'master'

MTCalibPeb: do some ROB prefetch calls in default options

See merge request atlas/athena!33860
parents 42d152a8 58cb9c23
No related branches found
No related tags found
No related merge requests found
......@@ -68,18 +68,18 @@ rob_list = [
]
rob_access_dict = {
'01 :GET:RND20: Retrieve ': rob_list,
'02 :GET:RND10: Retrieve ': rob_list,
'03 :GET:RND5: Retrieve ': rob_list,
'04 :GET:RND10: Retrieve ': rob_list,
'05 :GET:RND20: Retrieve ': rob_list,
'06 :GET:RND50: Retrieve ': rob_list,
'07 :GET:RND10: Retrieve ': rob_list,
'08 :GET:RND5: Retrieve ': rob_list,
'09 :GET:RND20: Retrieve ': rob_list,
'10 :GET:RND20: Retrieve ': rob_list,
'11 :GET:RND10: Retrieve ': rob_list,
'12 :GET:RND10: Retrieve ': rob_list
'01 :ADDGET:RND20:': rob_list, # Prefetch+Retrieve 20 random ROBs from rob_list
'02 :GET:RND10: ': rob_list, # Retrieve 10 random ROBs from rob_list
'03 :GET:RND5: ': rob_list, # Retrieve 5 random ROBs from rob_list
'04 :ADD:RND10: ': rob_list, # Prefetch 10 random ROBs from rob_list
'05 :ADD:RND20: ': rob_list, # Prefetch 20 random ROBs from rob_list
'06 :ADDGET:RND50:': rob_list, # Prefetch+Retrieve 50 random ROBs from rob_list
'07 :ADDGET:RND10:': rob_list, # Prefetch+Retrieve 10 random ROBs from rob_list
'08 :ADDGET:RND5: ': rob_list, # Prefetch+Retrieve 5 random ROBs from rob_list
'09 :GET:RND20: ': rob_list, # Retrieve 20 random ROBs from rob_list
'10 :ADDGET:RND20:': rob_list, # Prefetch+Retrieve 20 random ROBs from rob_list
'11 :GET:RND10: ': rob_list, # Retrieve 10 random ROBs from rob_list
'12 :ADDGET:RND10:': rob_list # Prefetch+Retrieve 10 random ROBs from rob_list
}
class MTCalibPebHypoOptions:
......
......@@ -200,35 +200,31 @@ StatusCode MTCalibPebHypoTool::decide(const MTCalibPebHypoTool::Input& input) co
else robs = robVec;
// Execute the ROB requests
switch (instr.type) {
case ROBRequestInstruction::Type::ADD: {
// Prefetch ROBs
ATH_MSG_DEBUG("Preloading ROBs: " << idsToString(robs));
m_robDataProviderSvc->addROBData(input.eventContext, robs, name()+"-ADD");
break;
}
case ROBRequestInstruction::Type::GET: {
// Retrieve ROBs
ATH_MSG_DEBUG("Retrieving ROBs: " << idsToString(robs));
// VROBFRAG is a typedef for std::vector<const eformat::ROBFragment<const uint32_t*>*>
IROBDataProviderSvc::VROBFRAG robFragments;
m_robDataProviderSvc->getROBData(input.eventContext, robs, robFragments, name()+"-GET");
ATH_MSG_DEBUG("Number of ROBs retrieved: " << robFragments.size());
if (!robFragments.empty())
ATH_MSG_DEBUG("List of ROBs found: " << std::endl << format(robFragments));
break;
}
case ROBRequestInstruction::Type::COL: {
// Event building
ATH_MSG_DEBUG("Requesting full event ROBs");
int nrobs = m_robDataProviderSvc->collectCompleteEventData(input.eventContext, name()+"-COL");
ATH_MSG_DEBUG("Number of ROBs retrieved: " << nrobs);
break;
}
default: {
ATH_MSG_ERROR("Invalid ROB request instruction " << instr.toString());
return StatusCode::FAILURE;
}
using ReqType = ROBRequestInstruction::Type;
if (instr.type == ReqType::ADD || instr.type == ReqType::ADDGET) {
// Prefetch ROBs
ATH_MSG_DEBUG("Preloading ROBs: " << idsToString(robs));
m_robDataProviderSvc->addROBData(input.eventContext, robs, name()+"-ADD");
}
if (instr.type == ReqType::GET || instr.type == ReqType::ADDGET) {
// Retrieve ROBs
ATH_MSG_DEBUG("Retrieving ROBs: " << idsToString(robs));
// VROBFRAG is a typedef for std::vector<const eformat::ROBFragment<const uint32_t*>*>
IROBDataProviderSvc::VROBFRAG robFragments;
m_robDataProviderSvc->getROBData(input.eventContext, robs, robFragments, name()+"-GET");
ATH_MSG_DEBUG("Number of ROBs retrieved: " << robFragments.size());
if (!robFragments.empty())
ATH_MSG_DEBUG("List of ROBs found: " << std::endl << format(robFragments));
}
if (instr.type == ReqType::COL) {
// Event building
ATH_MSG_DEBUG("Requesting full event ROBs");
int nrobs = m_robDataProviderSvc->collectCompleteEventData(input.eventContext, name()+"-COL");
ATH_MSG_DEBUG("Number of ROBs retrieved: " << nrobs);
}
if (instr.type == ReqType::INVALID) {
ATH_MSG_ERROR("Invalid ROB request instruction " << instr.toString());
return StatusCode::FAILURE;
}
// Sleep between ROB requests
......@@ -290,6 +286,7 @@ MTCalibPebHypoTool::ROBRequestInstruction::ROBRequestInstruction(std::string_vie
#endif
if (str.find(":ADD:")!=std::string_view::npos) type = ROBRequestInstruction::ADD;
else if (str.find(":GET:")!=std::string_view::npos) type = ROBRequestInstruction::GET;
else if (str.find(":ADDGET:")!=std::string_view::npos) type = ROBRequestInstruction::ADDGET;
else if (str.find(":COL:")!=std::string_view::npos) type = ROBRequestInstruction::COL;
if (size_t pos=str.find(":RND"); pos!=std::string_view::npos) {
size_t firstDigit=pos+4;
......@@ -307,6 +304,7 @@ const std::string MTCalibPebHypoTool::ROBRequestInstruction::toString() const {
if (type==INVALID) s+="INVALID";
else if (type==ADD) s+="ADD";
else if (type==GET) s+="GET";
else if (type==ADDGET) s+="ADDGET";
else if (type==COL) s+="COL";
s += ", isRandom=";
s += isRandom ? "true" : "false";
......
/*
Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
*/
#ifndef TRIGEXPARTIALEB_MTCALIBPEBHYPOTOOL_H
......@@ -52,7 +52,7 @@ private:
/// String form for debug print-outs
const std::string toString() const;
/// Type of instruction
enum Type {INVALID, ADD, GET, COL} type = INVALID;
enum Type {INVALID, ADD, GET, ADDGET, COL} type = INVALID;
/// Flag switching requests of a random sub-sample of the ROB list
bool isRandom = false;
/// Size of random request
......@@ -83,11 +83,11 @@ private:
Gaudi::Property<std::map<std::string,std::vector<uint32_t> > > m_robAccessDictProp {
this, "ROBAccessDict", {},
"Dictionary of prefetch/retrieve operations with given ROB IDs. The value is a vector of ROB IDs. "
"The string key has to contain :ADD: (prefetch), :GET: (retrieve), or :COL: (full event building). :ADD: and :GET: "
"may be also appended with :RNDX: where X is an integer. In this case, random X ROBs will be prefetched/retrieved "
"from the provided list, e.g. :GET:RND10: retrieves 10 random ROBs from the list. Otherwise the full list is used. "
"Note std::map is sorted by std::less<std::string>, so starting the key with a number may be needed to enforce "
"ordering, e.g. '01 :ADD:RND10:'."
"The string key has to contain :ADD: (prefetch), :GET: (retrieve), :ADDGET: (prefetch+retrieve) or :COL: (full "
"event building). :ADD:, :GET: and :ADDGET: may be also appended with :RNDX: where X is an integer. In this case, "
"random X ROBs will be prefetched/retrieved from the provided list, e.g. :GET:RND10: retrieves 10 random ROBs from "
"the list. Otherwise the full list is used. Note std::map is sorted by std::less<std::string>, so starting the key "
"with a number may be needed to enforce ordering, e.g. '01 :ADD:RND10:'."
};
Gaudi::Property<unsigned int> m_timeBetweenRobReqMillisec {
this, "TimeBetweenROBReqMillisec", 0,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment