@@ -103,14 +103,21 @@ rmmError_t Manager::registerStream(cudaStream_t stream) {
103103}
104104
105105// reset the initialized resource, optionally enabling logging via logging_resource_adaptor
106+ // note this is a template function so we avoid a vtable lookup on every logging allocation
107+ // That means it needs to be a free function since memory_manager.hpp cannot include
108+ // `logging_resource_adaptor.hpp` (since it depends on spdlog)
106109template <typename MemoryResource>
107110void reset_resource (std::unique_ptr<mr::device_memory_resource>& initialized_resource,
111+ std::unique_ptr<mr::device_memory_resource>& logging_resource,
108112 MemoryResource *mr,
109113 bool enable_logging) {
114+ initialized_resource.reset (mr);
110115 if (enable_logging) {
111- initialized_resource.reset (new rmm::mr::logging_resource_adaptor<MemoryResource>(mr));
116+ auto lmr = new rmm::mr::logging_resource_adaptor<MemoryResource>(mr);
117+ logging_resource.reset (lmr);
118+ rmm::mr::set_default_resource (lmr);
112119 } else {
113- initialized_resource. reset (mr);
120+ rmm::mr::set_default_resource (mr);
114121 }
115122}
116123
@@ -130,14 +137,16 @@ void Manager::initialize(const rmmOptions_t* new_options) {
130137 auto const & devices = getOptions ().devices ;
131138
132139 if (useManagedMemory ()) {
133- reset_resource (initialized_resource, new pool_managed_mr (pool_size, devices), enable_logging);
140+ reset_resource (initialized_resource, logging_adaptor,
141+ new pool_managed_mr (pool_size, devices), enable_logging);
134142 } else {
135- reset_resource (initialized_resource, new pool_mr (pool_size, devices), enable_logging);
143+ reset_resource (initialized_resource, logging_adaptor,
144+ new pool_mr (pool_size, devices), enable_logging);
136145 }
137146 } else if (rmm::Manager::useManagedMemory ()) {
138- reset_resource (initialized_resource, new managed_mr (), enable_logging);
147+ reset_resource (initialized_resource, logging_adaptor, new managed_mr (), enable_logging);
139148 } else {
140- reset_resource (initialized_resource, new cuda_mr (), enable_logging);
149+ reset_resource (initialized_resource, logging_adaptor, new cuda_mr (), enable_logging);
141150 }
142151
143152 rmm::mr::set_default_resource (initialized_resource.get ());
0 commit comments