[llvm] [OFFLOAD] Add plugin with support for Intel oneAPI Level Zero (PR #158900)
Alex Duran via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 22 01:27:14 PDT 2025
================
@@ -0,0 +1,161 @@
+//===--- Level Zero Target RTL Implementation -----------------------------===//
+//
+// Part of the LLVM Project, 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
+//
+//===----------------------------------------------------------------------===//
+//
+// Level Zero RTL Options support
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef OPENMP_LIBOMPTARGET_PLUGINS_NEXTGEN_LEVEL_ZERO_L0OPTIONS_H
+#define OPENMP_LIBOMPTARGET_PLUGINS_NEXTGEN_LEVEL_ZERO_L0OPTIONS_H
+
+#include <level_zero/ze_api.h>
+
+#include "Shared/EnvironmentVar.h"
+
+#include "L0Defs.h"
+
+namespace llvm::omp::target::plugin {
+/// Command submission mode
+enum class CommandModeTy { Sync = 0, Async, AsyncOrdered };
+
+/// Specialization constants used for a module compilation.
+class SpecConstantsTy {
+ std::vector<uint32_t> ConstantIds;
+ std::vector<const void *> ConstantValues;
+ BumpPtrAllocator &Allocator;
+
+public:
+ SpecConstantsTy(BumpPtrAllocator &Allocator) : Allocator(Allocator) {}
+ SpecConstantsTy(const SpecConstantsTy &) = delete;
+ SpecConstantsTy(SpecConstantsTy &&) = delete;
+ SpecConstantsTy &operator=(const SpecConstantsTy &) = delete;
+ SpecConstantsTy &operator=(const SpecConstantsTy &&) = delete;
+ SpecConstantsTy(const SpecConstantsTy &&Other)
+ : ConstantIds(std::move(Other.ConstantIds)),
+ ConstantValues(std::move(Other.ConstantValues)),
+ Allocator(Other.Allocator) {}
+ ~SpecConstantsTy() {}
+
+ template <typename T> void addConstant(uint32_t Id, T Val) {
+ T *ValuePtr =
+ reinterpret_cast<T *>(Allocator.Allocate(sizeof(T), alignof(T)));
+ *ValuePtr = Val;
+
+ ConstantIds.push_back(Id);
+ ConstantValues.push_back(reinterpret_cast<void *>(ValuePtr));
+ }
+
+ ze_module_constants_t getModuleConstants() const {
+ ze_module_constants_t Tmp{static_cast<uint32_t>(ConstantValues.size()),
+ ConstantIds.data(),
+ // Unfortunately we have to const_cast it.
+ // L0 data type should probably be fixed.
+ const_cast<const void **>(ConstantValues.data())};
+ return Tmp;
+ }
+};
+
+/// L0 Plugin flags
+struct L0OptionFlagsTy {
+ uint64_t UseMemoryPool : 1;
+ uint64_t Reserved : 63;
+ L0OptionFlagsTy() : UseMemoryPool(1), Reserved(0) {}
+};
+
+struct L0OptionsTy {
+ /// Binary flags
+ L0OptionFlagsTy Flags;
+
+ /// Staging buffer size
+ size_t StagingBufferSize = L0StagingBufferSize;
+
+ /// Staging buffer count
+ size_t StagingBufferCount = L0StagingBufferCount;
+
+ // TODO: This should probably be an array indexed by AllocKind
+ /// Memory pool parameters
+ /// MemPoolInfo[MemType] = {AllocMax(MB), Capacity, PoolSize(MB)}
+ std::map<int32_t, std::array<int32_t, 3>> MemPoolInfo = {
----------------
adurang wrote:
this is done too
https://github.com/llvm/llvm-project/pull/158900
More information about the llvm-commits
mailing list