refactor: Refine Sysman Engine Module

Related-To: NEO-14756

Signed-off-by: Pratik Bari <pratik.bari@intel.com>
This commit is contained in:
Pratik Bari
2025-07-24 09:55:52 +00:00
committed by Compute-Runtime-Automation
parent 87ed4728f2
commit b240f92e82
28 changed files with 616 additions and 574 deletions

View File

@@ -22,9 +22,9 @@ namespace L0 {
namespace Sysman {
void LinuxEngineImp::cleanup() {
for (auto &fdPair : fdList) {
DEBUG_BREAK_IF(fdPair.first < 0);
NEO::SysCalls::close(static_cast<int>(fdPair.first));
for (auto &fd : fdList) {
DEBUG_BREAK_IF(fd < 0);
NEO::SysCalls::close(static_cast<int>(fd));
}
fdList.clear();
}
@@ -49,7 +49,7 @@ zes_engine_group_t LinuxEngineImp::getGroupFromEngineType(zes_engine_group_t typ
return ZES_ENGINE_GROUP_ALL;
}
ze_result_t OsEngine::getNumEngineTypeAndInstances(std::set<std::pair<zes_engine_group_t, EngineInstanceSubDeviceId>> &engineGroupInstance, OsSysman *pOsSysman) {
ze_result_t OsEngine::getNumEngineTypeAndInstances(MapOfEngineInfo &mapEngineInfo, OsSysman *pOsSysman) {
LinuxSysmanImp *pLinuxSysmanImp = static_cast<LinuxSysmanImp *>(pOsSysman);
NEO::Drm *pDrm = pLinuxSysmanImp->getDrm();
auto pSysmanKmdInterface = pLinuxSysmanImp->getSysmanKmdInterface();
@@ -68,6 +68,7 @@ ze_result_t OsEngine::getNumEngineTypeAndInstances(std::set<std::pair<zes_engine
NEO::printDebugString(NEO::debugManager.flags.PrintDebugMessages.get(), stderr, "Error@ %s():sysmanQueryEngineInfo is returning false and error message:0x%x \n", __FUNCTION__, ZE_RESULT_ERROR_UNSUPPORTED_FEATURE);
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
}
auto engineInfo = pDrm->getEngineInfo();
auto engineTileMap = engineInfo->getEngineTileInfo();
for (auto itr = engineTileMap.begin(); itr != engineTileMap.end(); ++itr) {
@@ -75,10 +76,37 @@ ze_result_t OsEngine::getNumEngineTypeAndInstances(std::set<std::pair<zes_engine
auto engineGroupRange = engineClassToEngineGroup.equal_range(static_cast<uint16_t>(itr->second.engineClass));
for (auto l0EngineEntryInMap = engineGroupRange.first; l0EngineEntryInMap != engineGroupRange.second; l0EngineEntryInMap++) {
auto l0EngineType = l0EngineEntryInMap->second;
engineGroupInstance.insert({l0EngineType, {static_cast<uint32_t>(itr->second.engineInstance), tileId}});
// Addition of Single Engine Info in the map
auto itrEngineGroupInfo = mapEngineInfo.find(l0EngineType);
auto engineInstanceTileId = std::pair(static_cast<uint32_t>(itr->second.engineInstance), tileId);
if (itrEngineGroupInfo != mapEngineInfo.end()) {
itrEngineGroupInfo->second.insert({engineInstanceTileId});
} else {
SetOfEngineInstanceAndTileId engineInstancesAndTileIds = {engineInstanceTileId};
mapEngineInfo[l0EngineType] = engineInstancesAndTileIds;
}
// Addition of Group Engine Info in the map
if (pSysmanKmdInterface->isGroupEngineInterfaceAvailable() || pSysmanProductHelper->isAggregationOfSingleEnginesSupported()) {
engineGroupInstance.insert({LinuxEngineImp::getGroupFromEngineType(l0EngineType), {0u, tileId}});
engineGroupInstance.insert({ZES_ENGINE_GROUP_ALL, {0u, tileId}});
auto engineGroup = LinuxEngineImp::getGroupFromEngineType(l0EngineType);
auto itrEngineGroupInfo = mapEngineInfo.find(engineGroup);
if (itrEngineGroupInfo != mapEngineInfo.end()) {
itrEngineGroupInfo->second.insert({0u, tileId});
} else {
SetOfEngineInstanceAndTileId engineInstancesAndTileIds = {{0u, tileId}};
mapEngineInfo[engineGroup] = engineInstancesAndTileIds;
}
itrEngineGroupInfo = mapEngineInfo.find(ZES_ENGINE_GROUP_ALL);
if (itrEngineGroupInfo != mapEngineInfo.end()) {
itrEngineGroupInfo->second.insert({0u, tileId});
} else {
SetOfEngineInstanceAndTileId engineInstancesAndTileIds = {{0u, tileId}};
mapEngineInfo[ZES_ENGINE_GROUP_ALL] = engineInstancesAndTileIds;
}
}
}
}
@@ -86,26 +114,62 @@ ze_result_t OsEngine::getNumEngineTypeAndInstances(std::set<std::pair<zes_engine
}
ze_result_t LinuxEngineImp::getActivity(zes_engine_stats_t *pStats) {
auto pSysmanProductHelper = pLinuxSysmanImp->getSysmanProductHelper();
if (!fdList.empty()) {
return pSysmanKmdInterface->readBusynessFromGroupFd(pPmuInterface, fdList[0], pStats);
} else if (pSysmanProductHelper->isAggregationOfSingleEnginesSupported()) {
return pSysmanProductHelper->getGroupEngineBusynessFromSingleEngines(pLinuxSysmanImp, pStats, engineGroup);
} else {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
}
return pSysmanKmdInterface->readBusynessFromGroupFd(pPmuInterface, fdList, pStats);
}
ze_result_t LinuxEngineImp::getProperties(zes_engine_properties_t &properties) {
properties.type = engineGroup;
properties.type = engineGroupInfo.engineGroup;
properties.onSubdevice = onSubDevice;
properties.subdeviceId = tileId;
properties.subdeviceId = engineGroupInfo.tileId;
return ZE_RESULT_SUCCESS;
}
void LinuxEngineImp::init() {
initStatus = pSysmanKmdInterface->getEngineActivityFdListAndConfigPair(engineGroup, engineInstance, gtId, pPmuInterface, fdList, pmuConfigPair);
void LinuxEngineImp::init(MapOfEngineInfo &mapEngineInfo) {
std::vector<uint64_t> pmuConfigs;
const std::string sysmanDeviceDir = std::string(sysDevicesDir) + pSysmanKmdInterface->getSysmanDeviceDirName();
if (isGroupEngineHandle(engineGroupInfo.engineGroup)) {
initStatus = pSysmanKmdInterface->getPmuConfigsForGroupEngines(mapEngineInfo, sysmanDeviceDir, engineGroupInfo, pPmuInterface, pDrm, pmuConfigs);
} else {
initStatus = pSysmanKmdInterface->getPmuConfigsForSingleEngines(sysmanDeviceDir, engineGroupInfo, pPmuInterface, pDrm, pmuConfigs);
}
if (initStatus != ZE_RESULT_SUCCESS) {
NEO::printDebugString(NEO::debugManager.flags.PrintDebugMessages.get(), stderr, "Error@ %s(): Failed to fetch Pmu Configs \n", __FUNCTION__);
return;
} else {
if (pmuConfigs.empty()) {
initStatus = ZE_RESULT_ERROR_UNKNOWN;
NEO::printDebugString(NEO::debugManager.flags.PrintDebugMessages.get(), stderr, "Error@ %s(): Pmu Configs Not Available \n", __FUNCTION__);
return;
} else {
for (auto &config : pmuConfigs) {
int64_t fd = -1;
if (fdList.empty()) {
fd = pPmuInterface->pmuInterfaceOpen(config, -1, PERF_FORMAT_TOTAL_TIME_ENABLED | PERF_FORMAT_GROUP);
if (fd < 0) {
NEO::printDebugString(NEO::debugManager.flags.PrintDebugMessages.get(), stderr, "Error@ %s(): Could not open Ticks Handle \n", __FUNCTION__);
initStatus = SysmanKmdInterface::checkErrorNumberAndReturnStatus();
return;
}
} else {
fd = pPmuInterface->pmuInterfaceOpen(config, static_cast<int>(fdList[0]), PERF_FORMAT_TOTAL_TIME_ENABLED | PERF_FORMAT_GROUP);
if (fd < 0) {
NEO::printDebugString(NEO::debugManager.flags.PrintDebugMessages.get(), stderr, "Error@ %s(): Could not open Ticks Handle \n", __FUNCTION__);
for (auto &fd : fdList) {
NEO::SysCalls::close(static_cast<int>(fd));
}
fdList.clear();
initStatus = SysmanKmdInterface::checkErrorNumberAndReturnStatus();
return;
}
}
fdList.push_back(fd);
}
initStatus = ZE_RESULT_SUCCESS;
}
}
}
bool LinuxEngineImp::isEngineModuleSupported() {
@@ -115,148 +179,26 @@ bool LinuxEngineImp::isEngineModuleSupported() {
return true;
}
void LinuxEngineImp::getConfigPair(std::pair<uint64_t, uint64_t> &configPair) {
configPair = pmuConfigPair;
return;
}
LinuxEngineImp::LinuxEngineImp(OsSysman *pOsSysman, MapOfEngineInfo &mapEngineInfo, zes_engine_group_t type, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubDevice) : onSubDevice(onSubDevice) {
LinuxEngineImp::LinuxEngineImp(OsSysman *pOsSysman, zes_engine_group_t type, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubDevice) : engineGroup(type), engineInstance(engineInstance), tileId(tileId), onSubDevice(onSubDevice) {
pLinuxSysmanImp = static_cast<LinuxSysmanImp *>(pOsSysman);
engineGroupInfo.engineGroup = type;
engineGroupInfo.engineInstance = engineInstance;
engineGroupInfo.tileId = tileId;
pDrm = pLinuxSysmanImp->getDrm();
pDevice = pLinuxSysmanImp->getSysmanDeviceImp();
pPmuInterface = pLinuxSysmanImp->getPmuInterface();
pSysmanKmdInterface = pLinuxSysmanImp->getSysmanKmdInterface();
if (!isGroupEngineHandle(type)) {
auto engineClass = engineGroupToEngineClass.find(type);
gtId = pDrm->getIoctlHelper()->getGtIdFromTileId(tileId, engineClass->second);
}
init();
init(mapEngineInfo);
if (initStatus != ZE_RESULT_SUCCESS) {
cleanup();
}
}
std::unique_ptr<OsEngine> OsEngine::create(OsSysman *pOsSysman, zes_engine_group_t type, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubDevice) {
std::unique_ptr<LinuxEngineImp> pLinuxEngineImp = std::make_unique<LinuxEngineImp>(pOsSysman, type, engineInstance, tileId, onSubDevice);
std::unique_ptr<OsEngine> OsEngine::create(OsSysman *pOsSysman, MapOfEngineInfo &mapEngineInfo, zes_engine_group_t type, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubDevice) {
std::unique_ptr<LinuxEngineImp> pLinuxEngineImp = std::make_unique<LinuxEngineImp>(pOsSysman, mapEngineInfo, type, engineInstance, tileId, onSubDevice);
return pLinuxEngineImp;
}
static int32_t getFdList(PmuInterface *const &pPmuInterface, std::vector<uint64_t> &engineConfigs, std::vector<int64_t> &fdList) {
for (auto &engineConfig : engineConfigs) {
int64_t fd = -1;
if (fdList.empty()) {
fd = pPmuInterface->pmuInterfaceOpen(engineConfig, -1, PERF_FORMAT_TOTAL_TIME_ENABLED | PERF_FORMAT_GROUP);
if (fd < 0) {
return -1;
}
} else {
fd = pPmuInterface->pmuInterfaceOpen(engineConfig, static_cast<int>(fdList[0]), PERF_FORMAT_TOTAL_TIME_ENABLED | PERF_FORMAT_GROUP);
if (fd < 0) {
return -1;
}
}
fdList.push_back(fd);
}
return 0;
}
static void closeFds(std::vector<int64_t> &fdList) {
if (!fdList.empty()) {
for (auto &fd : fdList) {
DEBUG_BREAK_IF(fd < 0);
NEO::SysCalls::close(static_cast<int>(fd));
}
fdList.clear();
}
}
void OsEngine::initGroupEngineHandleGroupFd(OsSysman *pOsSysman) {
LinuxSysmanImp *pLinuxSysmanImp = static_cast<LinuxSysmanImp *>(pOsSysman);
auto pSysmanProductHelper = pLinuxSysmanImp->getSysmanProductHelper();
if (!pSysmanProductHelper->isAggregationOfSingleEnginesSupported()) {
return;
}
auto pPmuInterface = pLinuxSysmanImp->getPmuInterface();
auto pSysmanDeviceImp = pLinuxSysmanImp->getSysmanDeviceImp();
std::vector<uint64_t> mediaEngineConfigs{};
std::vector<uint64_t> computeEngineConfigs{};
std::vector<uint64_t> copyEngineConfigs{};
std::vector<uint64_t> renderEngineConfigs{};
std::vector<uint64_t> allEnginesConfigs{};
for (auto &engine : pSysmanDeviceImp->pEngineHandleContext->handleList) {
zes_engine_properties_t engineProperties = {};
engine->engineGetProperties(&engineProperties);
if (engineProperties.type == ZES_ENGINE_GROUP_MEDIA_DECODE_SINGLE || engineProperties.type == ZES_ENGINE_GROUP_MEDIA_ENCODE_SINGLE || engineProperties.type == ZES_ENGINE_GROUP_MEDIA_ENHANCEMENT_SINGLE) {
mediaEngineConfigs.push_back(engine->configPair.first);
mediaEngineConfigs.push_back(engine->configPair.second);
} else if (engineProperties.type == ZES_ENGINE_GROUP_COMPUTE_SINGLE) {
computeEngineConfigs.push_back(engine->configPair.first);
computeEngineConfigs.push_back(engine->configPair.second);
} else if (engineProperties.type == ZES_ENGINE_GROUP_COPY_SINGLE) {
copyEngineConfigs.push_back(engine->configPair.first);
copyEngineConfigs.push_back(engine->configPair.second);
} else if (engineProperties.type == ZES_ENGINE_GROUP_RENDER_SINGLE) {
renderEngineConfigs.push_back(engine->configPair.first);
renderEngineConfigs.push_back(engine->configPair.second);
}
}
uint64_t allEngineGroupsSize = mediaEngineConfigs.size() + computeEngineConfigs.size() + copyEngineConfigs.size() + renderEngineConfigs.size();
allEnginesConfigs.reserve(allEngineGroupsSize);
allEnginesConfigs.insert(allEnginesConfigs.end(), mediaEngineConfigs.begin(), mediaEngineConfigs.end());
allEnginesConfigs.insert(allEnginesConfigs.end(), computeEngineConfigs.begin(), computeEngineConfigs.end());
allEnginesConfigs.insert(allEnginesConfigs.end(), copyEngineConfigs.begin(), copyEngineConfigs.end());
allEnginesConfigs.insert(allEnginesConfigs.end(), renderEngineConfigs.begin(), renderEngineConfigs.end());
std::vector<std::unique_ptr<L0::Sysman::Engine>>::iterator it = pSysmanDeviceImp->pEngineHandleContext->handleList.begin();
while (it != pSysmanDeviceImp->pEngineHandleContext->handleList.end()) {
int32_t ret = 0;
zes_engine_properties_t engineProperties = {};
(*it)->engineGetProperties(&engineProperties);
if (engineProperties.type == ZES_ENGINE_GROUP_MEDIA_ALL) {
ret = getFdList(pPmuInterface, mediaEngineConfigs, (*it)->fdList);
} else if (engineProperties.type == ZES_ENGINE_GROUP_COMPUTE_ALL) {
ret = getFdList(pPmuInterface, computeEngineConfigs, (*it)->fdList);
} else if (engineProperties.type == ZES_ENGINE_GROUP_COPY_ALL) {
ret = getFdList(pPmuInterface, copyEngineConfigs, (*it)->fdList);
} else if (engineProperties.type == ZES_ENGINE_GROUP_RENDER_ALL) {
ret = getFdList(pPmuInterface, renderEngineConfigs, (*it)->fdList);
} else if (engineProperties.type == ZES_ENGINE_GROUP_ALL) {
ret = getFdList(pPmuInterface, allEnginesConfigs, (*it)->fdList);
}
if (ret < 0) {
closeFds((*it)->fdList);
it = pSysmanDeviceImp->pEngineHandleContext->handleList.erase(it);
} else {
++it;
}
}
return;
}
void OsEngine::closeFdsForGroupEngineHandles(OsSysman *pOsSysman) {
LinuxSysmanImp *pLinuxSysmanImp = static_cast<LinuxSysmanImp *>(pOsSysman);
auto pSysmanDeviceImp = pLinuxSysmanImp->getSysmanDeviceImp();
for (auto &engine : pSysmanDeviceImp->pEngineHandleContext->handleList) {
closeFds(engine->fdList);
}
}
} // namespace Sysman
} // namespace L0

View File

@@ -21,6 +21,13 @@ class SysmanKmdInterface;
class PmuInterface;
class LinuxSysmanImp;
struct Device;
struct EngineGroupInfo {
zes_engine_group_t engineGroup;
uint32_t engineInstance;
uint32_t tileId;
};
class LinuxEngineImp : public OsEngine, NEO::NonCopyableAndNonMovableClass {
public:
ze_result_t getActivity(zes_engine_stats_t *pStats) override;
@@ -30,28 +37,23 @@ class LinuxEngineImp : public OsEngine, NEO::NonCopyableAndNonMovableClass {
ze_result_t getProperties(zes_engine_properties_t &properties) override;
bool isEngineModuleSupported() override;
static zes_engine_group_t getGroupFromEngineType(zes_engine_group_t type);
void getConfigPair(std::pair<uint64_t, uint64_t> &configPair) override;
LinuxEngineImp() = default;
LinuxEngineImp(OsSysman *pOsSysman, zes_engine_group_t type, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubDevice);
LinuxEngineImp(OsSysman *pOsSysman, MapOfEngineInfo &mapEngineInfo, zes_engine_group_t type, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubDevice);
~LinuxEngineImp() override;
void cleanup();
protected:
SysmanKmdInterface *pSysmanKmdInterface = nullptr;
LinuxSysmanImp *pLinuxSysmanImp = nullptr;
zes_engine_group_t engineGroup = ZES_ENGINE_GROUP_ALL;
uint32_t engineInstance = 0;
EngineGroupInfo engineGroupInfo = {};
PmuInterface *pPmuInterface = nullptr;
NEO::Drm *pDrm = nullptr;
SysmanDeviceImp *pDevice = nullptr;
uint32_t gtId = 0;
uint32_t tileId = 0;
ze_bool_t onSubDevice = false;
private:
void init();
std::vector<std::pair<int64_t, int64_t>> fdList{};
std::pair<uint64_t, uint64_t> pmuConfigPair{};
void init(MapOfEngineInfo &mapEngineInfo);
std::vector<int64_t> fdList{};
ze_result_t initStatus = ZE_RESULT_SUCCESS;
};

View File

@@ -24,31 +24,33 @@ EngineHandleContext::~EngineHandleContext() {
releaseEngines();
}
void EngineHandleContext::createHandle(zes_engine_group_t engineType, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubdevice) {
std::unique_ptr<Engine> pEngine = std::make_unique<EngineImp>(pOsSysman, engineType, engineInstance, tileId, onSubdevice);
void EngineHandleContext::createHandle(MapOfEngineInfo &mapEngineInfo, zes_engine_group_t engineType, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubdevice) {
std::unique_ptr<Engine> pEngine = std::make_unique<EngineImp>(pOsSysman, mapEngineInfo, engineType, engineInstance, tileId, onSubdevice);
if (pEngine->initSuccess == true) {
handleList.push_back(std::move(pEngine));
}
}
void EngineHandleContext::init(uint32_t subDeviceCount) {
std::set<std::pair<zes_engine_group_t, EngineInstanceSubDeviceId>> engineGroupInstance = {}; // set contains pair of engine group and struct containing engine instance and gtId
deviceEngineInitStatus = OsEngine::getNumEngineTypeAndInstances(engineGroupInstance, pOsSysman);
MapOfEngineInfo mapEngineInfo = {};
deviceEngineInitStatus = OsEngine::getNumEngineTypeAndInstances(mapEngineInfo, pOsSysman);
if (deviceEngineInitStatus != ZE_RESULT_SUCCESS) {
return;
}
for (auto itr = engineGroupInstance.begin(); itr != engineGroupInstance.end(); ++itr) {
for (auto &engineInfo : mapEngineInfo) {
const auto isSubDevice = subDeviceCount > 0;
createHandle(itr->first, itr->second.first, itr->second.second, isSubDevice);
auto engineGroup = engineInfo.first;
auto setEngineInstanceAndTileId = engineInfo.second;
for (auto &engineInstanceAndTileId : setEngineInstanceAndTileId) {
createHandle(mapEngineInfo, engineGroup, engineInstanceAndTileId.first, engineInstanceAndTileId.second, isSubDevice);
}
}
OsEngine::initGroupEngineHandleGroupFd(pOsSysman);
}
void EngineHandleContext::releaseEngines() {
OsEngine::closeFdsForGroupEngineHandles(pOsSysman);
handleList.clear();
}

View File

@@ -12,11 +12,16 @@
#include <map>
#include <mutex>
#include <set>
#include <vector>
namespace L0 {
namespace Sysman {
using EngineInstanceSubDeviceId = std::pair<uint32_t, uint32_t>;
typedef std::pair<uint32_t, uint32_t> EngineInstanceAndTileId;
typedef std::set<EngineInstanceAndTileId> SetOfEngineInstanceAndTileId;
typedef std::map<zes_engine_group_t, SetOfEngineInstanceAndTileId> MapOfEngineInfo;
struct OsSysman;
class Engine : _zes_engine_handle_t {
@@ -31,8 +36,6 @@ class Engine : _zes_engine_handle_t {
}
inline zes_engine_handle_t toHandle() { return this; }
bool initSuccess = false;
std::pair<uint64_t, uint64_t> configPair{};
std::vector<int64_t> fdList{};
};
struct EngineHandleContext {
@@ -50,7 +53,7 @@ struct EngineHandleContext {
}
private:
void createHandle(zes_engine_group_t engineType, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubdevice);
void createHandle(MapOfEngineInfo &mapEngineInfo, zes_engine_group_t engineType, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubdevice);
std::once_flag initEngineOnce;
bool engineInitDone = false;
ze_result_t deviceEngineInitStatus = ZE_RESULT_SUCCESS;

View File

@@ -26,13 +26,12 @@ ze_result_t EngineImp::engineGetProperties(zes_engine_properties_t *pProperties)
void EngineImp::init() {
if (pOsEngine->isEngineModuleSupported()) {
pOsEngine->getProperties(engineProperties);
pOsEngine->getConfigPair(this->configPair);
this->initSuccess = true;
}
}
EngineImp::EngineImp(OsSysman *pOsSysman, zes_engine_group_t engineType, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubdevice) {
pOsEngine = OsEngine::create(pOsSysman, engineType, engineInstance, tileId, onSubdevice);
EngineImp::EngineImp(OsSysman *pOsSysman, MapOfEngineInfo &mapEngineInfo, zes_engine_group_t engineType, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubdevice) {
pOsEngine = OsEngine::create(pOsSysman, mapEngineInfo, engineType, engineInstance, tileId, onSubdevice);
init();
}

View File

@@ -22,7 +22,7 @@ class EngineImp : public Engine, NEO::NonCopyableAndNonMovableClass {
ze_result_t engineGetActivityExt(uint32_t *pCount, zes_engine_stats_t *pStats) override;
EngineImp() = default;
EngineImp(OsSysman *pOsSysman, zes_engine_group_t engineType, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubdevice);
EngineImp(OsSysman *pOsSysman, MapOfEngineInfo &mapEngineInfo, zes_engine_group_t engineType, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubdevice);
~EngineImp() override;
std::unique_ptr<OsEngine> pOsEngine;

View File

@@ -22,12 +22,9 @@ class OsEngine {
virtual ze_result_t getActivity(zes_engine_stats_t *pStats) = 0;
virtual ze_result_t getActivityExt(uint32_t *pCount, zes_engine_stats_t *pStats) = 0;
virtual ze_result_t getProperties(zes_engine_properties_t &properties) = 0;
virtual void getConfigPair(std::pair<uint64_t, uint64_t> &configPair) = 0;
virtual bool isEngineModuleSupported() = 0;
static std::unique_ptr<OsEngine> create(OsSysman *pOsSysman, zes_engine_group_t engineType, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubdevice);
static ze_result_t getNumEngineTypeAndInstances(std::set<std::pair<zes_engine_group_t, EngineInstanceSubDeviceId>> &engineGroupInstance, OsSysman *pOsSysman);
static void initGroupEngineHandleGroupFd(OsSysman *pOsSysman);
static void closeFdsForGroupEngineHandles(OsSysman *pOsSysman);
static std::unique_ptr<OsEngine> create(OsSysman *pOsSysman, MapOfEngineInfo &mapEngineInfo, zes_engine_group_t engineType, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubdevice);
static ze_result_t getNumEngineTypeAndInstances(MapOfEngineInfo &mapEngineInfo, OsSysman *pOsSysman);
virtual ~OsEngine() = default;
};

View File

@@ -94,17 +94,16 @@ WddmEngineImp::WddmEngineImp(OsSysman *pOsSysman, zes_engine_group_t engineType,
pKmdSysManager = &pWddmSysmanImp->getKmdSysManager();
}
std::unique_ptr<OsEngine> OsEngine::create(OsSysman *pOsSysman, zes_engine_group_t engineType, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubDevice) {
std::unique_ptr<OsEngine> OsEngine::create(OsSysman *pOsSysman, MapOfEngineInfo &mapEngineInfo, zes_engine_group_t engineType, uint32_t engineInstance, uint32_t tileId, ze_bool_t onSubDevice) {
std::unique_ptr<WddmEngineImp> pWddmEngineImp = std::make_unique<WddmEngineImp>(pOsSysman, engineType, engineInstance, tileId);
return pWddmEngineImp;
}
ze_result_t OsEngine::getNumEngineTypeAndInstances(std::set<std::pair<zes_engine_group_t, EngineInstanceSubDeviceId>> &engineGroupInstance, OsSysman *pOsSysman) {
ze_result_t OsEngine::getNumEngineTypeAndInstances(MapOfEngineInfo &mapEngineInfo, OsSysman *pOsSysman) {
WddmSysmanImp *pWddmSysmanImp = static_cast<WddmSysmanImp *>(pOsSysman);
KmdSysManager *pKmdSysManager = &pWddmSysmanImp->getKmdSysManager();
engineGroupInstance.clear();
// create multiple requests for all the possible engine groups
std::vector<KmdSysman::RequestProperty> vRequests{};
std::vector<KmdSysman::ResponseProperty> vResponses{};
@@ -131,26 +130,20 @@ ze_result_t OsEngine::getNumEngineTypeAndInstances(std::set<std::pair<zes_engine
uint32_t index = 0;
for (auto &engineGroup : engineGroupToDomainTypeMap) {
SetOfEngineInstanceAndTileId engineInstancesAndTileIds = {};
if (vResponses[index].dataSize > 0) {
uint32_t instanceCount = 0;
memcpy_s(&instanceCount, sizeof(uint32_t), vResponses[index].dataBuffer, sizeof(uint32_t));
for (uint32_t instance = 0; instance < instanceCount; instance++) {
engineGroupInstance.insert({engineGroup.first, {instance, 0}});
engineInstancesAndTileIds.insert({instance, 0});
}
}
mapEngineInfo[engineGroup.first] = engineInstancesAndTileIds;
index++;
}
return status;
}
void OsEngine::initGroupEngineHandleGroupFd(OsSysman *pOsSysman) {
return;
}
void OsEngine::closeFdsForGroupEngineHandles(OsSysman *pOsSysman) {
return;
}
} // namespace Sysman
} // namespace L0

View File

@@ -20,7 +20,6 @@ class WddmEngineImp : public OsEngine, NEO::NonCopyableAndNonMovableClass {
ze_result_t getActivityExt(uint32_t *pCount, zes_engine_stats_t *pStats) override;
ze_result_t getProperties(zes_engine_properties_t &properties) override;
bool isEngineModuleSupported() override;
void getConfigPair(std::pair<uint64_t, uint64_t> &configPair) override { return; }
WddmEngineImp() = default;
WddmEngineImp(OsSysman *pOsSysman, zes_engine_group_t type, uint32_t engineInstance, uint32_t tileId);