feature: Add support for frequency media domain for windows

Related-To: LOCI-4287

Signed-off-by: Mayank Raghuwanshi <mayank.raghuwanshi@intel.com>
This commit is contained in:
Mayank Raghuwanshi
2023-05-12 10:04:51 +00:00
committed by Compute-Runtime-Automation
parent 1a80ab2589
commit ac01d02247
16 changed files with 314 additions and 89 deletions

View File

@@ -424,8 +424,9 @@ OsFrequency *OsFrequency::create(OsSysman *pOsSysman, ze_bool_t onSubdevice, uin
return static_cast<OsFrequency *>(pLinuxFrequencyImp);
}
uint16_t OsFrequency::getNumberOfFreqDomainsSupported(OsSysman *pOsSysman) {
return 1; // hardcode for now to support only ZES_FREQ_DOMAIN_GPU
std::vector<zes_freq_domain_t> OsFrequency::getNumberOfFreqDomainsSupported(OsSysman *pOsSysman) {
std::vector<zes_freq_domain_t> freqDomains = {ZES_FREQ_DOMAIN_GPU};
return freqDomains;
}
} // namespace Sysman

View File

@@ -429,8 +429,9 @@ OsFrequency *OsFrequency::create(OsSysman *pOsSysman, ze_bool_t onSubdevice, uin
return static_cast<OsFrequency *>(pLinuxFrequencyImp);
}
uint16_t OsFrequency::getNumberOfFreqDomainsSupported(OsSysman *pOsSysman) {
return 1; // hardcode for now to support only ZES_FREQ_DOMAIN_GPU
std::vector<zes_freq_domain_t> OsFrequency::getNumberOfFreqDomainsSupported(OsSysman *pOsSysman) {
std::vector<zes_freq_domain_t> freqDomains = {ZES_FREQ_DOMAIN_GPU};
return freqDomains;
}
} // namespace Sysman

View File

@@ -30,16 +30,16 @@ void FrequencyHandleContext::createHandle(ze_bool_t onSubdevice, uint32_t subdev
ze_result_t FrequencyHandleContext::init(uint32_t subDeviceCount) {
auto totalDomains = OsFrequency::getNumberOfFreqDomainsSupported(pOsSysman);
UNRECOVERABLE_IF(totalDomains > 2);
UNRECOVERABLE_IF(totalDomains.size() > 3);
if (subDeviceCount == 0) {
for (uint32_t frequencyDomain = 0; frequencyDomain < totalDomains; frequencyDomain++) {
for (const auto &frequencyDomain : totalDomains) {
createHandle(false, 0, static_cast<zes_freq_domain_t>(frequencyDomain));
}
}
else {
for (uint32_t subDeviceId = 0; subDeviceId < subDeviceCount; subDeviceId++) {
for (uint32_t frequencyDomain = 0; frequencyDomain < totalDomains; frequencyDomain++) {
for (const auto &frequencyDomain : totalDomains) {
createHandle(true, subDeviceId, static_cast<zes_freq_domain_t>(frequencyDomain));
}
}

View File

@@ -32,7 +32,7 @@ class OsFrequency {
virtual ze_result_t getOcTjMax(double *pOcTjMax) = 0;
virtual ze_result_t setOcTjMax(double ocTjMax) = 0;
static OsFrequency *create(OsSysman *pOsSysman, ze_bool_t onSubdevice, uint32_t subdeviceId, zes_freq_domain_t type);
static uint16_t getNumberOfFreqDomainsSupported(OsSysman *pOsSysman);
static std::vector<zes_freq_domain_t> getNumberOfFreqDomainsSupported(OsSysman *pOsSysman);
virtual ~OsFrequency() {}
};

View File

@@ -624,7 +624,7 @@ OsFrequency *OsFrequency::create(OsSysman *pOsSysman, ze_bool_t onSubdevice, uin
return static_cast<OsFrequency *>(pWddmFrequencyImp);
}
uint16_t OsFrequency::getNumberOfFreqDomainsSupported(OsSysman *pOsSysman) {
std::vector<zes_freq_domain_t> OsFrequency::getNumberOfFreqDomainsSupported(OsSysman *pOsSysman) {
WddmSysmanImp *pWddmSysmanImp = static_cast<WddmSysmanImp *>(pOsSysman);
KmdSysManager *pKmdSysManager = &pWddmSysmanImp->getKmdSysManager();
@@ -633,18 +633,23 @@ uint16_t OsFrequency::getNumberOfFreqDomainsSupported(OsSysman *pOsSysman) {
request.commandId = KmdSysman::Command::Get;
request.componentId = KmdSysman::Component::FrequencyComponent;
request.requestId = KmdSysman::Requests::Frequency::NumFrequencyDomains;
request.requestId = KmdSysman::Requests::Frequency::SupportedFreqDomains;
ze_result_t status = pKmdSysManager->requestSingle(request, response);
std::vector<zes_freq_domain_t> freqDomains;
if (status != ZE_RESULT_SUCCESS) {
return 0;
return freqDomains;
}
uint32_t maxNumEnginesSupported = 0;
memcpy_s(&maxNumEnginesSupported, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
return static_cast<uint16_t>(maxNumEnginesSupported);
uint32_t supportedFreqDomains = 0;
memcpy_s(&supportedFreqDomains, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
for (uint16_t i = ZES_FREQ_DOMAIN_GPU; i <= ZES_FREQ_DOMAIN_MEDIA; i++) {
if (supportedFreqDomains & 1 << i) {
freqDomains.push_back(static_cast<zes_freq_domain_t>(i));
}
}
return freqDomains;
}
} // namespace Sysman