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

via Openmp-commits openmp-commits at lists.llvm.org
Thu Sep 14 09:29:40 PDT 2023


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-amdgpu
            
<details>
<summary>Changes</summary>
None
--
Full diff: https://github.com/llvm/llvm-project/pull/66397.diff

1 Files Affected:

- (modified) openmp/libomptarget/plugins-nextgen/amdgpu/src/rtl.cpp (+9-2) 


<pre>
diff --git a/openmp/libomptarget/plugins-nextgen/amdgpu/src/rtl.cpp b/openmp/libomptarget/plugins-nextgen/amdgpu/src/rtl.cpp
index 7b4ea794fe7f0d2..6e16621c71c1afe 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&lt;MemcpyArgsTy *&gt;(Data);
     assert(Args &amp;&amp; &quot;Invalid arguments&quot;);
@@ -1067,7 +1067,12 @@ 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()
   static Error releaseBufferAction(void *Data) {
     ReleaseBufferArgsTy *Args = reinterpret_cast&lt;ReleaseBufferArgsTy *&gt;(Data);
     assert(Args &amp;&amp; &quot;Invalid arguments&quot;);
@@ -1078,6 +1083,8 @@ struct AMDGPUStreamTy {
     return Args-&gt;MemoryManager-&gt;deallocate(Args-&gt;Buffer);
   }
 
+  /// Releasing a signal object back to SignalManage. This is a post completion action.
+  /// This action can only be taken at AMDGPUStreamTy::complete()
   static Error releaseSignalAction(void *Data) {
     ReleaseSignalArgsTy *Args = reinterpret_cast&lt;ReleaseSignalArgsTy *&gt;(Data);
     assert(Args &amp;&amp; &quot;Invalid arguments&quot;);
</pre>
</details>


https://github.com/llvm/llvm-project/pull/66397


More information about the Openmp-commits mailing list