Fix use of NodeOrdinal in Level Zero

Adjust command queue ordinal when creating the list.

Signed-off-by: Jaime Arteaga <jaime.a.arteaga.molina@intel.com>
This commit is contained in:
Jaime Arteaga
2022-08-05 04:38:40 +00:00
committed by Compute-Runtime-Automation
parent b38c750cc4
commit 50046c473b
3 changed files with 23 additions and 16 deletions

View File

@@ -163,11 +163,15 @@ ze_result_t DeviceImp::createCommandList(const ze_command_list_desc_t *desc,
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
}
uint32_t index = 0;
uint32_t commandQueueGroupOrdinal = desc->commandQueueGroupOrdinal;
adjustCommandQueueDesc(commandQueueGroupOrdinal, index);
NEO::EngineGroupType engineGroupType{};
if (desc->commandQueueGroupOrdinal < numEngineGroups) {
engineGroupType = engineGroups[desc->commandQueueGroupOrdinal].engineGroupType;
if (commandQueueGroupOrdinal < numEngineGroups) {
engineGroupType = engineGroups[commandQueueGroupOrdinal].engineGroupType;
} else {
engineGroupType = subDeviceEngineGroups[desc->commandQueueGroupOrdinal - numEngineGroups].engineGroupType;
engineGroupType = subDeviceEngineGroups[commandQueueGroupOrdinal - numEngineGroups].engineGroupType;
}
auto productFamily = neoDevice->getHardwareInfo().platform.eProductFamily;
@@ -188,21 +192,24 @@ ze_result_t DeviceImp::createCommandListImmediate(const ze_command_queue_desc_t
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
}
ze_command_queue_desc_t commandQueueDesc = *desc;
adjustCommandQueueDesc(commandQueueDesc.ordinal, commandQueueDesc.index);
NEO::EngineGroupType engineGroupType{};
if (desc->ordinal < numEngineGroups) {
engineGroupType = engineGroups[desc->ordinal].engineGroupType;
if (commandQueueDesc.ordinal < numEngineGroups) {
engineGroupType = engineGroups[commandQueueDesc.ordinal].engineGroupType;
} else {
engineGroupType = subDeviceEngineGroups[desc->ordinal - numEngineGroups].engineGroupType;
engineGroupType = subDeviceEngineGroups[commandQueueDesc.ordinal - numEngineGroups].engineGroupType;
}
auto productFamily = neoDevice->getHardwareInfo().platform.eProductFamily;
ze_result_t returnValue = ZE_RESULT_SUCCESS;
*phCommandList = CommandList::createImmediate(productFamily, this, desc, false, engineGroupType, returnValue);
*phCommandList = CommandList::createImmediate(productFamily, this, &commandQueueDesc, false, engineGroupType, returnValue);
return returnValue;
}
void DeviceImp::adjustCommandQueueDesc(ze_command_queue_desc_t &desc) {
void DeviceImp::adjustCommandQueueDesc(uint32_t &ordinal, uint32_t &index) {
auto nodeOrdinal = NEO::DebugManager.flags.NodeOrdinal.get();
if (nodeOrdinal != -1) {
const NEO::HardwareInfo &hwInfo = neoDevice->getHardwareInfo();
@@ -213,15 +220,15 @@ void DeviceImp::adjustCommandQueueDesc(ze_command_queue_desc_t &desc) {
uint32_t currentEngineIndex = 0u;
for (const auto &engine : engineGroups) {
if (engine.engineGroupType == engineGroupType) {
desc.ordinal = currentEngineIndex;
ordinal = currentEngineIndex;
break;
}
currentEngineIndex++;
}
currentEngineIndex = 0u;
for (const auto &engine : engineGroups[desc.ordinal].engines) {
for (const auto &engine : engineGroups[ordinal].engines) {
if (engine.getEngineType() == static_cast<aub_stream::EngineType>(nodeOrdinal)) {
desc.index = currentEngineIndex;
index = currentEngineIndex;
break;
}
currentEngineIndex++;
@@ -239,7 +246,7 @@ ze_result_t DeviceImp::createCommandQueue(const ze_command_queue_desc_t *desc,
auto &subDeviceEngineGroups = this->getSubDeviceCopyEngineGroups();
ze_command_queue_desc_t commandQueueDesc = *desc;
adjustCommandQueueDesc(commandQueueDesc);
adjustCommandQueueDesc(commandQueueDesc.ordinal, commandQueueDesc.index);
if (!this->isQueueGroupOrdinalValid(commandQueueDesc.ordinal)) {
return ZE_RESULT_ERROR_INVALID_ARGUMENT;

View File

@@ -133,7 +133,7 @@ struct DeviceImp : public Device {
CmdListCreateFunPtrT getCmdListCreateFunc(const ze_command_list_desc_t *desc);
protected:
void adjustCommandQueueDesc(ze_command_queue_desc_t &desc);
void adjustCommandQueueDesc(uint32_t &ordinal, uint32_t &index);
NEO::EngineGroupsT subDeviceCopyEngineGroups{};
NEO::GraphicsAllocation *debugSurface = nullptr;

View File

@@ -1096,7 +1096,7 @@ TEST_F(DeviceTest, givenNodeOrdinalFlagWhenCallAdjustCommandQueueDescThenDescOrd
engineGroups.push_back(engineGroupRender);
uint32_t expectedOrdinal = 1u;
deviceImp->adjustCommandQueueDesc(desc);
deviceImp->adjustCommandQueueDesc(desc.ordinal, desc.index);
EXPECT_EQ(desc.ordinal, expectedOrdinal);
}
@@ -1141,7 +1141,7 @@ HWTEST_F(DeviceTest, givenNodeOrdinalFlagWhenCallAdjustCommandQueueDescThenDescO
uint32_t expectedOrdinal = 1u;
uint32_t expectedIndex = 2u;
deviceImp->adjustCommandQueueDesc(desc);
deviceImp->adjustCommandQueueDesc(desc.ordinal, desc.index);
EXPECT_EQ(desc.ordinal, expectedOrdinal);
EXPECT_EQ(desc.index, expectedIndex);
}
@@ -1155,7 +1155,7 @@ TEST_F(DeviceTest, givenNodeOrdinalFlagNotSetWhenCallAdjustCommandQueueDescThenD
ze_command_queue_desc_t desc = {};
EXPECT_EQ(desc.ordinal, 0u);
deviceImp->adjustCommandQueueDesc(desc);
deviceImp->adjustCommandQueueDesc(desc.ordinal, desc.index);
EXPECT_EQ(desc.ordinal, 0u);
}