Skip to content

Commit 63ebb53

Browse files
authored
Merge pull request #341 from harrism/fea-enable-logging
Enable logging
2 parents a9be620 + f841a6a commit 63ebb53

File tree

4 files changed

+40
-6
lines changed

4 files changed

+40
-6
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## New Features
44

5+
- PR #341 Enable logging
56
- PR #343 Add in option to statically link against cudart
67

78
## Improvements

benchmarks/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ endfunction(ConfigureBench)
2121
include_directories("${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}"
2222
"${CMAKE_BINARY_DIR}/include"
2323
"${CMAKE_SOURCE_DIR}/include"
24+
"${CMAKE_SOURCE_DIR}/thirdparty"
2425
"${CMAKE_SOURCE_DIR}"
2526
"${CMAKE_SOURCE_DIR}/src"
2627
"${GTEST_INCLUDE_DIR}"

include/rmm/detail/memory_manager.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ namespace rmm
240240
bool is_initialized{false};
241241

242242
std::unique_ptr<rmm::mr::device_memory_resource> initialized_resource{};
243+
std::unique_ptr<rmm::mr::device_memory_resource> logging_adaptor{};
243244
};
244245
}
245246

src/memory_manager.cpp

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,17 @@
2020
#include <rmm/mr/device/cuda_memory_resource.hpp>
2121
#include <rmm/mr/device/default_memory_resource.hpp>
2222
#include <rmm/mr/device/managed_memory_resource.hpp>
23+
#include <rmm/mr/device/logging_resource_adaptor.hpp>
2324

2425
namespace rmm {
26+
27+
using cuda_mr = rmm::mr::cuda_memory_resource;
28+
using pool_mr = rmm::mr::cnmem_memory_resource;
29+
using managed_mr = rmm::mr::cnmem_managed_memory_resource;
30+
using pool_managed_mr = rmm::mr::cnmem_managed_memory_resource;
31+
using logging_pool_mr = rmm::mr::logging_resource_adaptor<pool_mr>;
32+
using logging_pool_managed_mr = rmm::mr::logging_resource_adaptor<pool_managed_mr>;
33+
2534
/**
2635
* Record a memory manager event in the log.
2736
*
@@ -93,6 +102,25 @@ rmmError_t Manager::registerStream(cudaStream_t stream) {
93102
return RMM_SUCCESS;
94103
}
95104

105+
// 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)
109+
template <typename MemoryResource>
110+
void reset_resource(std::unique_ptr<mr::device_memory_resource>& initialized_resource,
111+
std::unique_ptr<mr::device_memory_resource>& logging_resource,
112+
MemoryResource *mr,
113+
bool enable_logging) {
114+
initialized_resource.reset(mr);
115+
if (enable_logging) {
116+
auto lmr = new rmm::mr::logging_resource_adaptor<MemoryResource>(mr);
117+
logging_resource.reset(lmr);
118+
rmm::mr::set_default_resource(lmr);
119+
} else {
120+
rmm::mr::set_default_resource(mr);
121+
}
122+
}
123+
96124
// Initialize the manager
97125
void Manager::initialize(const rmmOptions_t* new_options) {
98126
std::lock_guard<std::mutex> guard(manager_mutex);
@@ -102,20 +130,23 @@ void Manager::initialize(const rmmOptions_t* new_options) {
102130

103131
if (nullptr != new_options) options = *new_options;
104132

133+
bool enable_logging = getOptions().enable_logging;
134+
105135
if (usePoolAllocator()) {
106136
auto pool_size = getOptions().initial_pool_size;
107137
auto const& devices = getOptions().devices;
138+
108139
if (useManagedMemory()) {
109-
initialized_resource.reset(
110-
new rmm::mr::cnmem_managed_memory_resource(pool_size, devices));
140+
reset_resource(initialized_resource, logging_adaptor,
141+
new pool_managed_mr(pool_size, devices), enable_logging);
111142
} else {
112-
initialized_resource.reset(
113-
new rmm::mr::cnmem_memory_resource(pool_size, devices));
143+
reset_resource(initialized_resource, logging_adaptor,
144+
new pool_mr(pool_size, devices), enable_logging);
114145
}
115146
} else if (rmm::Manager::useManagedMemory()) {
116-
initialized_resource.reset(new rmm::mr::managed_memory_resource());
147+
reset_resource(initialized_resource, logging_adaptor, new managed_mr(), enable_logging);
117148
} else {
118-
initialized_resource.reset(new rmm::mr::cuda_memory_resource());
149+
reset_resource(initialized_resource, logging_adaptor, new cuda_mr(), enable_logging);
119150
}
120151

121152
rmm::mr::set_default_resource(initialized_resource.get());

0 commit comments

Comments
 (0)