mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-05 18:06:32 +08:00
Add logic to change queue slice count
Change-Id: I4f5ccb4ecb290e1a05e3a312b9fa2a5d9c5c17f7 Signed-off-by: Katarzyna Cencelewska <katarzyna.cencelewska@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
7fa3865f0b
commit
260759268a
@@ -51,6 +51,12 @@ FlushStamp DrmCommandStreamReceiver<GfxFamily>::flush(BatchBuffer &batchBuffer,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (this->lastSentSliceCount != batchBuffer.sliceCount) {
|
||||
if (drm->setQueueSliceCount(batchBuffer.sliceCount)) {
|
||||
this->lastSentSliceCount = batchBuffer.sliceCount;
|
||||
}
|
||||
}
|
||||
|
||||
FlushStamp flushStamp = bb->peekHandle();
|
||||
this->flushInternal(batchBuffer, allocationsForResidency);
|
||||
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
#include "core/utilities/directory.h"
|
||||
#include "runtime/os_interface/os_inc_base.h"
|
||||
|
||||
#include "drm/i915_drm.h"
|
||||
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <fstream>
|
||||
@@ -131,6 +129,10 @@ void Drm::checkPreemptionSupport() {
|
||||
preemptionSupported = ((0 == ret) && (value & I915_SCHEDULER_CAP_PREEMPTION));
|
||||
}
|
||||
|
||||
void Drm::checkQueueSliceSupport() {
|
||||
sliceCountChangeSupported = getQueueSliceCount(&sseu) == 0 ? true : false;
|
||||
}
|
||||
|
||||
void Drm::setLowPriorityContextParam(uint32_t drmContextId) {
|
||||
drm_i915_gem_context_param gcp = {};
|
||||
gcp.ctx_id = drmContextId;
|
||||
@@ -141,6 +143,37 @@ void Drm::setLowPriorityContextParam(uint32_t drmContextId) {
|
||||
UNRECOVERABLE_IF(retVal != 0);
|
||||
}
|
||||
|
||||
int Drm::getQueueSliceCount(drm_i915_gem_context_param_sseu *sseu) {
|
||||
drm_i915_gem_context_param contextParam = {};
|
||||
contextParam.param = I915_CONTEXT_PARAM_SSEU;
|
||||
sseu->engine.engine_class = I915_ENGINE_CLASS_RENDER;
|
||||
sseu->engine.engine_instance = I915_EXEC_DEFAULT;
|
||||
contextParam.value = reinterpret_cast<uint64_t>(sseu);
|
||||
contextParam.size = sizeof(struct drm_i915_gem_context_param_sseu);
|
||||
|
||||
return ioctl(DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM, &contextParam);
|
||||
}
|
||||
|
||||
uint64_t Drm::getSliceMask(uint64_t sliceCount) {
|
||||
return static_cast<uint64_t>((1 << sliceCount) - 1);
|
||||
}
|
||||
bool Drm::setQueueSliceCount(uint64_t sliceCount) {
|
||||
if (sliceCountChangeSupported) {
|
||||
drm_i915_gem_context_param contextParam = {};
|
||||
sseu.slice_mask = getSliceMask(sliceCount);
|
||||
|
||||
contextParam.param = I915_CONTEXT_PARAM_SSEU;
|
||||
contextParam.ctx_id = 0;
|
||||
contextParam.value = reinterpret_cast<uint64_t>(&sseu);
|
||||
contextParam.size = sizeof(struct drm_i915_gem_context_param_sseu);
|
||||
int retVal = ioctl(DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, &contextParam);
|
||||
if (retVal == 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32_t Drm::createDrmContext() {
|
||||
drm_i915_gem_context_create gcc = {};
|
||||
auto retVal = ioctl(DRM_IOCTL_I915_GEM_CONTEXT_CREATE, &gcc);
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "runtime/os_interface/linux/memory_info.h"
|
||||
#include "runtime/utilities/api_intercept.h"
|
||||
|
||||
#include "drm/i915_drm.h"
|
||||
#include "engine_node.h"
|
||||
#include "igfxfmid.h"
|
||||
|
||||
@@ -73,6 +74,9 @@ class Drm {
|
||||
MOCKABLE_VIRTUAL int getErrno();
|
||||
void setSimplifiedMocsTableUsage(bool value);
|
||||
bool getSimplifiedMocsTableUsage() const;
|
||||
bool setQueueSliceCount(uint64_t sliceCount);
|
||||
void checkQueueSliceSupport();
|
||||
uint64_t getSliceMask(uint64_t sliceCount);
|
||||
void queryEngineInfo();
|
||||
void queryMemoryInfo();
|
||||
void setMemoryRegions();
|
||||
@@ -82,6 +86,9 @@ class Drm {
|
||||
}
|
||||
|
||||
protected:
|
||||
int getQueueSliceCount(drm_i915_gem_context_param_sseu *sseu);
|
||||
bool sliceCountChangeSupported = false;
|
||||
drm_i915_gem_context_param_sseu sseu{};
|
||||
bool useSimplifiedMocsTable = false;
|
||||
bool preemptionSupported = false;
|
||||
int fd;
|
||||
|
||||
@@ -149,9 +149,10 @@ int HwInfoConfig::configureHwInfo(const HardwareInfo *inHwInfo, HardwareInfo *ou
|
||||
|
||||
outHwInfo->capabilityTable.instrumentationEnabled =
|
||||
(outHwInfo->capabilityTable.instrumentationEnabled && haveInstrumentation);
|
||||
|
||||
outHwInfo->capabilityTable.ftrRenderCompressedBuffers = false;
|
||||
outHwInfo->capabilityTable.ftrRenderCompressedImages = false;
|
||||
|
||||
drm->checkQueueSliceSupport();
|
||||
drm->checkPreemptionSupport();
|
||||
bool preemption = drm->isPreemptionSupported();
|
||||
PreemptionHelper::adjustDefaultPreemptionMode(outHwInfo->capabilityTable,
|
||||
|
||||
Reference in New Issue
Block a user