Add helper engines to EngineInstanced Device

Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
Bartosz Dunajski
2021-08-18 15:34:29 +00:00
committed by Compute-Runtime-Automation
parent 274fe055e9
commit 4fb5ceeb89
10 changed files with 55 additions and 24 deletions

View File

@@ -261,21 +261,36 @@ bool Device::createDeviceImpl() {
return true;
}
bool Device::engineSupported(const EngineTypeUsage &engineTypeUsage) const {
if (engineInstanced) {
return (EngineHelpers::isBcs(engineTypeUsage.first) || (engineTypeUsage.first == this->engineInstancedType));
void Device::translateToEngineInstanced(EngineInstancesContainer &engineInstancesContainer) {
EngineInstancesContainer newEngines;
for (auto &engine : engineInstancesContainer) {
if (EngineHelpers::isBcs(engine.first) || (engine.first == this->engineInstancedType) || (engine.second != EngineUsage::Regular)) {
newEngines.push_back(engine);
} else {
continue;
}
// Override non-Regular (internal, low priority, ..) to engineInstancedType
if (newEngines.rbegin()->second != EngineUsage::Regular && !EngineHelpers::isBcs(newEngines.rbegin()->first)) {
newEngines.rbegin()->first = this->engineInstancedType;
}
}
return true;
std::swap(newEngines, engineInstancesContainer);
}
bool Device::createEngines() {
auto &hwInfo = getHardwareInfo();
auto gpgpuEngines = HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(hwInfo);
if (engineInstanced) {
translateToEngineInstanced(gpgpuEngines);
}
uint32_t deviceCsrIndex = 0;
for (auto &engine : gpgpuEngines) {
if (engineSupported(engine) && !createEngine(deviceCsrIndex++, engine)) {
if (!createEngine(deviceCsrIndex++, engine)) {
return false;
}
}
@@ -307,7 +322,7 @@ bool Device::createEngine(uint32_t deviceCsrIndex, EngineTypeUsage engineTypeUsa
const auto &hwInfo = getHardwareInfo();
const auto engineType = engineTypeUsage.first;
const auto engineUsage = engineTypeUsage.second;
const auto defaultEngineType = getChosenEngineType(hwInfo);
const auto defaultEngineType = engineInstanced ? this->engineInstancedType : getChosenEngineType(hwInfo);
const bool isDefaultEngine = defaultEngineType == engineType && engineUsage == EngineUsage::Regular;
const bool createAsEngineInstanced = engineInstanced && EngineHelpers::isCcs(engineType);

View File

@@ -143,7 +143,6 @@ class Device : public ReferenceTrackedObject<Device> {
virtual bool createEngines();
void addEngineToEngineGroup(EngineControl &engine);
bool engineSupported(const EngineTypeUsage &engineTypeUsage) const;
MOCKABLE_VIRTUAL bool createEngine(uint32_t deviceCsrIndex, EngineTypeUsage engineTypeUsage);
MOCKABLE_VIRTUAL std::unique_ptr<CommandStreamReceiver> createCommandStreamReceiver() const;
MOCKABLE_VIRTUAL SubDevice *createSubDevice(uint32_t subDeviceIndex);
@@ -156,6 +155,7 @@ class Device : public ReferenceTrackedObject<Device> {
virtual bool genericSubDevicesAllowed();
bool engineInstancedSubDevicesAllowed();
void setAsEngineInstanced();
void translateToEngineInstanced(EngineInstancesContainer &engineInstancesContainer);
DeviceInfo deviceInfo = {};

View File

@@ -181,7 +181,7 @@ uint32_t HwHelperHw<Family>::getMetricsLibraryGenId() const {
}
template <>
const HwHelper::EngineInstancesContainer HwHelperHw<Family>::getGpgpuEngineInstances(const HardwareInfo &hwInfo) const {
const EngineInstancesContainer HwHelperHw<Family>::getGpgpuEngineInstances(const HardwareInfo &hwInfo) const {
auto defaultEngine = getChosenEngineType(hwInfo);
EngineInstancesContainer engines = {

View File

@@ -9,6 +9,7 @@
#include "shared/source/command_stream/preemption_mode.h"
#include "shared/source/helpers/common_types.h"
#include "shared/source/utilities/stackvec.h"
#include "engine_node.h"
@@ -29,6 +30,7 @@ enum class EngineUsage : uint32_t {
};
using EngineTypeUsage = std::pair<aub_stream::EngineType, EngineUsage>;
using EngineInstancesContainer = StackVec<EngineTypeUsage, 32>;
struct EngineDescriptor {
EngineDescriptor() = delete;

View File

@@ -44,7 +44,6 @@ enum class LocalMemoryAccessMode {
class HwHelper {
public:
using EngineInstancesContainer = StackVec<EngineTypeUsage, 32>;
static HwHelper &get(GFXCORE_FAMILY gfxCore);
virtual uint32_t getBindingTableStateSurfaceStatePointer(const void *pBindingTable, uint32_t index) = 0;
virtual size_t getBindingTableStateSize() const = 0;

View File

@@ -51,7 +51,7 @@ bool HwHelperHw<GfxFamily>::timestampPacketWriteSupported() const {
}
template <typename GfxFamily>
const HwHelper::EngineInstancesContainer HwHelperHw<GfxFamily>::getGpgpuEngineInstances(const HardwareInfo &hwInfo) const {
const EngineInstancesContainer HwHelperHw<GfxFamily>::getGpgpuEngineInstances(const HardwareInfo &hwInfo) const {
return {
{aub_stream::ENGINE_RCS, EngineUsage::Regular},
{aub_stream::ENGINE_RCS, EngineUsage::LowPriority},

View File

@@ -65,7 +65,7 @@ bool HwHelperHw<GfxFamily>::timestampPacketWriteSupported() const {
}
template <typename GfxFamily>
const HwHelper::EngineInstancesContainer HwHelperHw<GfxFamily>::getGpgpuEngineInstances(const HardwareInfo &hwInfo) const {
const EngineInstancesContainer HwHelperHw<GfxFamily>::getGpgpuEngineInstances(const HardwareInfo &hwInfo) const {
auto defaultEngine = getChosenEngineType(hwInfo);
EngineInstancesContainer engines;