[flang-commits] [flang] [mlir] [mlir][gpu] Add stream-based async mode to gpu.launch (PR #213031)
Fabian Mora via flang-commits
flang-commits at lists.llvm.org
Thu Jul 30 08:30:44 PDT 2026
================
@@ -1248,55 +1287,22 @@ void LaunchFuncOp::build(OpBuilder &builder, OperationState &result,
dynamicSharedMemorySize ? 1 : 0;
prop.operandSegmentSizes[segmentSizesLen - 2] =
static_cast<int32_t>(kernelOperands.size());
- prop.operandSegmentSizes[segmentSizesLen - 1] = 0;
+ prop.operandSegmentSizes[segmentSizesLen - 1] = asyncObject ? 1 : 0;
}
void LaunchFuncOp::build(OpBuilder &builder, OperationState &result,
GPUFuncOp kernelFunc, KernelDim3 gridSize,
KernelDim3 getBlockSize, Value dynamicSharedMemorySize,
ValueRange kernelOperands, Type asyncTokenType,
- ValueRange asyncDependencies,
+ ValueRange asyncDependencies, Value asyncObject,
std::optional<KernelDim3> clusterSize) {
auto kernelModule = kernelFunc->getParentOfType<GPUModuleOp>();
auto kernelSymbol =
SymbolRefAttr::get(kernelModule.getNameAttr(),
{SymbolRefAttr::get(kernelFunc.getNameAttr())});
build(builder, result, kernelSymbol, gridSize, getBlockSize,
dynamicSharedMemorySize, kernelOperands, asyncTokenType,
- asyncDependencies, clusterSize);
-}
-
-void LaunchFuncOp::build(OpBuilder &builder, OperationState &result,
- SymbolRefAttr kernel, KernelDim3 gridSize,
- KernelDim3 getBlockSize, Value dynamicSharedMemorySize,
- ValueRange kernelOperands, Value asyncObject,
- std::optional<KernelDim3> clusterSize) {
- // Add grid and block sizes as op operands, followed by the data operands.
- result.addOperands({gridSize.x, gridSize.y, gridSize.z, getBlockSize.x,
- getBlockSize.y, getBlockSize.z});
- if (clusterSize.has_value())
- result.addOperands({clusterSize->x, clusterSize->y, clusterSize->z});
- if (dynamicSharedMemorySize)
- result.addOperands(dynamicSharedMemorySize);
- result.addOperands(kernelOperands);
- if (asyncObject)
- result.addOperands(asyncObject);
- Properties &prop = result.getOrAddProperties<Properties>();
- prop.kernel = kernel;
- size_t segmentSizesLen = std::size(prop.operandSegmentSizes);
- // Initialize the segment sizes to 1.
- llvm::fill(prop.operandSegmentSizes, 1);
- prop.operandSegmentSizes[0] = 0;
- if (!clusterSize.has_value()) {
- prop.operandSegmentSizes[segmentSizesLen - 4] = 0;
- prop.operandSegmentSizes[segmentSizesLen - 5] = 0;
- prop.operandSegmentSizes[segmentSizesLen - 6] = 0;
- }
- prop.operandSegmentSizes[segmentSizesLen - 3] =
- dynamicSharedMemorySize ? 1 : 0;
- prop.operandSegmentSizes[segmentSizesLen - 2] =
- static_cast<int32_t>(kernelOperands.size());
- prop.operandSegmentSizes[segmentSizesLen - 1] = asyncObject ? 1 : 0;
+ asyncDependencies, asyncObject, clusterSize);
}
----------------
fabianmcg wrote:
Please add a comment to the commit description nothing the deleted builder and how to port code. Nothing fancy, a one liner is enough.
https://github.com/llvm/llvm-project/pull/213031
More information about the flang-commits
mailing list