[Mlir-commits] [mlir] 71bdd2c - mlir/lib/Dialect/GPU/Transforms: improve context management in SerializeToCubin (#65779)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Fri Oct 20 10:35:14 PDT 2023


Author: Rohan Yadav
Date: 2023-10-20T23:05:10+05:30
New Revision: 71bdd2c2380d3e0cc96898bd7908ac8c99d10a8f

URL: https://github.com/llvm/llvm-project/commit/71bdd2c2380d3e0cc96898bd7908ac8c99d10a8f
DIFF: https://github.com/llvm/llvm-project/commit/71bdd2c2380d3e0cc96898bd7908ac8c99d10a8f.diff

LOG: mlir/lib/Dialect/GPU/Transforms: improve context management in SerializeToCubin (#65779)

This commit adjusts the CUDA context management in the SerializeToCubin
pass. In particular, it uses the device 0 primary context instead of
creating a new CUDA context on each invocation of SerializeToCubin. This
yields very large improvements in compile time, especially if an
application (like a JIT compiler) is calling SerializeToCubin
repeatedly.

Differential Revision: https://reviews.llvm.org/D159487

Co-authored-by: Rohan Yadav <rohany at cs.stanford.edu>

Added: 
    

Modified: 
    mlir/lib/Dialect/GPU/Transforms/SerializeToCubin.cpp

Removed: 
    


################################################################################
diff  --git a/mlir/lib/Dialect/GPU/Transforms/SerializeToCubin.cpp b/mlir/lib/Dialect/GPU/Transforms/SerializeToCubin.cpp
index 6ea7f57ad3c227d..fb9f14ddbc0d134 100644
--- a/mlir/lib/Dialect/GPU/Transforms/SerializeToCubin.cpp
+++ b/mlir/lib/Dialect/GPU/Transforms/SerializeToCubin.cpp
@@ -110,7 +110,11 @@ SerializeToCubinPass::serializeISA(const std::string &isa) {
   CUdevice device;
   RETURN_ON_CUDA_ERROR(cuDeviceGet(&device, 0));
   CUcontext context;
-  RETURN_ON_CUDA_ERROR(cuCtxCreate(&context, 0, device));
+  // Use the primary context.
+  RETURN_ON_CUDA_ERROR(cuDevicePrimaryCtxRetain(&context, device));
+  // Push the primary context so that the next CUDA operations
+  // actually use it.
+  RETURN_ON_CUDA_ERROR(cuCtxPushCurrent(context));
   CUlinkState linkState;
 
   CUjit_option jitOptions[] = {CU_JIT_ERROR_LOG_BUFFER,
@@ -146,7 +150,10 @@ SerializeToCubinPass::serializeISA(const std::string &isa) {
 
   // This will also destroy the cubin data.
   RETURN_ON_CUDA_ERROR(cuLinkDestroy(linkState));
-  RETURN_ON_CUDA_ERROR(cuCtxDestroy(context));
+  // Pop and release the primary context.
+  CUcontext poppedContext;
+  RETURN_ON_CUDA_ERROR(cuCtxPopCurrent(&poppedContext));
+  RETURN_ON_CUDA_ERROR(cuDevicePrimaryCtxRelease(device));
 
   return result;
 }


        


More information about the Mlir-commits mailing list