1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
/*
* Copyright (C) 2018-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "shared/source/helpers/common_types.h"
#include "shared/source/memory_manager/unified_memory_manager.h"
#include "shared/source/memory_manager/unified_memory_pooling.h"
#include "shared/source/utilities/reference_tracked_object.h"
#include "shared/source/utilities/staging_buffer_manager.h"
#include "opencl/source/api/cl_types.h"
#include "opencl/source/cl_device/cl_device_vector.h"
#include "opencl/source/helpers/base_object.h"
#include <mutex>
#include <vector>
namespace NEO {
class CompilerInterface;
class Device;
class ExecutionEnvironment;
class GmmHelper;
class GmmClientContext;
class SVMAllocsManager;
class StagingBufferManager;
struct PlatformInfo;
struct HardwareInfo;
class ClDevice;
template <>
struct OpenCLObjectMapper<_cl_platform_id> {
typedef class Platform DerivedType;
};
class Platform : public BaseObject<_cl_platform_id> {
public:
static const cl_ulong objectMagic = 0x8873ACDEF2342133LL;
Platform(ExecutionEnvironment &executionEnvironment);
~Platform() override;
cl_int getInfo(cl_platform_info paramName,
size_t paramValueSize,
void *paramValue,
size_t *paramValueSizeRet);
MOCKABLE_VIRTUAL bool initialize(std::vector<std::unique_ptr<Device>> devices);
bool isInitialized();
void tryNotifyGtpinInit();
size_t getNumDevices() const;
ClDevice **getClDevices();
ClDevice *getClDevice(size_t deviceOrdinal);
void devicesCleanup(bool processTermination);
const PlatformInfo &getPlatformInfo() const;
ExecutionEnvironment *peekExecutionEnvironment() const { return &executionEnvironment; }
SVMAllocsManager *getSVMAllocsManager() const;
StagingBufferManager *getStagingBufferManager() const;
UsmMemAllocPool &getHostMemAllocPool();
void initializeHostUsmAllocationPool();
void incActiveContextCount();
void decActiveContextCount();
static std::unique_ptr<Platform> (*createFunc)(ExecutionEnvironment &executionEnvironment);
protected:
enum {
StateNone,
StateIniting,
StateInited,
};
cl_uint state = StateNone;
void fillGlobalDispatchTable();
std::unique_ptr<PlatformInfo> platformInfo;
ClDeviceVector clDevices;
ExecutionEnvironment &executionEnvironment;
std::once_flag initializeExtensionsWithVersionOnce;
std::once_flag oclInitGTPinOnce;
SVMAllocsManager *svmAllocsManager = nullptr;
StagingBufferManager *stagingBufferManager = nullptr;
int32_t activeContextCount = 0;
UsmMemAllocPool usmHostMemAllocPool;
bool usmPoolInitialized = false;
};
static_assert(NEO::NonCopyableAndNonMovable<BaseObject<_cl_platform_id>>);
static_assert(NEO::NonCopyableAndNonMovable<Platform>);
extern std::vector<std::unique_ptr<Platform>> *platformsImpl;
} // namespace NEO
|