@@ -59,38 +59,42 @@ const char * rmmGetErrorString(rmmError_t errcode) {
5959// Initialize memory manager state and storage.
6060rmmError_t rmmInitialize (rmmOptions_t *options)
6161{
62- rmm::Manager::getInstance ().initialize (options);
63-
64- rmm::mr::device_memory_resource * memory_resource = nullptr ;
65-
66- if (rmm::Manager::usePoolAllocator ()) {
67- if (rmm::Manager::useManagedMemory ()) {
68- memory_resource = new rmm::mr::cnmem_managed_memory_resource{
69- rmm::Manager::getOptions ().initial_pool_size };
70- } else {
71- memory_resource = new rmm::mr::cnmem_memory_resource{
72- rmm::Manager::getOptions ().initial_pool_size };
73- }
74- } else if (rmm::Manager::useManagedMemory ()) {
75- memory_resource = new rmm::mr::managed_memory_resource ();
62+ if (!rmm::Manager::getInstance ().isInitialized ()) {
63+ rmm::Manager::getInstance ().initialize (options);
64+
65+ rmm::mr::device_memory_resource * memory_resource = nullptr ;
66+
67+ if (rmm::Manager::usePoolAllocator ()) {
68+ if (rmm::Manager::useManagedMemory ()) {
69+ memory_resource = new rmm::mr::cnmem_managed_memory_resource{
70+ rmm::Manager::getOptions ().initial_pool_size };
71+ } else {
72+ memory_resource = new rmm::mr::cnmem_memory_resource{
73+ rmm::Manager::getOptions ().initial_pool_size };
74+ }
75+ } else if (rmm::Manager::useManagedMemory ()) {
76+ memory_resource = new rmm::mr::managed_memory_resource ();
77+ }
78+
79+ rmm::mr::set_default_resource (memory_resource);
7680 }
7781
78- rmm::mr::set_default_resource (memory_resource);
79-
8082 return RMM_SUCCESS;
8183}
8284
8385// Shutdown memory manager.
8486rmmError_t rmmFinalize ()
8587{
86- // delete the current default resource to reset it, and replace with the
87- // initial resource, so that subsequent calls to initialize will act
88- // just like the first call to initialize
89- rmm::mr::device_memory_resource *mr = rmm::mr::get_default_resource ();
90- rmm::mr::set_default_resource (nullptr );
91- delete mr;
92-
93- rmm::Manager::getInstance ().finalize ();
88+ if (rmm::Manager::getInstance ().isInitialized ()) {
89+ // delete the current default resource to reset it, and replace with the
90+ // initial resource, so that subsequent calls to initialize will act
91+ // just like the first call to initialize
92+ rmm::mr::device_memory_resource *mr = rmm::mr::get_default_resource ();
93+ rmm::mr::set_default_resource (nullptr );
94+ delete mr;
95+
96+ rmm::Manager::getInstance ().finalize ();
97+ }
9498 return RMM_SUCCESS;
9599}
96100
0 commit comments