[llvm] [flang][cuda] Use the provided stream in kernel launch (PR #135267)
Valentin Clement バレンタイン クレメン via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 10 14:57:09 PDT 2025
https://github.com/clementval created https://github.com/llvm/llvm-project/pull/135267
None
>From b2752c98b9cf4aa43f7227eec762ccc3df93884a Mon Sep 17 00:00:00 2001
From: Valentin Clement <clementval at gmail.com>
Date: Thu, 10 Apr 2025 14:56:03 -0700
Subject: [PATCH] [flang][cuda] Use the provided stream in kernel launch
---
flang-rt/lib/cuda/kernel.cpp | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/flang-rt/lib/cuda/kernel.cpp b/flang-rt/lib/cuda/kernel.cpp
index 6b60b72630a15..bc2f2d49447df 100644
--- a/flang-rt/lib/cuda/kernel.cpp
+++ b/flang-rt/lib/cuda/kernel.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Runtime/CUDA/kernel.h"
+#include "flang-rt/runtime/descriptor.h"
#include "flang-rt/runtime/terminator.h"
#include "flang/Runtime/CUDA/common.h"
@@ -74,9 +75,9 @@ void RTDEF(CUFLaunchKernel)(const void *kernel, intptr_t gridX, intptr_t gridY,
Fortran::runtime::Terminator terminator{__FILE__, __LINE__};
terminator.Crash("Too many invalid grid dimensions");
}
- cudaStream_t cuStream = 0; // TODO stream managment
- CUDA_REPORT_IF_ERROR(
- cudaLaunchKernel(kernel, gridDim, blockDim, params, smem, cuStream));
+ cudaStream_t deafultStream = 0;
+ CUDA_REPORT_IF_ERROR(cudaLaunchKernel(kernel, gridDim, blockDim, params, smem,
+ stream != kNoAsyncId ? (cudaStream_t)stream : deafultStream));
}
void RTDEF(CUFLaunchClusterKernel)(const void *kernel, intptr_t clusterX,
@@ -140,7 +141,11 @@ void RTDEF(CUFLaunchClusterKernel)(const void *kernel, intptr_t clusterX,
terminator.Crash("Too many invalid grid dimensions");
}
config.dynamicSmemBytes = smem;
- config.stream = 0; // TODO stream managment
+ if (stream != kNoAsyncId) {
+ config.stream = (cudaStream_t)stream;
+ } else {
+ config.stream = 0;
+ }
cudaLaunchAttribute launchAttr[1];
launchAttr[0].id = cudaLaunchAttributeClusterDimension;
launchAttr[0].val.clusterDim.x = clusterX;
@@ -212,9 +217,10 @@ void RTDEF(CUFLaunchCooperativeKernel)(const void *kernel, intptr_t gridX,
Fortran::runtime::Terminator terminator{__FILE__, __LINE__};
terminator.Crash("Too many invalid grid dimensions");
}
- cudaStream_t cuStream = 0; // TODO stream managment
- CUDA_REPORT_IF_ERROR(cudaLaunchCooperativeKernel(
- kernel, gridDim, blockDim, params, smem, cuStream));
+ cudaStream_t deafultStream = 0;
+ CUDA_REPORT_IF_ERROR(
+ cudaLaunchCooperativeKernel(kernel, gridDim, blockDim, params, smem,
+ stream != kNoAsyncId ? (cudaStream_t)stream : deafultStream));
}
} // extern "C"
More information about the llvm-commits
mailing list