63 ->setComment(
"Print memory information for each device after the construction of each module");
65 ->setComment(
"Print memory information for each device after the beginStream() of each module");
67 ->setComment(
"Print memory information for each device after the event of each module");
69 ->setComment(
"Print memory information for each device after each event");
71 descriptions.
add(
"CUDAMonitoringService", 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) {
84 constexpr
auto mbytes = 1 << 20;
85 for (
int i = 0;
i <
num; ++
i) {
86 size_t freeMemory, totalMemory;
88 cudaCheck(cudaMemGetInfo(&freeMemory, &totalMemory));
90 <<
i <<
": " << (totalMemory - freeMemory) / mbytes <<
" MB used / " << totalMemory / mbytes <<
" MB total";
91 auto found = cachingDeviceAllocatorStatus.find(
i);
92 if (found != cachingDeviceAllocatorStatus.end()) {
93 auto const& cached = found->second;
94 log <<
"; CachingDeviceAllocator " << cached.live / mbytes <<
" MB live "
95 <<
"(" << cached.liveRequested / mbytes <<
" MB requested) " << cached.free / mbytes <<
" MB free "
96 << (cached.live + cached.free) / mbytes <<
" MB total cached";
105 log <<
"CUDA device memory after construction of " << desc.
moduleLabel() <<
" (" << desc.
moduleName() <<
")";
125 log <<
"CUDA device memory after event";
void watchPostModuleConstruction(PostModuleConstruction::slot_type const &iSlot)
CUDAMonitoringService(edm::ParameterSet const &iConfig, edm::ActivityRegistry &iRegistry)
T getUntrackedParameter(std::string const &, T const &) const
static std::vector< std::string > checklist log
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
void watchPostEvent(PostEvent::slot_type const &iSlot)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
int numberOfDevices() const
std::string const & moduleName() const
void watchPostModuleEvent(PostModuleEvent::slot_type const &iSlot)
std::string const & moduleLabel() const
void postEvent(edm::StreamContext const &sc)
allocator::GpuCachedBytes deviceAllocatorStatus()
ModuleDescription const * moduleDescription() const
Log< level::Warning, true > LogPrint
#define DEFINE_FWK_SERVICE(type)
void setComment(std::string const &value)
void watchPostModuleBeginStream(PostModuleBeginStream::slot_type const &iSlot)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
tuple config
parse the configuration file
void postModuleConstruction(edm::ModuleDescription const &desc)
void postModuleBeginStream(edm::StreamContext const &, edm::ModuleCallingContext const &mcc)
#define cudaCheck(ARG,...)
~CUDAMonitoringService()=default
void postModuleEvent(edm::StreamContext const &sc, edm::ModuleCallingContext const &mcc)