175 lines
5.8 KiB
C++
175 lines
5.8 KiB
C++
/*
|
|
* Copyright (C) 2020-2024 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
#include "shared/source/helpers/device_bitfield.h"
|
|
#include "shared/source/utilities/reference_tracked_object.h"
|
|
|
|
#include "opencl/source/api/cl_types.h"
|
|
#include "opencl/source/cl_device/cl_device_info.h"
|
|
#include "opencl/source/helpers/base_object.h"
|
|
|
|
#include "igfxfmid.h"
|
|
|
|
#include <mutex>
|
|
#include <vector>
|
|
|
|
namespace aub_stream {
|
|
enum EngineType : uint32_t;
|
|
}
|
|
|
|
namespace NEO {
|
|
enum PreemptionMode : uint32_t;
|
|
enum class EngineUsage : uint32_t;
|
|
class Debugger;
|
|
class Device;
|
|
class DriverInfo;
|
|
class ExecutionEnvironment;
|
|
class GmmHelper;
|
|
class GmmClientContext;
|
|
class MemoryManager;
|
|
class PerformanceCounters;
|
|
class Platform;
|
|
struct DeviceInfo;
|
|
struct EngineControl;
|
|
struct HardwareInfo;
|
|
struct RootDeviceEnvironment;
|
|
struct SelectorCopyEngine;
|
|
class GfxCoreHelper;
|
|
class ProductHelper;
|
|
class GTPinGfxCoreHelper;
|
|
|
|
template <>
|
|
struct OpenCLObjectMapper<_cl_device_id> {
|
|
typedef class ClDevice DerivedType;
|
|
};
|
|
|
|
class ClDevice : public BaseObject<_cl_device_id> {
|
|
public:
|
|
static const cl_ulong objectMagic = 0x8055832341AC8D08LL;
|
|
|
|
ClDevice &operator=(const ClDevice &) = delete;
|
|
ClDevice(const ClDevice &) = delete;
|
|
|
|
explicit ClDevice(Device &device, Platform *platformId);
|
|
explicit ClDevice(Device &device, ClDevice &rootClDevice, Platform *platformId);
|
|
~ClDevice() override;
|
|
|
|
void incRefInternal();
|
|
unique_ptr_if_unused<ClDevice> decRefInternal();
|
|
|
|
unsigned int getEnabledClVersion() const { return enabledClVersion; };
|
|
bool areOcl21FeaturesEnabled() const { return ocl21FeaturesEnabled; };
|
|
|
|
void retainApi();
|
|
unique_ptr_if_unused<ClDevice> releaseApi();
|
|
|
|
bool getDeviceAndHostTimer(uint64_t *deviceTimestamp, uint64_t *hostTimestamp) const;
|
|
bool getHostTimer(uint64_t *hostTimestamp) const;
|
|
const HardwareInfo &getHardwareInfo() const;
|
|
EngineControl &getEngine(aub_stream::EngineType engineType, EngineUsage engineUsage);
|
|
EngineControl &getDefaultEngine();
|
|
EngineControl &getInternalEngine();
|
|
SelectorCopyEngine &getSelectorCopyEngine();
|
|
MemoryManager *getMemoryManager() const;
|
|
GmmHelper *getGmmHelper() const;
|
|
GmmClientContext *getGmmClientContext() const;
|
|
double getPlatformHostTimerResolution() const;
|
|
GFXCORE_FAMILY getRenderCoreFamily() const;
|
|
PerformanceCounters *getPerformanceCounters();
|
|
PreemptionMode getPreemptionMode() const;
|
|
Debugger *getDebugger();
|
|
ExecutionEnvironment *getExecutionEnvironment() const;
|
|
const RootDeviceEnvironment &getRootDeviceEnvironment() const;
|
|
bool isFullRangeSvm() const;
|
|
bool areSharedSystemAllocationsAllowed() const;
|
|
uint32_t getRootDeviceIndex() const;
|
|
uint32_t getNumGenericSubDevices() const;
|
|
uint32_t getNumSubDevices() const;
|
|
|
|
// API entry points
|
|
cl_int getDeviceInfo(cl_device_info paramName,
|
|
size_t paramValueSize,
|
|
void *paramValue,
|
|
size_t *paramValueSizeRet);
|
|
|
|
bool getDeviceInfoForImage(cl_device_info paramName,
|
|
const void *&src,
|
|
size_t &srcSize,
|
|
size_t &retSize);
|
|
bool getDeviceInfoExtra(cl_device_info paramName,
|
|
ClDeviceInfoParam ¶m,
|
|
const void *&src,
|
|
size_t &srcSize,
|
|
size_t &retSize);
|
|
|
|
// This helper template is meant to simplify getDeviceInfo
|
|
template <cl_device_info param>
|
|
void getCap(const void *&src,
|
|
size_t &size,
|
|
size_t &retSize);
|
|
|
|
template <cl_device_info param>
|
|
void getStr(const void *&src,
|
|
size_t &size,
|
|
size_t &retSize);
|
|
|
|
Device &getDevice() const noexcept { return device; }
|
|
const ClDeviceInfo &getDeviceInfo() const { return deviceInfo; }
|
|
const DeviceInfo &getSharedDeviceInfo() const;
|
|
ClDevice *getSubDevice(uint32_t deviceId) const;
|
|
ClDevice *getNearestGenericSubDevice(uint32_t deviceId);
|
|
const std::string &peekCompilerExtensions() const;
|
|
const std::string &peekCompilerExtensionsWithFeatures() const;
|
|
DeviceBitfield getDeviceBitfield() const;
|
|
bool arePipesSupported() const;
|
|
bool isPciBusInfoValid() const;
|
|
|
|
static cl_command_queue_capabilities_intel getQueueFamilyCapabilitiesAll();
|
|
MOCKABLE_VIRTUAL cl_command_queue_capabilities_intel getQueueFamilyCapabilities(EngineGroupType type);
|
|
void getQueueFamilyName(char *outputName, EngineGroupType type);
|
|
Platform *getPlatform() const;
|
|
const GfxCoreHelper &getGfxCoreHelper() const;
|
|
const ProductHelper &getProductHelper() const;
|
|
const CompilerProductHelper &getCompilerProductHelper() const;
|
|
const GTPinGfxCoreHelper &getGTPinGfxCoreHelper() const;
|
|
|
|
std::unique_ptr<GTPinGfxCoreHelper> gtpinGfxCoreHelper;
|
|
cl_version getExtensionVersion(std::string name);
|
|
|
|
protected:
|
|
void initializeCaps();
|
|
void initializeExtensionsWithVersion();
|
|
void initializeOpenclCAllVersions();
|
|
void initializeILsWithVersion();
|
|
void initializeOsSpecificCaps();
|
|
void initGTPinHelper();
|
|
void setupFp64Flags();
|
|
const std::string getClDeviceName() const;
|
|
|
|
Device &device;
|
|
ClDevice &rootClDevice;
|
|
std::vector<std::unique_ptr<ClDevice>> subDevices;
|
|
cl_device_id internalParentDevice = nullptr;
|
|
cl_platform_id platformId;
|
|
std::string name;
|
|
std::unique_ptr<DriverInfo> driverInfo;
|
|
unsigned int enabledClVersion = 0u;
|
|
bool ocl21FeaturesEnabled = false;
|
|
std::string deviceExtensions;
|
|
std::string exposedBuiltinKernels = "";
|
|
|
|
ClDeviceInfo deviceInfo = {};
|
|
std::once_flag initializeExtensionsWithVersionOnce;
|
|
|
|
std::vector<unsigned int> simultaneousInterops = {0};
|
|
std::string compilerExtensions;
|
|
std::string compilerExtensionsWithFeatures;
|
|
};
|
|
|
|
} // namespace NEO
|