3 #include <hip/hip_runtime.h> 45 if (
config.getUntrackedParameter<
bool>(
"memoryConstruction")) {
48 if (
config.getUntrackedParameter<
bool>(
"memoryBeginStream")) {
51 if (
config.getUntrackedParameter<
bool>(
"memoryPerModule")) {
54 if (
config.getUntrackedParameter<
bool>(
"memoryPerEvent")) {
62 desc.addUntracked<
bool>(
"memoryConstruction",
false)
63 ->setComment(
"Print memory information for each device after the construction of each module");
64 desc.addUntracked<
bool>(
"memoryBeginStream",
true)
65 ->setComment(
"Print memory information for each device after the beginStream() of each module");
66 desc.addUntracked<
bool>(
"memoryPerModule",
true)
67 ->setComment(
"Print memory information for each device after the event of each module");
68 desc.addUntracked<
bool>(
"memoryPerEvent",
true)
69 ->setComment(
"Print memory information for each device after each event");
71 descriptions.
add(
"ROCmMonitoringService",
desc);
73 "The memory information is the global state of the device. This gets confusing if there are multiple processes " 74 "running on the same device. Probably the information retrieval should be re-thought?");
80 void dumpUsedMemory(
T&
log,
int num) {
83 constexpr
auto mbytes = 1 << 20;
84 for (
int i = 0;
i <
num; ++
i) {
85 size_t freeMemory, totalMemory;
87 hipCheck(hipMemGetInfo(&freeMemory, &totalMemory));
89 <<
i <<
": " << (totalMemory - freeMemory) / mbytes <<
" MB used / " << totalMemory / mbytes <<
" MB total";
97 log <<
"ROCm device memory after construction of " <<
desc.moduleLabel() <<
" (" <<
desc.moduleName() <<
")";
117 log <<
"ROCm device memory after event";
void watchPostModuleConstruction(PostModuleConstruction::slot_type const &iSlot)
ModuleDescription const * moduleDescription() const
void postModuleEvent(edm::StreamContext const &sc, edm::ModuleCallingContext const &mcc)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void watchPostEvent(PostEvent::slot_type const &iSlot)
void watchPostModuleEvent(PostModuleEvent::slot_type const &iSlot)
std::string const & moduleName() const
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
void postModuleBeginStream(edm::StreamContext const &, edm::ModuleCallingContext const &mcc)
Log< level::Warning, true > LogPrint
#define DEFINE_FWK_SERVICE(type)
void setComment(std::string const &value)
ROCmMonitoringService(edm::ParameterSet const &iConfig, edm::ActivityRegistry &iRegistry)
void watchPostModuleBeginStream(PostModuleBeginStream::slot_type const &iSlot)
#define hipCheck(ARG,...)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void postEvent(edm::StreamContext const &sc)
void postModuleConstruction(edm::ModuleDescription const &desc)
std::string const & moduleLabel() const
~ROCmMonitoringService()=default