Skip to content

Commit

Permalink
[Depend-intel#333] Convert a subset of GPU dialect ops to the GPU Ope…
Browse files Browse the repository at this point in the history
…nCL runtime calls
  • Loading branch information
AndreyPavlenko committed Sep 19, 2024
1 parent ce6d1d3 commit 7593767
Show file tree
Hide file tree
Showing 9 changed files with 703 additions and 1 deletion.
29 changes: 29 additions & 0 deletions include/gc/ExecutionEngine/GPURuntime/GpuOclRuntime.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
//===-- GpuOclRuntime.h - GPU OpenCL runtime --------------------*- C++ -*-===//
//
// This file is licensed under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef GC_GPUOCLRUNTIME_H
#define GC_GPUOCLRUNTIME_H

namespace mlir::gc::gpu {
constexpr char GPU_OCL_MALLOC[] = "gcGpuOclMalloc";
constexpr char GPU_OCL_DEALLOC[] = "gcGpuOclDealloc";
constexpr char GPU_OCL_MEMCPY[] = "gcGpuOclMemcpy";
constexpr char GPU_OCL_KERNEL_CREATE[] = "gcGpuOclKernelCreate";
constexpr char GPU_OCL_KERNEL_DESTROY[] = "gcGpuOclKernelDestroy";
constexpr char GPU_OCL_KERNEL_LAUNCH[] = "gcGpuOclKernelLaunch";
constexpr char GPU_OCL_MOD_DESTRUCTOR[] = "gcGpuOclModuleDestructor";
} // namespace mlir::gc::gpu

#ifndef GC_GPU_OCL_CONST_ONLY

// TBD

#else
#undef GC_GPU_OCL_CONST_ONLY
#endif
#endif
14 changes: 14 additions & 0 deletions include/gc/Transforms/Passes.td
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,20 @@ def LinalgToXeGPU : Pass<"linalg-to-xegpu", "func::FuncOp"> {
"DPAS register block sizes MxNxK">,
];
}

def AddContextArg : Pass<"add-ctx-arg", "func::FuncOp"> {
let summary = "Add a context argument.";
let description = [{
Add a new memref argument to the function, that could be used to pass some context.
}];
}

def GpuToGpuOcl : Pass<"gpu-to-gpuocl", "ModuleOp"> {
let summary = "Convert the GPU operations to GpuOclRuntime calls.";
let description = [{
Convert the gpu alloc, dealloc, memcpy and launch operations to GpuOclRuntime calls.
}];
}
#endif // GC_USE_IMEX

def IterativeTilingAndFusion : Pass<"iterative-tiling-and-fusion",
Expand Down
45 changes: 45 additions & 0 deletions lib/gc/Transforms/GPU/AddContextArg.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
//===-- AddContextArg.cpp - Add context argument ----------------*- C++ -*-===//
//
// This file is licensed under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "mlir/Conversion/Passes.h"
#include "mlir/Dialect/Func/IR/FuncOps.h"

namespace mlir::gc {
#define GEN_PASS_DECL_ADDCONTEXTARG
#define GEN_PASS_DEF_ADDCONTEXTARG
#include "gc/Transforms/Passes.h.inc"
} // namespace mlir::gc

using namespace mlir;

namespace {
struct AddContextArg final : gc::impl::AddContextArgBase<AddContextArg> {
void runOnOperation() override {
auto func = getOperation();
auto funcType = func.getFunctionType();
auto argTypes = llvm::to_vector<8>(funcType.getInputs());
auto resultTypes = llvm::to_vector<1>(funcType.getResults());
auto ctx = func->getContext();
auto newArgType = MemRefType::get({}, IntegerType::get(ctx, 8));
argTypes.emplace_back(newArgType);
auto newFuncType = FunctionType::get(ctx, argTypes, resultTypes);
func.setType(newFuncType);

if (func.getBody().hasOneBlock()) {
func.getBody().front().addArgument(newArgType, func.getLoc());
}

// Find all function calls and append the last argument of the current
// function to the call.
func.walk([&](func::CallOp call) {
auto args = llvm::to_vector<8>(call.getOperands());
args.emplace_back(func.getArgument(func.getNumArguments() - 1));
call->setOperands(args);
});
}
};
} // namespace
2 changes: 2 additions & 0 deletions lib/gc/Transforms/GPU/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
gc_add_mlir_library(GcGpuPasses
AddContextArg.cpp
GpuToGpuOcl.cpp
LinalgToXeGPU.cpp
Pipeline.cpp

Expand Down
Loading

0 comments on commit 7593767

Please sign in to comment.