mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-05 17:20:26 +08:00
Power APIs boilerplate for Level Zero Sysman
- boilerplate for following power APIs -zetSysmanPowerGet -zetSysmanPowerGetProperties -zetSysmanPowerGetEnergyCounter -zetSysmanPowerGetLimits -zetSysmanPowerSetLimits -zetSysmanPowerGetEnergyThreshold -zetSysmanPowerSetEnergyThreshold Change-Id: I6350d869da9a64424b197ce16ac008224405a65d Signed-off-by: Konda <saikishore.konda@intel.com> Signed-off-by: SaiKishore Konda <saikishore.konda@intel.com>
This commit is contained in:
25
level_zero/tools/source/sysman/power/CMakeLists.txt
Normal file
25
level_zero/tools/source/sysman/power/CMakeLists.txt
Normal file
@@ -0,0 +1,25 @@
|
||||
#
|
||||
# Copyright (C) 2020 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
|
||||
set(L0_SRCS_TOOLS_SYSMAN_POWER
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/power.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/power.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/power_imp.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/power_imp.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/os_power.h
|
||||
)
|
||||
|
||||
|
||||
target_sources(${L0_STATIC_LIB_NAME}
|
||||
PRIVATE
|
||||
${L0_SRCS_TOOLS_SYSMAN_POWER}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
|
||||
)
|
||||
|
||||
add_subdirectories()
|
||||
|
||||
# Make our source files visible to parent
|
||||
set_property(GLOBAL PROPERTY L0_SRCS_TOOLS_SYSMAN_POWER ${L0_SRCS_TOOLS_SYSMAN_POWER})
|
||||
18
level_zero/tools/source/sysman/power/linux/CMakeLists.txt
Normal file
18
level_zero/tools/source/sysman/power/linux/CMakeLists.txt
Normal file
@@ -0,0 +1,18 @@
|
||||
#
|
||||
# Copyright (C) 2020 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
|
||||
set(L0_SRCS_TOOLS_SYSMAN_POWER_LINUX
|
||||
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/os_power_imp.cpp
|
||||
)
|
||||
|
||||
if(UNIX)
|
||||
target_sources(${L0_STATIC_LIB_NAME}
|
||||
PRIVATE
|
||||
${L0_SRCS_TOOLS_SYSMAN_POWER_LINUX})
|
||||
endif()
|
||||
|
||||
# Make our source files visible to parent
|
||||
set_property(GLOBAL PROPERTY L0_SRCS_TOOLS_SYSMAN_POWER_LINUX ${L0_SRCS_TOOLS_SYSMAN_POWER_LINUX})
|
||||
35
level_zero/tools/source/sysman/power/linux/os_power_imp.cpp
Normal file
35
level_zero/tools/source/sysman/power/linux/os_power_imp.cpp
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "shared/source/helpers/non_copyable_or_moveable.h"
|
||||
|
||||
#include "level_zero/tools/source/sysman/power/os_power.h"
|
||||
|
||||
#include "sysman/linux/os_sysman_imp.h"
|
||||
|
||||
namespace L0 {
|
||||
|
||||
class LinuxPowerImp : public OsPower, public NEO::NonCopyableClass {
|
||||
public:
|
||||
LinuxPowerImp(OsSysman *pOsSysman);
|
||||
~LinuxPowerImp() override = default;
|
||||
|
||||
private:
|
||||
SysfsAccess *pSysfsAccess = nullptr;
|
||||
};
|
||||
|
||||
LinuxPowerImp::LinuxPowerImp(OsSysman *pOsSysman) {
|
||||
LinuxSysmanImp *pLinuxSysmanImp = static_cast<LinuxSysmanImp *>(pOsSysman);
|
||||
pSysfsAccess = &pLinuxSysmanImp->getSysfsAccess();
|
||||
}
|
||||
|
||||
OsPower *OsPower::create(OsSysman *pOsSysman) {
|
||||
LinuxPowerImp *pLinuxPowerImp = new LinuxPowerImp(pOsSysman);
|
||||
return static_cast<OsPower *>(pLinuxPowerImp);
|
||||
}
|
||||
|
||||
} // namespace L0
|
||||
21
level_zero/tools/source/sysman/power/os_power.h
Normal file
21
level_zero/tools/source/sysman/power/os_power.h
Normal file
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <level_zero/zet_api.h>
|
||||
|
||||
namespace L0 {
|
||||
|
||||
struct OsSysman;
|
||||
class OsPower {
|
||||
public:
|
||||
static OsPower *create(OsSysman *pOsSysman);
|
||||
virtual ~OsPower() = default;
|
||||
};
|
||||
|
||||
} // namespace L0
|
||||
45
level_zero/tools/source/sysman/power/power.cpp
Normal file
45
level_zero/tools/source/sysman/power/power.cpp
Normal file
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "level_zero/tools/source/sysman/power/power.h"
|
||||
|
||||
#include "level_zero/tools/source/sysman/power/power_imp.h"
|
||||
|
||||
namespace L0 {
|
||||
|
||||
PowerHandleContext::~PowerHandleContext() {
|
||||
for (Power *pPower : handleList) {
|
||||
delete pPower;
|
||||
}
|
||||
}
|
||||
|
||||
void PowerHandleContext::init() {
|
||||
Power *pPower = new PowerImp(pOsSysman);
|
||||
if (pPower->initSuccess == true) {
|
||||
handleList.push_back(pPower);
|
||||
} else {
|
||||
delete pPower;
|
||||
}
|
||||
}
|
||||
|
||||
ze_result_t PowerHandleContext::powerGet(uint32_t *pCount, zet_sysman_pwr_handle_t *phPower) {
|
||||
if (nullptr == phPower) {
|
||||
*pCount = static_cast<uint32_t>(handleList.size());
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
uint32_t i = 0;
|
||||
for (Power *power : handleList) {
|
||||
if (i >= *pCount) {
|
||||
break;
|
||||
}
|
||||
phPower[i++] = power->toHandle();
|
||||
}
|
||||
*pCount = i;
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
} // namespace L0
|
||||
47
level_zero/tools/source/sysman/power/power.h
Normal file
47
level_zero/tools/source/sysman/power/power.h
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include <level_zero/zet_api.h>
|
||||
|
||||
#include <vector>
|
||||
|
||||
struct _zet_sysman_pwr_handle_t {
|
||||
virtual ~_zet_sysman_pwr_handle_t() = default;
|
||||
};
|
||||
|
||||
namespace L0 {
|
||||
|
||||
struct OsSysman;
|
||||
class Power : _zet_sysman_pwr_handle_t {
|
||||
public:
|
||||
virtual ze_result_t powerGetProperties(zet_power_properties_t *pProperties) = 0;
|
||||
virtual ze_result_t powerGetEnergyCounter(zet_power_energy_counter_t *pEnergy) = 0;
|
||||
virtual ze_result_t powerGetLimits(zet_power_sustained_limit_t *pSustained, zet_power_burst_limit_t *pBurst, zet_power_peak_limit_t *pPeak) = 0;
|
||||
virtual ze_result_t powerSetLimits(const zet_power_sustained_limit_t *pSustained, const zet_power_burst_limit_t *pBurst, const zet_power_peak_limit_t *pPeak) = 0;
|
||||
virtual ze_result_t powerGetEnergyThreshold(zet_energy_threshold_t *pThreshold) = 0;
|
||||
virtual ze_result_t powerSetEnergyThreshold(double threshold) = 0;
|
||||
|
||||
static Power *fromHandle(zet_sysman_pwr_handle_t handle) {
|
||||
return static_cast<Power *>(handle);
|
||||
}
|
||||
inline zet_sysman_pwr_handle_t toHandle() { return this; }
|
||||
bool initSuccess = false;
|
||||
};
|
||||
struct PowerHandleContext {
|
||||
PowerHandleContext(OsSysman *pOsSysman) : pOsSysman(pOsSysman){};
|
||||
~PowerHandleContext();
|
||||
|
||||
void init();
|
||||
|
||||
ze_result_t powerGet(uint32_t *pCount, zet_sysman_pwr_handle_t *phPower);
|
||||
|
||||
OsSysman *pOsSysman = nullptr;
|
||||
std::vector<Power *> handleList;
|
||||
};
|
||||
|
||||
} // namespace L0
|
||||
51
level_zero/tools/source/sysman/power/power_imp.cpp
Normal file
51
level_zero/tools/source/sysman/power/power_imp.cpp
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "level_zero/tools/source/sysman/power/power_imp.h"
|
||||
|
||||
#include "shared/source/helpers/debug_helpers.h"
|
||||
|
||||
#include "level_zero/core/source/device/device.h"
|
||||
|
||||
namespace L0 {
|
||||
|
||||
ze_result_t PowerImp::powerGetProperties(zet_power_properties_t *pProperties) {
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
}
|
||||
|
||||
ze_result_t PowerImp::powerGetEnergyCounter(zet_power_energy_counter_t *pEnergy) {
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
}
|
||||
|
||||
ze_result_t PowerImp::powerGetLimits(zet_power_sustained_limit_t *pSustained, zet_power_burst_limit_t *pBurst, zet_power_peak_limit_t *pPeak) {
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
}
|
||||
|
||||
ze_result_t PowerImp::powerSetLimits(const zet_power_sustained_limit_t *pSustained, const zet_power_burst_limit_t *pBurst, const zet_power_peak_limit_t *pPeak) {
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
}
|
||||
ze_result_t PowerImp::powerGetEnergyThreshold(zet_energy_threshold_t *pThreshold) {
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
}
|
||||
ze_result_t PowerImp::powerSetEnergyThreshold(double threshold) {
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
}
|
||||
PowerImp::PowerImp(OsSysman *pOsSysman) {
|
||||
pOsPower = OsPower::create(pOsSysman);
|
||||
UNRECOVERABLE_IF(nullptr == pOsPower);
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
PowerImp::~PowerImp() {
|
||||
if (nullptr != pOsPower) {
|
||||
delete pOsPower;
|
||||
pOsPower = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace L0
|
||||
31
level_zero/tools/source/sysman/power/power_imp.h
Normal file
31
level_zero/tools/source/sysman/power/power_imp.h
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "shared/source/helpers/non_copyable_or_moveable.h"
|
||||
|
||||
#include "level_zero/tools/source/sysman/power/os_power.h"
|
||||
#include "level_zero/tools/source/sysman/power/power.h"
|
||||
#include <level_zero/zet_api.h>
|
||||
namespace L0 {
|
||||
class PowerImp : public NEO::NonCopyableClass, public Power {
|
||||
public:
|
||||
ze_result_t powerGetProperties(zet_power_properties_t *pProperties) override;
|
||||
ze_result_t powerGetEnergyCounter(zet_power_energy_counter_t *pEnergy) override;
|
||||
ze_result_t powerGetLimits(zet_power_sustained_limit_t *pSustained, zet_power_burst_limit_t *pBurst, zet_power_peak_limit_t *pPeak) override;
|
||||
ze_result_t powerSetLimits(const zet_power_sustained_limit_t *pSustained, const zet_power_burst_limit_t *pBurst, const zet_power_peak_limit_t *pPeak) override;
|
||||
ze_result_t powerGetEnergyThreshold(zet_energy_threshold_t *pThreshold) override;
|
||||
ze_result_t powerSetEnergyThreshold(double threshold) override;
|
||||
PowerImp() = default;
|
||||
PowerImp(OsSysman *pOsSysman);
|
||||
~PowerImp() override;
|
||||
|
||||
OsPower *pOsPower = nullptr;
|
||||
void init() {}
|
||||
};
|
||||
} // namespace L0
|
||||
18
level_zero/tools/source/sysman/power/windows/CMakeLists.txt
Normal file
18
level_zero/tools/source/sysman/power/windows/CMakeLists.txt
Normal file
@@ -0,0 +1,18 @@
|
||||
#
|
||||
# Copyright (C) 2020 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
|
||||
set(L0_SRCS_TOOLS_SYSMAN_POWER_WINDOWS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/os_power_imp.cpp
|
||||
)
|
||||
|
||||
if(WIN32)
|
||||
target_sources(${L0_STATIC_LIB_NAME}
|
||||
PRIVATE
|
||||
${L0_SRCS_TOOLS_SYSMAN_POWER_WINDOWS})
|
||||
endif()
|
||||
|
||||
# Make our source files visible to parent
|
||||
set_property(GLOBAL PROPERTY L0_SRCS_TOOLS_SYSMAN_POWER_WINDOWS ${L0_SRCS_TOOLS_SYSMAN_POWER_WINDOWS})
|
||||
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "sysman/power/os_power.h"
|
||||
|
||||
namespace L0 {
|
||||
|
||||
class WddmPowerImp : public OsPower {};
|
||||
|
||||
OsPower *OsPower::create(OsSysman *pOsSysman) {
|
||||
WddmPowerImp *pWddmPowerImp = new WddmPowerImp();
|
||||
return static_cast<OsPower *>(pWddmPowerImp);
|
||||
}
|
||||
|
||||
} // namespace L0
|
||||
@@ -10,6 +10,7 @@
|
||||
#include "level_zero/tools/source/sysman/frequency/frequency.h"
|
||||
#include "level_zero/tools/source/sysman/memory/memory.h"
|
||||
#include "level_zero/tools/source/sysman/pci/pci.h"
|
||||
#include "level_zero/tools/source/sysman/power/power.h"
|
||||
#include "level_zero/tools/source/sysman/ras/ras.h"
|
||||
#include "level_zero/tools/source/sysman/scheduler/scheduler.h"
|
||||
#include "level_zero/tools/source/sysman/standby/standby.h"
|
||||
|
||||
@@ -31,9 +31,11 @@ SysmanImp::SysmanImp(ze_device_handle_t hDevice) {
|
||||
pEngineHandleContext = new EngineHandleContext(pOsSysman);
|
||||
pRasHandleContext = new RasHandleContext(pOsSysman);
|
||||
pTempHandleContext = new TemperatureHandleContext(pOsSysman);
|
||||
pPowerHandleContext = new PowerHandleContext(pOsSysman);
|
||||
}
|
||||
|
||||
SysmanImp::~SysmanImp() {
|
||||
freeResource(pPowerHandleContext);
|
||||
freeResource(pTempHandleContext);
|
||||
freeResource(pRasHandleContext);
|
||||
freeResource(pEngineHandleContext);
|
||||
@@ -66,6 +68,9 @@ void SysmanImp::init() {
|
||||
if (pTempHandleContext) {
|
||||
pTempHandleContext->init();
|
||||
}
|
||||
if (pPowerHandleContext) {
|
||||
pPowerHandleContext->init();
|
||||
}
|
||||
if (pPci) {
|
||||
pPci->init();
|
||||
}
|
||||
@@ -161,7 +166,7 @@ ze_result_t SysmanImp::pciGetStats(zet_pci_stats_t *pStats) {
|
||||
}
|
||||
|
||||
ze_result_t SysmanImp::powerGet(uint32_t *pCount, zet_sysman_pwr_handle_t *phPower) {
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
return pPowerHandleContext->powerGet(pCount, phPower);
|
||||
}
|
||||
|
||||
ze_result_t SysmanImp::frequencyGet(uint32_t *pCount, zet_sysman_freq_handle_t *phFrequency) {
|
||||
|
||||
@@ -38,6 +38,7 @@ struct SysmanImp : Sysman {
|
||||
EngineHandleContext *pEngineHandleContext = nullptr;
|
||||
RasHandleContext *pRasHandleContext = nullptr;
|
||||
TemperatureHandleContext *pTempHandleContext = nullptr;
|
||||
PowerHandleContext *pPowerHandleContext = nullptr;
|
||||
|
||||
ze_result_t deviceGetProperties(zet_sysman_properties_t *pProperties) override;
|
||||
ze_result_t schedulerGetCurrentMode(zet_sched_mode_t *pMode) override;
|
||||
|
||||
Reference in New Issue
Block a user