Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Umpire memory manager for GPU pool memory allocation #943

Draft
wants to merge 13 commits into
base: vlasiator_gpu
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add error handling into gpu_base.hpp
  • Loading branch information
hokkanen committed Apr 10, 2024
commit dce427f4a542fd74b4595afd477d7e9f954f449e
38 changes: 17 additions & 21 deletions arch/arch_device_cuda.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,27 +67,23 @@ static cudaError_t gpuFreeHost(void* pinned_ptr) {
allocator.deallocate(pinned_ptr);
return cudaSuccess;
}
// static cudaError_t gpuMallocManaged(void** dev_ptr, size_t size) {
// auto& rm = umpire::ResourceManager::getInstance();
// auto allocator = rm.getAllocator("UM_POOL");
// void* umpire_ptr = static_cast<void*>(allocator.allocate(size));
// if (umpire_ptr != nullptr) {
// *dev_ptr = umpire_ptr;
// printf("ManagedAlloc: %p\n", umpire_ptr);
// return cudaSuccess;
// } else {
// return cudaErrorMemoryAllocation;
// }
// }
// static cudaError_t gpuFreeManaged(void* dev_ptr) {
// printf("ManagedFree: %p\n", dev_ptr);
// auto& rm = umpire::ResourceManager::getInstance();
// auto allocator = rm.getAllocator("UM_POOL");
// allocator.deallocate(dev_ptr);
// return cudaSuccess;
// }
#define gpuMallocManaged cudaMallocManaged
#define gpuFreeManaged cudaFree
static cudaError_t gpuMallocManaged(void** dev_ptr, size_t size) {
auto& rm = umpire::ResourceManager::getInstance();
auto allocator = rm.getAllocator("UM_POOL");
void* umpire_ptr = static_cast<void*>(allocator.allocate(size));
if (umpire_ptr != nullptr) {
*dev_ptr = umpire_ptr;
return cudaSuccess;
} else {
return cudaErrorMemoryAllocation;
}
}
static cudaError_t gpuFreeManaged(void* dev_ptr) {
auto& rm = umpire::ResourceManager::getInstance();
auto allocator = rm.getAllocator("UM_POOL");
allocator.deallocate(dev_ptr);
return cudaSuccess;
}
#else
#define gpuMalloc cudaMalloc
#define gpuFree cudaFree
Expand Down
38 changes: 17 additions & 21 deletions arch/arch_device_hip.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,27 +65,23 @@ static hipError_t gpuFreeHost(void* pinned_ptr) {
allocator.deallocate(pinned_ptr);
return hipSuccess;
}
// static hipError_t gpuMallocManaged(void** dev_ptr, size_t size) {
// auto& rm = umpire::ResourceManager::getInstance();
// auto allocator = rm.getAllocator("UM_POOL");
// void* umpire_ptr = static_cast<void*>(allocator.allocate(size));
// if (umpire_ptr != nullptr) {
// *dev_ptr = umpire_ptr;
// printf("ManagedAlloc: %p\n", umpire_ptr);
// return hipSuccess;
// } else {
// return hipErrorMemoryAllocation;
// }
// }
// static hipError_t gpuFreeManaged(void* dev_ptr) {
// printf("ManagedFree: %p\n", dev_ptr);
// auto& rm = umpire::ResourceManager::getInstance();
// auto allocator = rm.getAllocator("UM_POOL");
// allocator.deallocate(dev_ptr);
// return hipSuccess;
// }
#define gpuMallocManaged hipMallocManaged
#define gpuFreeManaged hipFree
static hipError_t gpuMallocManaged(void** dev_ptr, size_t size) {
auto& rm = umpire::ResourceManager::getInstance();
auto allocator = rm.getAllocator("UM_POOL");
void* umpire_ptr = static_cast<void*>(allocator.allocate(size));
if (umpire_ptr != nullptr) {
*dev_ptr = umpire_ptr;
return hipSuccess;
} else {
return hipErrorMemoryAllocation;
}
}
static hipError_t gpuFreeManaged(void* dev_ptr) {
auto& rm = umpire::ResourceManager::getInstance();
auto allocator = rm.getAllocator("UM_POOL");
allocator.deallocate(dev_ptr);
return hipSuccess;
}
#else
#define gpuMalloc hipMalloc
#define gpuFree hipFree
Expand Down
16 changes: 8 additions & 8 deletions arch/gpu_base.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,26 +81,26 @@ class Managed {
public:
void *operator new(size_t len) {
void *ptr;
gpuMallocManaged(&ptr, len);
gpuDeviceSynchronize();
CHK_ERR(gpuMallocManaged(&ptr, len));
CHK_ERR(gpuDeviceSynchronize());
return ptr;
}

void operator delete(void *ptr) {
gpuDeviceSynchronize();
gpuFreeManaged(ptr);
CHK_ERR(gpuDeviceSynchronize());
CHK_ERR(gpuFreeManaged(ptr));
}

void* operator new[] (size_t len) {
void *ptr;
gpuMallocManaged(&ptr, len);
gpuDeviceSynchronize();
CHK_ERR(gpuMallocManaged(&ptr, len));
CHK_ERR(gpuDeviceSynchronize());
return ptr;
}

void operator delete[] (void* ptr) {
gpuDeviceSynchronize();
gpuFreeManaged(ptr);
CHK_ERR(gpuDeviceSynchronize());
CHK_ERR(gpuFreeManaged(ptr));
}

};
Expand Down