Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

[15_0_X] Use HardwareResourcesDescription in ProcessConfiguration #47416

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions DQM/SiStripMonitorHardware/src/SiStripSpyEventMatcher.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
#include "FWCore/Framework/interface/ProductResolversFactory.h"
#include "FWCore/ServiceRegistry/interface/ActivityRegistry.h"
#include "FWCore/Utilities/interface/Exception.h"
#include "FWCore/Utilities/interface/GetPassID.h"
#include "FWCore/Version/interface/GetReleaseVersion.h"
#include "DQM/SiStripMonitorHardware/interface/SiStripSpyUtilities.h"
#include <algorithm>
Expand Down Expand Up @@ -57,8 +56,9 @@ namespace sistrip {
counterDiffMax_(config.getParameter<uint32_t>("CounterDiffMaxAllowed")),
productRegistry_(new edm::SignallingProductRegistry),
source_(constructSource(config.getParameter<edm::ParameterSet>("SpySource"))),
processConfiguration_(
new edm::ProcessConfiguration(std::string("@MIXING"), edm::getReleaseVersion(), edm::getPassID())),
// hardware information is not needed for the "overlay"
processConfiguration_(std::make_unique<edm::ProcessConfiguration>(
"@MIXING", edm::getReleaseVersion(), edm::HardwareResourcesDescription())),
eventPrincipal_() {
// Use the empty parameter set for the parameter set ID of our "@MIXING" process.
processConfiguration_->setParameterSetID(edm::ParameterSet::emptyParameterSetID());
Expand Down
6 changes: 3 additions & 3 deletions DQMServices/FwkIO/plugins/DQMRootOutputModule.cc
Original file line number Diff line number Diff line change
Expand Up @@ -528,8 +528,8 @@ void DQMRootOutputModule::startEndFile() {
processHistoryTree->Branch(kProcessConfigurationParameterSetIDBranch, &parameterSetID);
std::string releaseVersion;
processHistoryTree->Branch(kProcessConfigurationReleaseVersion, &releaseVersion);
std::string passID;
processHistoryTree->Branch(kProcessConfigurationPassID, &passID);
std::string hardwareResourcesSerialized;
processHistoryTree->Branch(kProcessConfigurationHardwareResources, &hardwareResourcesSerialized);

for (std::vector<edm::ProcessHistoryID>::iterator it = m_seenHistories.begin(), itEnd = m_seenHistories.end();
it != itEnd;
Expand All @@ -542,7 +542,7 @@ void DQMRootOutputModule::startEndFile() {
++itPC, ++index) {
processName = itPC->processName();
releaseVersion = itPC->releaseVersion();
passID = itPC->passID();
hardwareResourcesSerialized = itPC->hardwareResourcesDescriptionSerialized();
parameterSetID = itPC->parameterSetID().compactForm();
tbb::this_task_arena::isolate([&] { processHistoryTree->Fill(); });
}
Expand Down
3 changes: 2 additions & 1 deletion DQMServices/FwkIO/plugins/format.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,8 @@ static const char* const kPHIndexBranch = "Index";
static const char* const kProcessConfigurationProcessNameBranch = "ProcessName";
static const char* const kProcessConfigurationParameterSetIDBranch = "ParameterSetID";
static const char* const kProcessConfigurationReleaseVersion = "ReleaseVersion";
static const char* const kProcessConfigurationPassID = "PassID";
// misnomer, but kept for backwards (and forwards) compatibility
static const char* const kProcessConfigurationHardwareResources = "PassID";

static const char* const kParameterSetTree = "ParameterSets";
static const char* const kParameterSetBranch = "ParameterSetBlob";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@
#include <vector>

namespace edm {
/**
* Description of various hardware details stored as part of
* ProcessConfiguration
*
* An object can be serialized as a string. An object with empty
* content will be serialized as an empty string (this was a simple
* way to preserve backwards (and forwards) compatibility in
* ProcessHistory for the ID checksum)
*/
struct HardwareResourcesDescription {
HardwareResourcesDescription() = default;
explicit HardwareResourcesDescription(std::string_view serialized);
Expand Down
1 change: 0 additions & 1 deletion DataFormats/Provenance/interface/ModuleDescription.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ namespace edm {

std::string const& processName() const;
std::string const& releaseVersion() const;
std::string const& passID() const;
ParameterSetID const& mainParameterSetID() const;

// compiler-written copy c'tor, assignment, and d'tor are correct.
Expand Down
22 changes: 16 additions & 6 deletions DataFormats/Provenance/interface/ProcessConfiguration.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#ifndef DataFormats_Provenance_ProcessConfiguration_h
#define DataFormats_Provenance_ProcessConfiguration_h

#include "DataFormats/Provenance/interface/HardwareResourcesDescription.h"
#include "DataFormats/Provenance/interface/ParameterSetID.h"
#include "DataFormats/Provenance/interface/PassID.h"
#include "DataFormats/Provenance/interface/ProcessConfigurationID.h"
#include "DataFormats/Provenance/interface/ReleaseVersion.h"

Expand All @@ -14,18 +14,22 @@ namespace edm {
class ProcessConfiguration {
public:
ProcessConfiguration();
ProcessConfiguration(std::string const& procName, ReleaseVersion const& relVersion, PassID const& pass);
ProcessConfiguration(std::string const& procName,
ReleaseVersion const& relVersion,
HardwareResourcesDescription const& hwDescription);

ProcessConfiguration(std::string const& procName,
ParameterSetID const& pSetID,
ReleaseVersion const& relVersion,
PassID const& pass);
HardwareResourcesDescription const& hwDescription);

std::string const& processName() const { return processName_; }
ParameterSetID const& parameterSetID() const;
bool isParameterSetValid() const { return parameterSetID_.isValid(); }
ReleaseVersion const& releaseVersion() const { return releaseVersion_; }
PassID const& passID() const { return passID_; }
/// Note: this function parses the string on every call, so it should be called rarely
HardwareResourcesDescription hardwareResourcesDescription() const { return HardwareResourcesDescription(passID_); }
std::string const& hardwareResourcesDescriptionSerialized() const { return passID_; }
ProcessConfigurationID id() const;

void setParameterSetID(ParameterSetID const& pSetID);
Expand Down Expand Up @@ -55,7 +59,12 @@ namespace edm {
std::string processName_;
ParameterSetID parameterSetID_;
ReleaseVersion releaseVersion_;
PassID passID_;
// The passID_ really holds the HardwareResourcesDescription in a
// serialized form. Therefore the passID name is a complete
// misnomer, but was kept to make forward-compabitility easier
// (even if that not formally not supported, this construct is a
// precaution in case a further Run3 use case would surface)
std::string passID_;
Transients transient_;
};

Expand All @@ -65,7 +74,8 @@ namespace edm {

inline bool operator==(ProcessConfiguration const& a, ProcessConfiguration const& b) {
return a.processName() == b.processName() && a.parameterSetID() == b.parameterSetID() &&
a.releaseVersion() == b.releaseVersion() && a.passID() == b.passID();
a.releaseVersion() == b.releaseVersion() &&
a.hardwareResourcesDescriptionSerialized() == b.hardwareResourcesDescriptionSerialized();
}

inline bool operator!=(ProcessConfiguration const& a, ProcessConfiguration const& b) { return !(a == b); }
Expand Down
2 changes: 2 additions & 0 deletions DataFormats/Provenance/src/HardwareResourcesDescription.cc
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ namespace edm {
}

std::string HardwareResourcesDescription::serialize() const {
if (microarchitecture.empty() and cpuModels.empty() and selectedAccelerators.empty() and gpuModels.empty())
return "";
return edm::compactString::serialize(microarchitecture, cpuModels, selectedAccelerators, gpuModels);
}

Expand Down
5 changes: 2 additions & 3 deletions DataFormats/Provenance/src/ModuleDescription.cc
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,6 @@ namespace edm {

std::string const& ModuleDescription::releaseVersion() const { return processConfiguration().releaseVersion(); }

std::string const& ModuleDescription::passID() const { return processConfiguration().passID(); }

ParameterSetID const& ModuleDescription::mainParameterSetID() const {
return processConfiguration().parameterSetID();
}
Expand All @@ -75,7 +73,8 @@ namespace edm {
return true;
if (rh.releaseVersion() < releaseVersion())
return false;
if (passID() < rh.passID())
if (processConfiguration().hardwareResourcesDescriptionSerialized() <
rh.processConfiguration().hardwareResourcesDescriptionSerialized())
return true;
return false;
}
Expand Down
19 changes: 12 additions & 7 deletions DataFormats/Provenance/src/ProcessConfiguration.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,21 @@

namespace edm {

ProcessConfiguration::ProcessConfiguration() : processName_(), parameterSetID_(), releaseVersion_(), passID_() {}
ProcessConfiguration::ProcessConfiguration() = default;

ProcessConfiguration::ProcessConfiguration(std::string const& procName,
ParameterSetID const& pSetID,
ReleaseVersion const& relVersion,
PassID const& pass)
: processName_(procName), parameterSetID_(pSetID), releaseVersion_(relVersion), passID_(pass) {}
HardwareResourcesDescription const& hwDescription)
: processName_(procName),
parameterSetID_(pSetID),
releaseVersion_(relVersion),
passID_(hwDescription.serialize()) {}

ProcessConfiguration::ProcessConfiguration(std::string const& procName,
ReleaseVersion const& relVersion,
PassID const& pass)
: processName_(procName), parameterSetID_(), releaseVersion_(relVersion), passID_(pass) {
HardwareResourcesDescription const& hwDescription)
: processName_(procName), parameterSetID_(), releaseVersion_(relVersion), passID_(hwDescription.serialize()) {
setCurrentProcess();
}

Expand Down Expand Up @@ -83,6 +86,7 @@ namespace edm {
return;
transient_.pcid_ = ProcessConfigurationID();
releaseVersion_.erase(iter, iEnd);
passID_ = edm::HardwareResourcesDescription().serialize();
}

bool operator<(ProcessConfiguration const& a, ProcessConfiguration const& b) {
Expand All @@ -98,13 +102,14 @@ namespace edm {
return true;
if (b.releaseVersion() < a.releaseVersion())
return false;
if (a.passID() < b.passID())
if (a.hardwareResourcesDescriptionSerialized() < b.hardwareResourcesDescriptionSerialized())
return true;
return false;
}

std::ostream& operator<<(std::ostream& os, ProcessConfiguration const& pc) {
os << pc.processName() << ' ' << pc.parameterSetID() << ' ' << pc.releaseVersion() << ' ' << pc.passID();
os << pc.processName() << ' ' << pc.parameterSetID() << ' ' << pc.releaseVersion() << ' '
<< pc.hardwareResourcesDescription();
return os;
}
} // namespace edm
4 changes: 2 additions & 2 deletions DataFormats/Provenance/src/ProcessHistory.cc
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ namespace edm {
// We do not use operator<< because it does not write out everything.
std::ostringstream oss;
for (auto const& item : *this) {
oss << item.processName() << ' ' << item.parameterSetID() << ' ' << item.releaseVersion() << ' ' << item.passID()
<< ' ';
oss << item.processName() << ' ' << item.parameterSetID() << ' ' << item.releaseVersion() << ' '
<< item.hardwareResourcesDescriptionSerialized() << ' ';
}
std::string stringrep = oss.str();
cms::Digest md5alg(stringrep);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ TEST_CASE("HardwareResourcesDescription", "[HardwareResourcesDescription]") {
SECTION("Default construction") {
edm::HardwareResourcesDescription resources;
CHECK(edm::HardwareResourcesDescription(resources.serialize()) == resources);
CHECK(resources.serialize().empty());
}

SECTION("Microarchitecture") {
Expand Down
5 changes: 5 additions & 0 deletions FWCore/AbstractServices/BuildFile.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<use name="DataFormats/Provenance"/>
<use name="FWCore/Utilities"/>
<export>
<lib name="1"/>
</export>
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#ifndef FWCore_Utilities_ResourceInformation_h
#define FWCore_Utilities_ResourceInformation_h
#ifndef FWCore_AbstractServices_ResourceInformation_h
#define FWCore_AbstractServices_ResourceInformation_h

/** \class edm::ResourceInformation

Expand All @@ -13,6 +13,8 @@
#include <string>
#include <vector>

#include "DataFormats/Provenance/interface/HardwareResourcesDescription.h"

namespace edm {

class ResourceInformation {
Expand All @@ -22,12 +24,14 @@ namespace edm {
ResourceInformation const& operator=(ResourceInformation const&) = delete;
virtual ~ResourceInformation();

enum class AcceleratorType { GPU };
virtual HardwareResourcesDescription hardwareResourcesDescription() const = 0;

virtual std::vector<AcceleratorType> const& acceleratorTypes() const = 0;
virtual std::vector<std::string> const& selectedAccelerators() const = 0;
virtual std::vector<std::string> const& cpuModels() const = 0;
virtual std::vector<std::string> const& gpuModels() const = 0;

virtual bool hasGpuNvidia() const = 0;

virtual std::string const& nvidiaDriverVersion() const = 0;
virtual int cudaDriverVersion() const = 0;
virtual int cudaRuntimeVersion() const = 0;
Expand All @@ -36,7 +40,7 @@ namespace edm {
virtual std::string const& cpuModelsFormatted() const = 0;
virtual double cpuAverageSpeed() const = 0;

virtual void initializeAcceleratorTypes(std::vector<std::string> const& selectedAccelerators) = 0;
virtual void setSelectedAccelerators(std::vector<std::string> const& selectedAccelerators) = 0;
virtual void setCPUModels(std::vector<std::string> const&) = 0;
virtual void setGPUModels(std::vector<std::string> const&) = 0;

Expand Down
6 changes: 6 additions & 0 deletions FWCore/AbstractServices/src/ResourceInformation.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#include "FWCore/AbstractServices/interface/ResourceInformation.h"

namespace edm {
ResourceInformation::ResourceInformation() = default;
ResourceInformation::~ResourceInformation() = default;
} // namespace edm
1 change: 1 addition & 0 deletions FWCore/Framework/BuildFile.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
<use name="tbb"/>
<use name="DataFormats/Common"/>
<use name="DataFormats/Provenance"/>
<use name="FWCore/AbstractServices"/>
<use name="FWCore/Common"/>
<use name="FWCore/Concurrency"/>
<use name="FWCore/MessageLogger"/>
Expand Down
11 changes: 7 additions & 4 deletions FWCore/Framework/src/ScheduleItems.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include "DataFormats/Provenance/interface/ThinnedAssociationsHelper.h"
#include "DataFormats/Provenance/interface/SubProcessParentageHelper.h"
#include "DataFormats/Provenance/interface/SelectedProducts.h"
#include "FWCore/AbstractServices/interface/ResourceInformation.h"
#include "FWCore/Common/interface/SubProcessBlockHelper.h"
#include "FWCore/Framework/interface/ExceptionActions.h"
#include "FWCore/Framework/src/CommonParams.h"
Expand All @@ -18,8 +19,6 @@
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "FWCore/ServiceRegistry/interface/ServiceRegistry.h"
#include "FWCore/Utilities/interface/BranchType.h"
#include "FWCore/Utilities/interface/GetPassID.h"
#include "FWCore/Utilities/interface/ResourceInformation.h"
#include "FWCore/Version/interface/GetReleaseVersion.h"

#include <memory>
Expand Down Expand Up @@ -120,10 +119,14 @@ namespace edm {

std::shared_ptr<CommonParams> ScheduleItems::initMisc(ParameterSet& parameterSet) {
edm::Service<edm::ResourceInformation> resourceInformationService;
edm::HardwareResourcesDescription hwResources;
if (resourceInformationService.isAvailable()) {
auto const& selectedAccelerators =
parameterSet.getUntrackedParameter<std::vector<std::string>>("@selected_accelerators");
resourceInformationService->initializeAcceleratorTypes(selectedAccelerators);
resourceInformationService->setSelectedAccelerators(selectedAccelerators);
// HardwareResourcesDescription is optional here in order to not
// require ResourceInformationService in TestProcessor
hwResources = resourceInformationService->hardwareResourcesDescription();
}

act_table_ = std::make_unique<ExceptionToActionTable>(parameterSet);
Expand All @@ -136,7 +139,7 @@ namespace edm {
releaseVersion = getReleaseVersion();
}
// propagate_const<T> has no reset() function
processConfiguration_ = std::make_shared<ProcessConfiguration>(processName, releaseVersion, getPassID());
processConfiguration_ = std::make_shared<ProcessConfiguration>(processName, releaseVersion, hwResources);
auto common = std::make_shared<CommonParams>(
parameterSet.getUntrackedParameterSet("maxEvents").getUntrackedParameter<int>("input"),
parameterSet.getUntrackedParameterSet("maxLuminosityBlocks").getUntrackedParameter<int>("input"),
Expand Down
12 changes: 6 additions & 6 deletions FWCore/Framework/test/Event_t.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,11 @@ Test program for edm::Event.
#include "FWCore/ServiceRegistry/interface/ModuleCallingContext.h"
#include "FWCore/Utilities/interface/Algorithms.h"
#include "FWCore/Utilities/interface/EDMException.h"
#include "FWCore/Utilities/interface/GetPassID.h"
#include "FWCore/Utilities/interface/GlobalIdentifier.h"
#include "FWCore/Utilities/interface/InputTag.h"
#include "FWCore/Utilities/interface/ProductKindOfType.h"
#include "FWCore/Utilities/interface/TypeID.h"
#include "FWCore/Reflection/interface/TypeWithDict.h"
#include "FWCore/Version/interface/GetReleaseVersion.h"
#include "Utilities/Testing/interface/CppUnit_testdriver.icpp"

#include "cppunit/extensions/HelperMacros.h"
Expand All @@ -55,6 +53,8 @@ Test program for edm::Event.
#include <typeinfo>
#include <vector>

#include "makeDummyProcessConfiguration.h"

using namespace edm;

// This is a gross hack, to allow us to test the event
Expand Down Expand Up @@ -209,7 +209,7 @@ void testEvent::registerProduct(std::string const& tag,
processParams.template addParameter<ParameterSet>(moduleLabel, moduleParams);
processParams.registerIt();

ProcessConfiguration process(processName, processParams.id(), getReleaseVersion(), getPassID());
auto process = edmtest::makeDummyProcessConfiguration(processName, processParams.id());

auto processX = std::make_shared<ProcessConfiguration>(process);
processConfigurations_.push_back(processX);
Expand Down Expand Up @@ -352,7 +352,7 @@ testEvent::testEvent()
processParams.addParameter(moduleLabel, moduleParams);
processParams.registerIt();

ProcessConfiguration process(processName, processParams.id(), getReleaseVersion(), getPassID());
auto process = edmtest::makeDummyProcessConfiguration(processName, processParams.id());

TypeWithDict product_type(typeid(prod_t));

Expand Down Expand Up @@ -398,7 +398,7 @@ void testEvent::setUp() {
processParamsEarly.addParameter(moduleLabelEarly, moduleParamsEarly);
processParamsEarly.registerIt();

ProcessConfiguration processEarly("EARLY", processParamsEarly.id(), getReleaseVersion(), getPassID());
auto processEarly = edmtest::makeDummyProcessConfiguration("EARLY", processParamsEarly.id());

ParameterSet moduleParamsLate;
std::string moduleLabelLate("currentModule");
Expand All @@ -413,7 +413,7 @@ void testEvent::setUp() {
processParamsLate.addParameter(moduleLabelLate, moduleParamsLate);
processParamsLate.registerIt();

ProcessConfiguration processLate("LATE", processParamsLate.id(), getReleaseVersion(), getPassID());
auto processLate = edmtest::makeDummyProcessConfiguration("LATE", processParamsLate.id());

auto processHistory = std::make_unique<ProcessHistory>();
ProcessHistory& ph = *processHistory;
Expand Down
Loading