/
pccc
/
pccc-mlir
Обзор
Документация
Войти
/
pccc
/
pccc-mlir
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
offload/plugins-nextgen/level_zero/src/L0Context.cpp
89 строк
3 KB
obitotsky
fork mlir
19 июл 2026, 07:05
Верифицирован
19 июл 2026, 07:05
6422b87
Код
Авторство
О чём код?
//===--- 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 Context abstraction. // //===----------------------------------------------------------------------===// #include "L0Context.h" #include "L0Plugin.h" namespace llvm::omp::target::plugin { Error L0ContextTy::init() { auto cleanupOnError = [&]() { if (zeContext) { zeContextDestroy(zeContext); zeContext = nullptr; } }; CALL_ZE_RET_ERROR(zeDriverGetApiVersion, zeDriver, &APIVersion); ODBG(OLDT_Init) << "Driver API version is " << llvm::format(PRIx32, APIVersion); ze_context_desc_t Desc{ZE_STRUCTURE_TYPE_CONTEXT_DESC, nullptr, 0}; CALL_ZE_RET_ERROR(zeContextCreate, zeDriver, &Desc, &zeContext); const auto &Options = Plugin.getOptions(); bool UseCounterBasedEvents = Options.CommandMode == CommandModeTy::InOrder || Options.CommandMode == CommandModeTy::Sync; if (UseCounterBasedEvents) ODBG(OLDT_Init) << "Using counter-based events for " << (Options.CommandMode == CommandModeTy::InOrder ? "InOrder" : "Sync") << " command mode"; if (auto Err = EventPool.init(zeContext, UseCounterBasedEvents, /* Flags */ 0)) { cleanupOnError(); return Err; } if (auto Err = HostMemAllocator.initHostPool(*this, Plugin.getOptions())) { if (auto DeinitErr = EventPool.deinit()) Err = joinErrors(std::move(Err), std::move(DeinitErr)); cleanupOnError(); return Err; } ze_result_t RC; CALL_ZE(RC, zeDriverGetExtensionFunctionAddress, zeDriver, "zexKernelGetArgumentSize", (void **)&zexKernelGetArgumentSize); if (RC != ZE_RESULT_SUCCESS) zexKernelGetArgumentSize = nullptr; CALL_ZE(RC, zeDriverGetExtensionFunctionAddress, zeDriver, "zeCommandListAppendHostFunction", (void **)&zeCommandListAppendHostFunction); if (RC != ZE_RESULT_SUCCESS) zeCommandListAppendHostFunction = nullptr; return Plugin::success(); } Error L0ContextTy::deinit() { if (auto Err = EventPool.deinit()) return Err; if (auto Err = HostMemAllocator.deinit()) return Err; if (zeContext) CALL_ZE_RET_ERROR(zeContextDestroy, zeContext); return Plugin::success(); } StagingBufferTy &L0ContextTy::getStagingBuffer() { auto &TLS = Plugin.getContextTLS(getZeContext()); auto &Buffer = TLS.getStagingBuffer(); const auto &Options = Plugin.getOptions(); if (!Buffer.initialized()) Buffer.init(getZeContext(), Options.StagingBufferSize, Options.StagingBufferCount); return Buffer; } } // namespace llvm::omp::target::plugin