mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-25 13:33:02 +08:00
[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:
committed by
Compute-Runtime-Automation
parent
492721a6d1
commit
f4b4110dfa
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -348,4 +348,9 @@ inline size_t CommandListCoreFamily<gfxCoreFamily>::estimateBufferSizeMultiTileB
|
||||
false);
|
||||
}
|
||||
|
||||
template <GFXCORE_FAMILY gfxCoreFamily>
|
||||
inline bool CommandListCoreFamily<gfxCoreFamily>::isFlushTaskSupported() {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace L0
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user