[5/n] L0 immediate commandlist improvements

- Allow flushTask usage for XeHp+ only
- Fix black box test to only use Copy queue if found

Related-To: LOCI-1988

Signed-off-by: Aravind Gopalakrishnan <aravind.gopalakrishnan@intel.com>
This commit is contained in:
Aravind Gopalakrishnan
2022-02-03 23:42:51 +00:00
committed by Compute-Runtime-Automation
parent 492721a6d1
commit f4b4110dfa
8 changed files with 65 additions and 11 deletions

View File

@@ -245,6 +245,7 @@ struct CommandListCoreFamily : CommandListImp {
NEO::PipeControlArgs createBarrierFlags();
void appendMultiTileBarrier(NEO::Device &neoDevice);
size_t estimateBufferSizeMultiTileBarrier(const NEO::HardwareInfo &hwInfo);
bool isFlushTaskSupported();
uint64_t getInputBufferSize(NEO::ImageType imageType, uint64_t bytesPerPixel, const ze_image_region_t *region);
MOCKABLE_VIRTUAL AlignedAllocationData getAlignedAllocation(Device *device, const void *buffer, uint64_t bufferSize, bool hostCopyAllowed);

View File

@@ -136,7 +136,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::initialize(Device *device, NEO
}
if (this->cmdListType == CommandListType::TYPE_IMMEDIATE && !isCopyOnly() && !isInternal()) {
this->isFlushTaskSubmissionEnabled = true;
this->isFlushTaskSubmissionEnabled = this->isFlushTaskSupported();
if (NEO::DebugManager.flags.EnableFlushTaskSubmission.get() != -1) {
this->isFlushTaskSubmissionEnabled = !!NEO::DebugManager.flags.EnableFlushTaskSubmission.get();
}

View File

@@ -202,4 +202,9 @@ inline size_t CommandListCoreFamily<gfxCoreFamily>::estimateBufferSizeMultiTileB
return 0;
}
template <GFXCORE_FAMILY gfxCoreFamily>
inline bool CommandListCoreFamily<gfxCoreFamily>::isFlushTaskSupported() {
return false;
}
} // namespace L0

View File

@@ -348,4 +348,9 @@ inline size_t CommandListCoreFamily<gfxCoreFamily>::estimateBufferSizeMultiTileB
false);
}
template <GFXCORE_FAMILY gfxCoreFamily>
inline bool CommandListCoreFamily<gfxCoreFamily>::isFlushTaskSupported() {
return true;
}
} // namespace L0

View File

@@ -111,7 +111,7 @@ uint32_t getCommandQueueOrdinal(ze_device_handle_t &device) {
return computeQueueGroupOrdinal;
}
uint32_t getCopyOnlyCommandQueueOrdinal(ze_device_handle_t &device) {
int32_t getCopyOnlyCommandQueueOrdinal(ze_device_handle_t &device) {
uint32_t numQueueGroups = 0;
SUCCESS_OR_TERMINATE(zeDeviceGetCommandQueueGroupProperties(device, &numQueueGroups, nullptr));
if (numQueueGroups == 0) {
@@ -121,7 +121,7 @@ uint32_t getCopyOnlyCommandQueueOrdinal(ze_device_handle_t &device) {
std::vector<ze_command_queue_group_properties_t> queueProperties(numQueueGroups);
SUCCESS_OR_TERMINATE(zeDeviceGetCommandQueueGroupProperties(device, &numQueueGroups,
queueProperties.data()));
uint32_t copyOnlyQueueGroupOrdinal = 0;
int32_t copyOnlyQueueGroupOrdinal = -1;
for (uint32_t i = 0; i < numQueueGroups; i++) {
if (!(queueProperties[i].flags & ZE_COMMAND_QUEUE_GROUP_PROPERTY_FLAG_COMPUTE) && (queueProperties[i].flags & ZE_COMMAND_QUEUE_GROUP_PROPERTY_FLAG_COPY)) {
copyOnlyQueueGroupOrdinal = i;

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2021 Intel Corporation
* Copyright (C) 2021-2022 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -28,7 +28,12 @@ void testCopyBetweenHeapDeviceAndStack(ze_context_handle_t &context, ze_device_h
ze_command_list_handle_t cmdList;
ze_command_queue_desc_t cmdQueueDesc = {ZE_STRUCTURE_TYPE_COMMAND_QUEUE_DESC};
uint32_t copyQueueGroup = getCopyOnlyCommandQueueOrdinal(device);
int32_t copyQueueGroup = getCopyOnlyCommandQueueOrdinal(device);
if (copyQueueGroup < 0) {
std::cout << "No Copy queue group found. Skipping test run\n";
validRet = true;
return;
}
cmdQueueDesc.pNext = nullptr;
cmdQueueDesc.flags = 0;
@@ -98,7 +103,12 @@ void testCopyBetweenHostMemAndDeviceMem(ze_context_handle_t &context, ze_device_
ze_command_list_handle_t cmdList;
ze_command_queue_desc_t cmdQueueDesc = {ZE_STRUCTURE_TYPE_COMMAND_QUEUE_DESC};
uint32_t copyQueueGroup = getCopyOnlyCommandQueueOrdinal(device);
int32_t copyQueueGroup = getCopyOnlyCommandQueueOrdinal(device);
if (copyQueueGroup < 0) {
std::cout << "No Copy queue group found. Skipping test run\n";
validRet = true;
return;
}
cmdQueueDesc.pNext = nullptr;
cmdQueueDesc.flags = 0;
@@ -166,7 +176,12 @@ void testRegionCopyOf2DSharedMem(ze_context_handle_t &context, ze_device_handle_
ze_command_list_handle_t cmdList;
ze_command_queue_desc_t cmdQueueDesc = {ZE_STRUCTURE_TYPE_COMMAND_QUEUE_DESC};
uint32_t copyQueueGroup = getCopyOnlyCommandQueueOrdinal(device);
int32_t copyQueueGroup = getCopyOnlyCommandQueueOrdinal(device);
if (copyQueueGroup < 0) {
std::cout << "No Copy queue group found. Skipping test run\n";
validRet = true;
return;
}
cmdQueueDesc.pNext = nullptr;
cmdQueueDesc.flags = 0;
@@ -293,7 +308,12 @@ void testSharedMemDataAccessWithoutCopy(ze_context_handle_t &context, ze_device_
ze_command_list_handle_t cmdList;
ze_command_queue_desc_t cmdQueueDesc = {ZE_STRUCTURE_TYPE_COMMAND_QUEUE_DESC};
uint32_t copyQueueGroup = getCopyOnlyCommandQueueOrdinal(device);
int32_t copyQueueGroup = getCopyOnlyCommandQueueOrdinal(device);
if (copyQueueGroup < 0) {
std::cout << "No Copy queue group found. Skipping test run\n";
validRet = true;
return;
}
cmdQueueDesc.pNext = nullptr;
cmdQueueDesc.flags = 0;
@@ -398,7 +418,12 @@ void testRegionCopyOf3DSharedMem(ze_context_handle_t &context, ze_device_handle_
ze_command_list_handle_t cmdList;
ze_command_queue_desc_t cmdQueueDesc = {ZE_STRUCTURE_TYPE_COMMAND_QUEUE_DESC};
uint32_t copyQueueGroup = getCopyOnlyCommandQueueOrdinal(device);
int32_t copyQueueGroup = getCopyOnlyCommandQueueOrdinal(device);
if (copyQueueGroup < 0) {
std::cout << "No Copy queue group found. Skipping test run\n";
validRet = true;
return;
}
cmdQueueDesc.pNext = nullptr;
cmdQueueDesc.flags = 0;

View File

@@ -47,7 +47,12 @@ void testCopyBetweenHostMemAndDeviceMem(ze_context_handle_t &context, ze_device_
char *stackBuffer = new char[allocSize];
ze_command_list_handle_t cmdList;
uint32_t copyQueueGroup = getCopyOnlyCommandQueueOrdinal(device);
int32_t copyQueueGroup = getCopyOnlyCommandQueueOrdinal(device);
if (copyQueueGroup < 0) {
std::cout << "No Copy queue group found. Skipping test run\n";
validRet = true;
return;
}
createImmediateCommandList(device, context, copyQueueGroup, syncMode, cmdList);
@@ -275,6 +280,11 @@ int main(int argc, char *argv[]) {
std::cout << "\nTest case: Sync mode copy queue for memory copy\n";
testCopyBetweenHostMemAndDeviceMem(context, device, true, outputValidationSuccessful);
}
if (outputValidationSuccessful) {
//Async mode with Copy queue
std::cout << "\nTest case: Async mode copy queue for memory copy\n";
testCopyBetweenHostMemAndDeviceMem(context, device, false, outputValidationSuccessful);
}
SUCCESS_OR_TERMINATE(zeContextDestroy(context));
std::cout << "\nZello Immediate Results validation " << (outputValidationSuccessful ? "PASSED" : "FAILED") << "\n";

View File

@@ -244,7 +244,7 @@ class CommandListImmediateFlushTaskTests : public DeviceFixture {
};
using CommandListImmediateFlushTaskComputeTests = Test<CommandListImmediateFlushTaskTests>;
HWTEST_F(CommandListImmediateFlushTaskComputeTests, givenCommandListIsInititalizedThenByDefaultFlushTaskSubmissionEnabled) {
HWTEST2_F(CommandListImmediateFlushTaskComputeTests, givenCommandListIsInititalizedThenByDefaultFlushTaskSubmissionEnabled, IsAtLeastXeHpCore) {
ze_command_queue_desc_t queueDesc = {};
ze_result_t returnValue;
std::unique_ptr<L0::CommandList> commandList(CommandList::createImmediate(productFamily, device, &queueDesc, false, NEO::EngineGroupType::Compute, returnValue));
@@ -252,6 +252,14 @@ HWTEST_F(CommandListImmediateFlushTaskComputeTests, givenCommandListIsInititaliz
EXPECT_EQ(true, commandList->isFlushTaskSubmissionEnabled);
}
HWTEST2_F(CommandListImmediateFlushTaskComputeTests, givenCommandListIsInititalizedThenByDefaultFlushTaskSubmissionDisabled, IsAtMostGen12lp) {
ze_command_queue_desc_t queueDesc = {};
ze_result_t returnValue;
std::unique_ptr<L0::CommandList> commandList(CommandList::createImmediate(productFamily, device, &queueDesc, false, NEO::EngineGroupType::Compute, returnValue));
EXPECT_EQ(false, commandList->isFlushTaskSubmissionEnabled);
}
HWTEST_F(CommandListImmediateFlushTaskComputeTests, givenFlushTaskSubmissionDisabledWhenCommandListIsInititalizedThenFlushTaskIsSetToFalse) {
NEO::DebugManager.flags.EnableFlushTaskSubmission.set(0);