mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-05 09:09:04 +08:00
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:
committed by
Compute-Runtime-Automation
parent
b38c750cc4
commit
50046c473b
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user