108 lines
3.2 KiB
C++
108 lines
3.2 KiB
C++
//===-- Shared/Environment.h - OpenMP GPU environments ------------ C++ -*-===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Environments shared between host and device.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef OMPTARGET_SHARED_ENVIRONMENT_H
|
|
#define OMPTARGET_SHARED_ENVIRONMENT_H
|
|
|
|
#ifdef OMPTARGET_DEVICE_RUNTIME
|
|
#include "Types.h"
|
|
#else
|
|
#include "SourceInfo.h"
|
|
|
|
#include <cstdint>
|
|
|
|
using IdentTy = ident_t;
|
|
#endif
|
|
|
|
#include "llvm/Frontend/OpenMP/OMPDeviceConstants.h"
|
|
|
|
enum class DeviceDebugKind : uint32_t {
|
|
Assertion = 1U << 0,
|
|
FunctionTracing = 1U << 1,
|
|
CommonIssues = 1U << 2,
|
|
AllocationTracker = 1U << 3,
|
|
};
|
|
|
|
struct DeviceEnvironmentTy {
|
|
uint32_t DeviceDebugKind;
|
|
uint32_t NumDevices;
|
|
uint32_t DeviceNum;
|
|
uint32_t DynamicMemSize;
|
|
uint64_t ClockFrequency;
|
|
uintptr_t IndirectCallTable;
|
|
uint64_t IndirectCallTableSize;
|
|
uint64_t HardwareParallelism;
|
|
};
|
|
|
|
struct DeviceMemoryPoolTy {
|
|
void *Ptr;
|
|
uint64_t Size;
|
|
};
|
|
|
|
struct DeviceMemoryPoolTrackingTy {
|
|
uint64_t NumAllocations;
|
|
uint64_t AllocationTotal;
|
|
uint64_t AllocationMin;
|
|
uint64_t AllocationMax;
|
|
|
|
void combine(DeviceMemoryPoolTrackingTy &Other) {
|
|
NumAllocations += Other.NumAllocations;
|
|
AllocationTotal += Other.AllocationTotal;
|
|
AllocationMin = AllocationMin > Other.AllocationMin ? Other.AllocationMin
|
|
: AllocationMin;
|
|
AllocationMax = AllocationMax < Other.AllocationMax ? Other.AllocationMax
|
|
: AllocationMax;
|
|
}
|
|
};
|
|
|
|
// NOTE: Please don't change the order of those members as their indices are
|
|
// used in the middle end. Always add the new data member at the end.
|
|
// Different from KernelEnvironmentTy below, this structure contains members
|
|
// that might be modified at runtime.
|
|
struct DynamicEnvironmentTy {
|
|
/// Current indentation level for the function trace. Only accessed by thread
|
|
/// 0.
|
|
uint16_t DebugIndentionLevel;
|
|
};
|
|
|
|
// NOTE: Please don't change the order of those members as their indices are
|
|
// used in the middle end. Always add the new data member at the end.
|
|
struct ConfigurationEnvironmentTy {
|
|
uint8_t UseGenericStateMachine = 2;
|
|
uint8_t MayUseNestedParallelism = 2;
|
|
llvm::omp::OMPTgtExecModeFlags ExecMode = llvm::omp::OMP_TGT_EXEC_MODE_SPMD;
|
|
// Information about (legal) launch configurations.
|
|
//{
|
|
int32_t MinThreads = -1;
|
|
int32_t MaxThreads = -1;
|
|
int32_t MinTeams = -1;
|
|
int32_t MaxTeams = -1;
|
|
int32_t ReductionDataSize = 0;
|
|
int32_t ReductionBufferLength = 0;
|
|
//}
|
|
};
|
|
|
|
// NOTE: Please don't change the order of those members as their indices are
|
|
// used in the middle end. Always add the new data member at the end.
|
|
struct KernelEnvironmentTy {
|
|
ConfigurationEnvironmentTy Configuration;
|
|
IdentTy *Ident = nullptr;
|
|
DynamicEnvironmentTy *DynamicEnv = nullptr;
|
|
};
|
|
|
|
struct KernelLaunchEnvironmentTy {
|
|
uint32_t ReductionCnt = 0;
|
|
uint32_t ReductionIterCnt = 0;
|
|
void *ReductionBuffer = nullptr;
|
|
};
|
|
|
|
#endif // OMPTARGET_SHARED_ENVIRONMENT_H
|