[Openmp-commits] [openmp] 8c2da6b - [libomptarget] document ActionFunctions in the amdgpu plugin. (#66397)

via Openmp-commits openmp-commits at lists.llvm.org
Thu Sep 14 10:18:53 PDT 2023


Author: Ye Luo
Date: 2023-09-14T12:18:49-05:00
New Revision: 8c2da6bb7f48d2dded1c0a2b2c43217f90011d42

URL: https://github.com/llvm/llvm-project/commit/8c2da6bb7f48d2dded1c0a2b2c43217f90011d42
DIFF: https://github.com/llvm/llvm-project/commit/8c2da6bb7f48d2dded1c0a2b2c43217f90011d42.diff

LOG: [libomptarget] document ActionFunctions in the amdgpu plugin. (#66397)

Added: 
    

Modified: 
    openmp/libomptarget/plugins-nextgen/amdgpu/src/rtl.cpp

Removed: 
    


################################################################################
diff  --git a/openmp/libomptarget/plugins-nextgen/amdgpu/src/rtl.cpp b/openmp/libomptarget/plugins-nextgen/amdgpu/src/rtl.cpp
index 7b4ea794fe7f0d2..66a25e29d016276 100644
--- a/openmp/libomptarget/plugins-nextgen/amdgpu/src/rtl.cpp
+++ b/openmp/libomptarget/plugins-nextgen/amdgpu/src/rtl.cpp
@@ -1055,7 +1055,7 @@ struct AMDGPUStreamTy {
     return false;
   }
 
-  // Callback for host-to-host memory copies.
+  // Callback for host-to-host memory copies. This is an asynchronous action.
   static Error memcpyAction(void *Data) {
     MemcpyArgsTy *Args = reinterpret_cast<MemcpyArgsTy *>(Data);
     assert(Args && "Invalid arguments");
@@ -1067,7 +1067,19 @@ struct AMDGPUStreamTy {
     return Plugin::success();
   }
 
-  // Callback for releasing a memory buffer to a memory manager.
+  /// Releasing a memory buffer to a memory manager. This is a post completion
+  /// action. There are two kinds of memory buffers:
+  ///   1. For kernel arguments. This buffer can be freed after receiving the
+  ///   kernel completion signal.
+  ///   2. For H2D tranfers that need pinned memory space for staging. This
+  ///   buffer can be freed after receiving the transfer completion signal.
+  ///   3. For D2H tranfers that need pinned memory space for staging. This
+  ///   buffer cannot be freed after receiving the transfer completion signal
+  ///   because of the following asynchronous H2H callback.
+  ///      For this reason, This action can only be taken at
+  ///      AMDGPUStreamTy::complete()
+  /// Because of the case 3, all releaseBufferActions are taken at
+  /// AMDGPUStreamTy::complete() in the current implementation.
   static Error releaseBufferAction(void *Data) {
     ReleaseBufferArgsTy *Args = reinterpret_cast<ReleaseBufferArgsTy *>(Data);
     assert(Args && "Invalid arguments");
@@ -1078,6 +1090,8 @@ struct AMDGPUStreamTy {
     return Args->MemoryManager->deallocate(Args->Buffer);
   }
 
+  /// Releasing a signal object back to SignalManager. This is a post completion
+  /// action. This action can only be taken at AMDGPUStreamTy::complete()
   static Error releaseSignalAction(void *Data) {
     ReleaseSignalArgsTy *Args = reinterpret_cast<ReleaseSignalArgsTy *>(Data);
     assert(Args && "Invalid arguments");


        


More information about the Openmp-commits mailing list