mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 23:03:02 +08:00
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:
committed by
Compute-Runtime-Automation
parent
1a80ab2589
commit
ac01d02247
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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() {}
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user