[libc-commits] [libc] dfc162a - [libc] Free the GPU memory allocated in the device loaders
Joseph Huber via libc-commits
libc-commits at lists.llvm.org
Mon Apr 3 09:55:43 PDT 2023
Author: Joseph Huber
Date: 2023-04-03T11:55:32-05:00
New Revision: dfc162ad3fcb9636685ee99360cb1c4f5a56cd6b
URL: https://github.com/llvm/llvm-project/commit/dfc162ad3fcb9636685ee99360cb1c4f5a56cd6b
DIFF: https://github.com/llvm/llvm-project/commit/dfc162ad3fcb9636685ee99360cb1c4f5a56cd6b.diff
LOG: [libc] Free the GPU memory allocated in the device loaders
Summary:
This part was ignored and we just hoped that shutting down the runtime
freed these correctly. But it's best to be specific and free the memory
we've allocated.
Added:
Modified:
libc/utils/gpu/loader/amdgpu/Loader.cpp
libc/utils/gpu/loader/nvptx/Loader.cpp
Removed:
################################################################################
diff --git a/libc/utils/gpu/loader/amdgpu/Loader.cpp b/libc/utils/gpu/loader/amdgpu/Loader.cpp
index d090b98c5a2e..87dd3ce48d82 100644
--- a/libc/utils/gpu/loader/amdgpu/Loader.cpp
+++ b/libc/utils/gpu/loader/amdgpu/Loader.cpp
@@ -417,6 +417,22 @@ int load(int argc, char **argv, char **envp, void *image, size_t size) {
// Save the return value and perform basic clean-up.
int ret = *static_cast<int *>(host_ret);
+ // Free the memory allocated for the device.
+ if (hsa_status_t err = hsa_amd_memory_pool_free(args))
+ handle_error(err);
+ if (hsa_status_t err = hsa_amd_memory_pool_free(dev_argv))
+ handle_error(err);
+ if (hsa_status_t err = hsa_amd_memory_pool_free(dev_ret))
+ handle_error(err);
+ if (hsa_status_t err = hsa_amd_memory_pool_free(server_inbox))
+ handle_error(err);
+ if (hsa_status_t err = hsa_amd_memory_pool_free(server_outbox))
+ handle_error(err);
+ if (hsa_status_t err = hsa_amd_memory_pool_free(buffer))
+ handle_error(err);
+ if (hsa_status_t err = hsa_amd_memory_pool_free(host_ret))
+ handle_error(err);
+
if (hsa_status_t err = hsa_signal_destroy(memory_signal))
handle_error(err);
diff --git a/libc/utils/gpu/loader/nvptx/Loader.cpp b/libc/utils/gpu/loader/nvptx/Loader.cpp
index 88ef1701b158..ed8b8d018c6a 100644
--- a/libc/utils/gpu/loader/nvptx/Loader.cpp
+++ b/libc/utils/gpu/loader/nvptx/Loader.cpp
@@ -176,6 +176,18 @@ int load(int argc, char **argv, char **envp, void *image, size_t size) {
if (CUresult err = cuStreamSynchronize(stream))
handle_error(err);
+ // Free the memory allocated for the device.
+ if (CUresult err = cuMemFree(dev_ret))
+ handle_error(err);
+ if (CUresult err = cuMemFreeHost(dev_argv))
+ handle_error(err);
+ if (CUresult err = cuMemFreeHost(server_inbox))
+ handle_error(err);
+ if (CUresult err = cuMemFreeHost(server_outbox))
+ handle_error(err);
+ if (CUresult err = cuMemFreeHost(buffer))
+ handle_error(err);
+
// Destroy the context and the loaded binary.
if (CUresult err = cuModuleUnload(binary))
handle_error(err);
More information about the libc-commits
mailing list