[llvm] [offload] Use pinned memory for KLE (PR #213767)
Joseph Huber via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 15 14:00:55 PDT 2026
================
@@ -1027,6 +1027,22 @@ struct GenericDeviceTy : public DeviceAllocatorTy {
virtual Error queryAsyncImpl(__tgt_async_info &AsyncInfo, bool ReleaseQueue,
bool *IsQueueWorkCompleted) = 0;
+ /// Indicate whether the plugin transfers data faster when the host side of
+ /// the transfer is pinned memory. If a plugin returns true, the kernel
+ /// launch environment is staged in a pinned host buffer before it is
+ /// submitted. Plugins may benefit for different reasons: some pick a cheaper
+ /// copy path for buffers they know are pinned, others rely on the driver
+ /// only issuing a true asynchronous transfer out of page-locked memory.
+ virtual bool hasFastTransferWithPinnedMemory() const { return false; }
+
+ /// Allocate a pinned host buffer to stage a kernel launch environment. The
+ /// caller owns it until it registers it with
+ /// AsyncInfoWrapperTy::freeAllocationAfterSynchronization, which releases it
+ /// once the transfer reading it has completed. Returns nullptr if staging is
+ /// unavailable, in which case the caller must submit the launch environment
+ /// from ordinary host memory.
+ KernelLaunchEnvironmentTy *getPinnedLaunchEnvBuffer();
----------------
jhuber6 wrote:
Isn't this basically reinventing implicit arguments? What's stopping us from just tacking this to the end of the implicit arguments, unless we need CUDA to handle this as well?
https://github.com/llvm/llvm-project/pull/213767
More information about the llvm-commits
mailing list