blob: 4791b727170723122d375338d2ddc7f3c8a24153 [file] [log] [blame] [edit]
//===--- 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
//
//===----------------------------------------------------------------------===//
//
// Code for tracing L0.
//
//===----------------------------------------------------------------------===//
// clang-format off
#ifndef OPENMP_LIBOMPTARGET_PLUGINS_NEXTGEN_LEVEL_ZERO_L0TRACE_H
#define OPENMP_LIBOMPTARGET_PLUGINS_NEXTGEN_LEVEL_ZERO_L0TRACE_H
#include "Shared/Debug.h"
#include "omptarget.h"
#include <string>
#include <level_zero/ze_api.h>
#define CALL_ZE(Rc, Fn, ...) \
do { \
Rc = Fn(__VA_ARGS__); \
} while (0)
/// For non-thread-safe functions.
#define CALL_ZE_RET_MTX(Ret, Fn, Mtx, ...) \
do { \
Mtx.lock(); \
ze_result_t rc; \
CALL_ZE(rc, Fn, __VA_ARGS__); \
Mtx.unlock(); \
if (rc != ZE_RESULT_SUCCESS) { \
DP("Error: %s:%s failed with error code %d, %s\n", __func__, #Fn, rc, \
getZeErrorName(rc)); \
return Ret; \
} \
} while (0)
#define CALL_ZE_RET_ERROR_MTX(Fn, Mtx, ...) \
CALL_ZE_RET_MTX( \
Plugin::error(ErrorCode::UNKNOWN, "%s failed with error %d, %s", \
#Fn, rc, getZeErrorName(rc)), Fn, Mtx, __VA_ARGS__)
/// For thread-safe functions.
#define CALL_ZE_RET(Ret, Fn, ...) \
do { \
ze_result_t rc; \
CALL_ZE(rc, Fn, __VA_ARGS__); \
if (rc != ZE_RESULT_SUCCESS) { \
DP("Error: %s:%s failed with error code %d, %s\n", __func__, #Fn, rc, \
getZeErrorName(rc)); \
return Ret; \
} \
} while (0)
#define CALL_ZE_RET_ERROR(Fn, ...) \
CALL_ZE_RET( \
Plugin::error(ErrorCode::UNKNOWN, "%s failed with error %d, %s", \
#Fn, rc, getZeErrorName(rc)), Fn, __VA_ARGS__)
#define CALL_ZE_EXT_SILENT_RET(Device, Ret, Name, ...) \
do { \
ze_result_t rc; \
CALL_ZE_EXT_SILENT(Device, rc, Name, __VA_ARGS__); \
if (rc != ZE_RESULT_SUCCESS) \
return Ret; \
} while (0)
#define CALL_ZE_EXT_RET_ERROR(Device, Name, ...) \
CALL_ZE_EXT_SILENT_RET(Device, \
Plugin::error(ErrorCode::UNKNOWN, "%s failed with code %d, %s", \
#Name, rc, getZeErrorName(rc)), Name, __VA_ARGS__)
#define FOREACH_ZE_ERROR_CODE(Fn) \
Fn(ZE_RESULT_SUCCESS) \
Fn(ZE_RESULT_NOT_READY) \
Fn(ZE_RESULT_ERROR_DEVICE_LOST) \
Fn(ZE_RESULT_ERROR_OUT_OF_HOST_MEMORY) \
Fn(ZE_RESULT_ERROR_OUT_OF_DEVICE_MEMORY) \
Fn(ZE_RESULT_ERROR_MODULE_BUILD_FAILURE) \
Fn(ZE_RESULT_ERROR_MODULE_LINK_FAILURE) \
Fn(ZE_RESULT_ERROR_DEVICE_REQUIRES_RESET) \
Fn(ZE_RESULT_ERROR_DEVICE_IN_LOW_POWER_STATE) \
Fn(ZE_RESULT_ERROR_INSUFFICIENT_PERMISSIONS) \
Fn(ZE_RESULT_ERROR_NOT_AVAILABLE) \
Fn(ZE_RESULT_ERROR_DEPENDENCY_UNAVAILABLE) \
Fn(ZE_RESULT_WARNING_DROPPED_DATA) \
Fn(ZE_RESULT_ERROR_UNINITIALIZED) \
Fn(ZE_RESULT_ERROR_UNSUPPORTED_VERSION) \
Fn(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE) \
Fn(ZE_RESULT_ERROR_INVALID_ARGUMENT) \
Fn(ZE_RESULT_ERROR_INVALID_NULL_HANDLE) \
Fn(ZE_RESULT_ERROR_HANDLE_OBJECT_IN_USE) \
Fn(ZE_RESULT_ERROR_INVALID_NULL_POINTER) \
Fn(ZE_RESULT_ERROR_INVALID_SIZE) \
Fn(ZE_RESULT_ERROR_UNSUPPORTED_SIZE) \
Fn(ZE_RESULT_ERROR_UNSUPPORTED_ALIGNMENT) \
Fn(ZE_RESULT_ERROR_INVALID_SYNCHRONIZATION_OBJECT) \
Fn(ZE_RESULT_ERROR_INVALID_ENUMERATION) \
Fn(ZE_RESULT_ERROR_UNSUPPORTED_ENUMERATION) \
Fn(ZE_RESULT_ERROR_UNSUPPORTED_IMAGE_FORMAT) \
Fn(ZE_RESULT_ERROR_INVALID_NATIVE_BINARY) \
Fn(ZE_RESULT_ERROR_INVALID_GLOBAL_NAME) \
Fn(ZE_RESULT_ERROR_INVALID_KERNEL_NAME) \
Fn(ZE_RESULT_ERROR_INVALID_FUNCTION_NAME) \
Fn(ZE_RESULT_ERROR_INVALID_GROUP_SIZE_DIMENSION) \
Fn(ZE_RESULT_ERROR_INVALID_GLOBAL_WIDTH_DIMENSION) \
Fn(ZE_RESULT_ERROR_INVALID_KERNEL_ARGUMENT_INDEX) \
Fn(ZE_RESULT_ERROR_INVALID_KERNEL_ARGUMENT_SIZE) \
Fn(ZE_RESULT_ERROR_INVALID_KERNEL_ATTRIBUTE_VALUE) \
Fn(ZE_RESULT_ERROR_INVALID_MODULE_UNLINKED) \
Fn(ZE_RESULT_ERROR_INVALID_COMMAND_LIST_TYPE) \
Fn(ZE_RESULT_ERROR_OVERLAPPING_REGIONS) \
Fn(ZE_RESULT_WARNING_ACTION_REQUIRED) \
Fn(ZE_RESULT_ERROR_UNKNOWN)
#define CASE_TO_STRING(Num) case Num: return #Num;
inline const char *getZeErrorName(int32_t Error) {
switch (Error) {
FOREACH_ZE_ERROR_CODE(CASE_TO_STRING)
default:
return "ZE_RESULT_ERROR_UNKNOWN";
}
}
#endif // OPENMP_LIBOMPTARGET_PLUGINS_NEXTGEN_LEVEL_ZERO_L0TRACE_H