mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-09 22:43:00 +08:00
Update Scheduler APIs as per latest spec
Change-Id: Ia8558ab30c83f1e30dae94cc7eb489ea7a8897da Signed-off-by: Jitendra Sharma <jitendra.sharma@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
fa8e39fe16
commit
94a26db5ba
@@ -14,6 +14,25 @@ namespace L0 {
|
||||
constexpr uint64_t minTimeoutModeHeartbeat = 5000u;
|
||||
constexpr uint64_t minTimeoutInMicroSeconds = 1000u;
|
||||
|
||||
ze_result_t SchedulerImp::setExclusiveMode(ze_bool_t *pNeedReload) {
|
||||
uint64_t timeslice = 0, timeout = 0, heartbeat = 0;
|
||||
*pNeedReload = false;
|
||||
ze_result_t result = pOsScheduler->setPreemptTimeout(timeout);
|
||||
if (result != ZE_RESULT_SUCCESS) {
|
||||
return result;
|
||||
}
|
||||
result = pOsScheduler->setTimesliceDuration(timeslice);
|
||||
if (result != ZE_RESULT_SUCCESS) {
|
||||
return result;
|
||||
}
|
||||
result = pOsScheduler->setHeartbeatInterval(heartbeat);
|
||||
return result;
|
||||
}
|
||||
|
||||
ze_result_t SchedulerImp::setComputeUnitDebugMode(ze_bool_t *pNeedReload) {
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
}
|
||||
|
||||
ze_result_t SchedulerImp::getCurrentMode(zes_sched_mode_t *pMode) {
|
||||
uint64_t timeout = 0;
|
||||
uint64_t timeslice = 0;
|
||||
@@ -63,7 +82,7 @@ ze_result_t SchedulerImp::getTimesliceModeProperties(ze_bool_t getDefaults, zes_
|
||||
return result;
|
||||
}
|
||||
|
||||
ze_result_t SchedulerImp::setTimeoutMode(zes_sched_timeout_properties_t *pProperties, ze_bool_t *pNeedReboot) {
|
||||
ze_result_t SchedulerImp::setTimeoutMode(zes_sched_timeout_properties_t *pProperties, ze_bool_t *pNeedReload) {
|
||||
zes_sched_mode_t currMode;
|
||||
ze_result_t result = getCurrentMode(&currMode);
|
||||
if (result != ZE_RESULT_SUCCESS) {
|
||||
@@ -76,7 +95,7 @@ ze_result_t SchedulerImp::setTimeoutMode(zes_sched_timeout_properties_t *pProper
|
||||
// this method, we would end up in EXCLUSIVE mode
|
||||
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
|
||||
}
|
||||
*pNeedReboot = false;
|
||||
*pNeedReload = false;
|
||||
result = pOsScheduler->setHeartbeatInterval(pProperties->watchdogTimeout);
|
||||
if ((currMode == ZES_SCHED_MODE_TIMEOUT) || (result != ZE_RESULT_SUCCESS)) {
|
||||
return result;
|
||||
@@ -96,13 +115,13 @@ ze_result_t SchedulerImp::setTimeoutMode(zes_sched_timeout_properties_t *pProper
|
||||
return result;
|
||||
}
|
||||
|
||||
ze_result_t SchedulerImp::setTimesliceMode(zes_sched_timeslice_properties_t *pProperties, ze_bool_t *pNeedReboot) {
|
||||
ze_result_t SchedulerImp::setTimesliceMode(zes_sched_timeslice_properties_t *pProperties, ze_bool_t *pNeedReload) {
|
||||
if (pProperties->interval < minTimeoutInMicroSeconds) {
|
||||
// interval(in usec) less than 1000 would be computed to
|
||||
// 0 milli seconds interval.
|
||||
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
|
||||
}
|
||||
*pNeedReboot = false;
|
||||
*pNeedReload = false;
|
||||
ze_result_t result = pOsScheduler->setPreemptTimeout(pProperties->yieldTimeout);
|
||||
if (result != ZE_RESULT_SUCCESS) {
|
||||
return result;
|
||||
@@ -116,31 +135,26 @@ ze_result_t SchedulerImp::setTimesliceMode(zes_sched_timeslice_properties_t *pPr
|
||||
return result;
|
||||
}
|
||||
|
||||
ze_result_t SchedulerImp::setExclusiveMode(ze_bool_t *pNeedReboot) {
|
||||
uint64_t timeslice = 0, timeout = 0, heartbeat = 0;
|
||||
*pNeedReboot = false;
|
||||
ze_result_t result = pOsScheduler->setPreemptTimeout(timeout);
|
||||
if (result != ZE_RESULT_SUCCESS) {
|
||||
return result;
|
||||
}
|
||||
result = pOsScheduler->setTimesliceDuration(timeslice);
|
||||
if (result != ZE_RESULT_SUCCESS) {
|
||||
return result;
|
||||
}
|
||||
result = pOsScheduler->setHeartbeatInterval(heartbeat);
|
||||
return result;
|
||||
}
|
||||
|
||||
ze_result_t SchedulerImp::setComputeUnitDebugMode(ze_bool_t *pNeedReboot) {
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
ze_result_t SchedulerImp::schedulerGetProperties(zes_sched_properties_t *pProperties) {
|
||||
*pProperties = properties;
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
void SchedulerImp::init() {
|
||||
this->initSuccess = pOsScheduler->isSchedulerSupported();
|
||||
properties.onSubdevice = false;
|
||||
properties.canControl = pOsScheduler->canControlScheduler();
|
||||
properties.engines = ZES_ENGINE_TYPE_FLAG_COMPUTE;
|
||||
properties.supportedModes = (1 << ZES_SCHED_MODE_TIMEOUT) | (1 << ZES_SCHED_MODE_TIMESLICE) | (1 << ZES_SCHED_MODE_EXCLUSIVE);
|
||||
}
|
||||
|
||||
SchedulerImp::SchedulerImp(OsSysman *pOsSysman) {
|
||||
if (pOsScheduler == nullptr) {
|
||||
pOsScheduler = OsScheduler::create(pOsSysman);
|
||||
}
|
||||
UNRECOVERABLE_IF(nullptr == pOsScheduler);
|
||||
}
|
||||
init();
|
||||
};
|
||||
|
||||
SchedulerImp::~SchedulerImp() {
|
||||
if (nullptr != pOsScheduler) {
|
||||
|
||||
Reference in New Issue
Block a user