fix: use regular engine for HP copy engine if no HP engine
- map HIGH PRIORTY queues to regular engine for copy engine if there is no HP copy engine available Related-To: NEO-11983 Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:
parent
85df385582
commit
a734a738fa
|
@ -1720,7 +1720,9 @@ ze_result_t DeviceImp::getCsrForOrdinalAndIndex(NEO::CommandStreamReceiver **csr
|
||||||
}
|
}
|
||||||
|
|
||||||
if (copyOnly && contextPriority == NEO::EngineUsage::highPriority) {
|
if (copyOnly && contextPriority == NEO::EngineUsage::highPriority) {
|
||||||
getCsrForHighPriority(csr, copyOnly);
|
if (getCsrForHighPriority(csr, copyOnly) != ZE_RESULT_SUCCESS) {
|
||||||
|
contextPriority = NEO::EngineUsage::regular;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto &osContext = (*csr)->getOsContext();
|
auto &osContext = (*csr)->getOsContext();
|
||||||
|
|
|
@ -4635,6 +4635,15 @@ HWTEST_F(DeviceTest, givenContextGroupSupportedWhenGettingHighPriorityCsrThenCor
|
||||||
engines.push_back({aub_stream::ENGINE_RCS, EngineUsage::regular});
|
engines.push_back({aub_stream::ENGINE_RCS, EngineUsage::regular});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (uint32_t i = 1; i < hwInfo.featureTable.ftrBcsInfo.size(); i++) {
|
||||||
|
auto engineType = EngineHelpers::getBcsEngineAtIdx(i);
|
||||||
|
|
||||||
|
if (hwInfo.featureTable.ftrBcsInfo.test(i)) {
|
||||||
|
|
||||||
|
engines.push_back({engineType, EngineUsage::regular});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return engines;
|
return engines;
|
||||||
}
|
}
|
||||||
EngineGroupType getEngineGroupType(aub_stream::EngineType engineType, EngineUsage engineUsage, const HardwareInfo &hwInfo) const override {
|
EngineGroupType getEngineGroupType(aub_stream::EngineType engineType, EngineUsage engineUsage, const HardwareInfo &hwInfo) const override {
|
||||||
|
@ -4644,6 +4653,10 @@ HWTEST_F(DeviceTest, givenContextGroupSupportedWhenGettingHighPriorityCsrThenCor
|
||||||
if (engineType >= aub_stream::ENGINE_CCS && engineType < (aub_stream::ENGINE_CCS + hwInfo.gtSystemInfo.CCSInfo.NumberOfCCSEnabled)) {
|
if (engineType >= aub_stream::ENGINE_CCS && engineType < (aub_stream::ENGINE_CCS + hwInfo.gtSystemInfo.CCSInfo.NumberOfCCSEnabled)) {
|
||||||
return EngineGroupType::compute;
|
return EngineGroupType::compute;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (engineType == aub_stream::ENGINE_BCS1) {
|
||||||
|
return EngineGroupType::copy;
|
||||||
|
}
|
||||||
UNRECOVERABLE_IF(true);
|
UNRECOVERABLE_IF(true);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -4656,6 +4669,8 @@ HWTEST_F(DeviceTest, givenContextGroupSupportedWhenGettingHighPriorityCsrThenCor
|
||||||
hwInfo.featureTable.flags.ftrCCSNode = true;
|
hwInfo.featureTable.flags.ftrCCSNode = true;
|
||||||
hwInfo.capabilityTable.defaultEngineType = aub_stream::ENGINE_CCS;
|
hwInfo.capabilityTable.defaultEngineType = aub_stream::ENGINE_CCS;
|
||||||
hwInfo.gtSystemInfo.CCSInfo.NumberOfCCSEnabled = 2;
|
hwInfo.gtSystemInfo.CCSInfo.NumberOfCCSEnabled = 2;
|
||||||
|
hwInfo.featureTable.ftrBcsInfo = 0b10;
|
||||||
|
hwInfo.capabilityTable.blitterOperationsSupported = true;
|
||||||
|
|
||||||
MockExecutionEnvironment mockExecutionEnvironment{&hwInfo};
|
MockExecutionEnvironment mockExecutionEnvironment{&hwInfo};
|
||||||
RAIIGfxCoreHelperFactory<MockGfxCoreHelper> raii(*mockExecutionEnvironment.rootDeviceEnvironments[rootDeviceIndex]);
|
RAIIGfxCoreHelperFactory<MockGfxCoreHelper> raii(*mockExecutionEnvironment.rootDeviceEnvironments[rootDeviceIndex]);
|
||||||
|
@ -4671,15 +4686,19 @@ HWTEST_F(DeviceTest, givenContextGroupSupportedWhenGettingHighPriorityCsrThenCor
|
||||||
auto &engineGroups = neoMockDevice->getRegularEngineGroups();
|
auto &engineGroups = neoMockDevice->getRegularEngineGroups();
|
||||||
uint32_t count = static_cast<uint32_t>(engineGroups.size());
|
uint32_t count = static_cast<uint32_t>(engineGroups.size());
|
||||||
auto ordinal = 0u;
|
auto ordinal = 0u;
|
||||||
|
auto ordinalCopy = 0u;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < count; i++) {
|
for (uint32_t i = 0; i < count; i++) {
|
||||||
if (engineGroups[i].engineGroupType == NEO::EngineGroupType::compute) {
|
if (engineGroups[i].engineGroupType == NEO::EngineGroupType::compute) {
|
||||||
ordinal = i;
|
ordinal = i;
|
||||||
break;
|
}
|
||||||
|
if (engineGroups[i].engineGroupType == NEO::EngineGroupType::copy) {
|
||||||
|
ordinalCopy = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT_TRUE(engineGroups[ordinal].engineGroupType == NEO::EngineGroupType::compute);
|
ASSERT_TRUE(engineGroups[ordinal].engineGroupType == NEO::EngineGroupType::compute);
|
||||||
|
ASSERT_TRUE(engineGroups[ordinalCopy].engineGroupType == NEO::EngineGroupType::copy);
|
||||||
|
|
||||||
uint32_t index = 1;
|
uint32_t index = 1;
|
||||||
auto result = deviceImp.getCsrForOrdinalAndIndex(&highPriorityCsr, ordinal, index, ZE_COMMAND_QUEUE_PRIORITY_PRIORITY_HIGH, false);
|
auto result = deviceImp.getCsrForOrdinalAndIndex(&highPriorityCsr, ordinal, index, ZE_COMMAND_QUEUE_PRIORITY_PRIORITY_HIGH, false);
|
||||||
|
@ -4715,6 +4734,15 @@ HWTEST_F(DeviceTest, givenContextGroupSupportedWhenGettingHighPriorityCsrThenCor
|
||||||
ordinal = 100;
|
ordinal = 100;
|
||||||
result = deviceImp.getCsrForOrdinalAndIndex(&highPriorityCsr, ordinal, index, ZE_COMMAND_QUEUE_PRIORITY_PRIORITY_HIGH, false);
|
result = deviceImp.getCsrForOrdinalAndIndex(&highPriorityCsr, ordinal, index, ZE_COMMAND_QUEUE_PRIORITY_PRIORITY_HIGH, false);
|
||||||
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, result);
|
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, result);
|
||||||
|
|
||||||
|
// When no HP copy engine, then regular engine is returned
|
||||||
|
NEO::CommandStreamReceiver *bcsEngine = nullptr;
|
||||||
|
EXPECT_EQ(nullptr, neoMockDevice->getHpCopyEngine());
|
||||||
|
|
||||||
|
result = deviceImp.getCsrForOrdinalAndIndex(&bcsEngine, ordinalCopy, index, ZE_COMMAND_QUEUE_PRIORITY_PRIORITY_HIGH, false);
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||||
|
ASSERT_NE(nullptr, bcsEngine);
|
||||||
|
EXPECT_TRUE(bcsEngine->getOsContext().isRegular());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue