From eea582355d14246198c68e724e7fa34454234328 Mon Sep 17 00:00:00 2001 From: Zbigniew Zdanowicz Date: Fri, 16 Sep 2022 03:43:18 +0000 Subject: [PATCH] Reorganize systolic tests Signed-off-by: Zbigniew Zdanowicz --- .../unit_tests/fixtures/cmdlist_fixture.cpp | 62 +++++++++++++++++++ .../unit_tests/fixtures/cmdlist_fixture.h | 4 ++ .../test_cmdqueue_enqueue_cmdlist_2.cpp | 51 +-------------- .../command_stream_receiver_fixture.cpp | 1 + .../command_stream_receiver_fixture.h | 5 ++ .../command_stream_receiver_fixture.inl | 46 ++++++++++++++ shared/test/common/libult/CMakeLists.txt | 1 + shared/test/common/test_macros/hw_test.h | 8 +++ .../unit_test/command_stream/CMakeLists.txt | 2 +- .../command_stream_receiver_tests.cpp | 40 ++---------- 10 files changed, 136 insertions(+), 84 deletions(-) create mode 100644 shared/test/common/fixtures/command_stream_receiver_fixture.inl diff --git a/level_zero/core/test/unit_tests/fixtures/cmdlist_fixture.cpp b/level_zero/core/test/unit_tests/fixtures/cmdlist_fixture.cpp index 26943f519c..ddb7bbe259 100644 --- a/level_zero/core/test/unit_tests/fixtures/cmdlist_fixture.cpp +++ b/level_zero/core/test/unit_tests/fixtures/cmdlist_fixture.cpp @@ -118,5 +118,67 @@ void MultiReturnCommandListFixture::setUp() { ModuleMutableCommandListFixture::setUp(REVISION_B); } +void CmdListPipelineSelectStateFixture::testBody() { + const ze_group_count_t groupCount{1, 1, 1}; + CmdListKernelLaunchParams launchParams = {}; + + auto &cmdlistRequiredState = commandList->getRequiredStreamState(); + auto &cmdListFinalState = commandList->getFinalStreamState(); + + mockKernelImmData->kernelDescriptor->kernelAttributes.flags.usesSystolicPipelineSelectMode = 1; + auto result = commandList->appendLaunchKernel(kernel->toHandle(), &groupCount, nullptr, 0, nullptr, launchParams); + EXPECT_EQ(ZE_RESULT_SUCCESS, result); + + EXPECT_EQ(1, cmdlistRequiredState.pipelineSelect.systolicMode.value); + EXPECT_EQ(1, cmdListFinalState.pipelineSelect.systolicMode.value); + + mockKernelImmData->kernelDescriptor->kernelAttributes.flags.usesSystolicPipelineSelectMode = 0; + result = commandList->appendLaunchKernel(kernel->toHandle(), &groupCount, nullptr, 0, nullptr, launchParams); + EXPECT_EQ(ZE_RESULT_SUCCESS, result); + + EXPECT_EQ(1, cmdlistRequiredState.pipelineSelect.systolicMode.value); + EXPECT_EQ(0, cmdListFinalState.pipelineSelect.systolicMode.value); + + commandList->close(); + + auto &csrState = commandQueue->csr->getStreamProperties(); + + auto commandListHandle = commandList->toHandle(); + result = commandQueue->executeCommandLists(1, &commandListHandle, nullptr, false); + EXPECT_EQ(ZE_RESULT_SUCCESS, result); + + EXPECT_EQ(0, csrState.pipelineSelect.systolicMode.value); + + commandList->reset(); + + mockKernelImmData->kernelDescriptor->kernelAttributes.flags.usesSystolicPipelineSelectMode = 1; + result = commandList->appendLaunchKernel(kernel->toHandle(), &groupCount, nullptr, 0, nullptr, launchParams); + EXPECT_EQ(ZE_RESULT_SUCCESS, result); + + EXPECT_EQ(1, cmdlistRequiredState.pipelineSelect.systolicMode.value); + EXPECT_EQ(1, cmdListFinalState.pipelineSelect.systolicMode.value); + + mockKernelImmData->kernelDescriptor->kernelAttributes.flags.usesSystolicPipelineSelectMode = 0; + result = commandList->appendLaunchKernel(kernel->toHandle(), &groupCount, nullptr, 0, nullptr, launchParams); + EXPECT_EQ(ZE_RESULT_SUCCESS, result); + + EXPECT_EQ(1, cmdlistRequiredState.pipelineSelect.systolicMode.value); + EXPECT_EQ(0, cmdListFinalState.pipelineSelect.systolicMode.value); + + mockKernelImmData->kernelDescriptor->kernelAttributes.flags.usesSystolicPipelineSelectMode = 1; + result = commandList->appendLaunchKernel(kernel->toHandle(), &groupCount, nullptr, 0, nullptr, launchParams); + EXPECT_EQ(ZE_RESULT_SUCCESS, result); + + EXPECT_EQ(1, cmdlistRequiredState.pipelineSelect.systolicMode.value); + EXPECT_EQ(1, cmdListFinalState.pipelineSelect.systolicMode.value); + + commandList->close(); + + result = commandQueue->executeCommandLists(1, &commandListHandle, nullptr, false); + EXPECT_EQ(ZE_RESULT_SUCCESS, result); + + EXPECT_EQ(1, csrState.pipelineSelect.systolicMode.value); +} + } // namespace ult } // namespace L0 diff --git a/level_zero/core/test/unit_tests/fixtures/cmdlist_fixture.h b/level_zero/core/test/unit_tests/fixtures/cmdlist_fixture.h index eaef891ce1..7809457b15 100644 --- a/level_zero/core/test/unit_tests/fixtures/cmdlist_fixture.h +++ b/level_zero/core/test/unit_tests/fixtures/cmdlist_fixture.h @@ -167,5 +167,9 @@ struct MultiReturnCommandListFixture : public ModuleMutableCommandListFixture { DebugManagerStateRestore restorer; }; +struct CmdListPipelineSelectStateFixture : public ModuleMutableCommandListFixture { + void testBody(); +}; + } // namespace ult } // namespace L0 diff --git a/level_zero/core/test/unit_tests/sources/cmdqueue/test_cmdqueue_enqueue_cmdlist_2.cpp b/level_zero/core/test/unit_tests/sources/cmdqueue/test_cmdqueue_enqueue_cmdlist_2.cpp index 61e24a69f1..444660ab70 100644 --- a/level_zero/core/test/unit_tests/sources/cmdqueue/test_cmdqueue_enqueue_cmdlist_2.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdqueue/test_cmdqueue_enqueue_cmdlist_2.cpp @@ -533,57 +533,12 @@ HWTEST_F(PauseOnGpuTests, givenPauseModeSetToBeforeAndAfterWhenDispatchingThenIn EXPECT_EQ(1u, pipeControlAfterWalkerFound); } -using CmdListPipelineSelectStateTest = Test; +using CmdListPipelineSelectStateTest = Test; -using SystolicSupport = IsWithinProducts; +using SystolicSupport = IsAnyProducts; HWTEST2_F(CmdListPipelineSelectStateTest, givenAppendSystolicKernelToCommandListWhenExecutingCommandListThenPipelineSelectStateIsTrackedCorrectly, SystolicSupport) { - - const ze_group_count_t groupCount{1, 1, 1}; - CmdListKernelLaunchParams launchParams = {}; - - auto &cmdlistRequiredState = commandList->getRequiredStreamState(); - auto &cmdListFinalState = commandList->getFinalStreamState(); - - mockKernelImmData->kernelDescriptor->kernelAttributes.flags.usesSystolicPipelineSelectMode = 1; - auto result = commandList->appendLaunchKernel(kernel->toHandle(), &groupCount, nullptr, 0, nullptr, launchParams); - EXPECT_EQ(ZE_RESULT_SUCCESS, result); - - EXPECT_EQ(1, cmdlistRequiredState.pipelineSelect.systolicMode.value); - EXPECT_EQ(1, cmdListFinalState.pipelineSelect.systolicMode.value); - - mockKernelImmData->kernelDescriptor->kernelAttributes.flags.usesSystolicPipelineSelectMode = 0; - result = commandList->appendLaunchKernel(kernel->toHandle(), &groupCount, nullptr, 0, nullptr, launchParams); - EXPECT_EQ(ZE_RESULT_SUCCESS, result); - - EXPECT_EQ(1, cmdlistRequiredState.pipelineSelect.systolicMode.value); - EXPECT_EQ(0, cmdListFinalState.pipelineSelect.systolicMode.value); - - commandList->close(); - - auto &csrState = commandQueue->csr->getStreamProperties(); - - auto commandListHandle = commandList->toHandle(); - result = commandQueue->executeCommandLists(1, &commandListHandle, nullptr, false); - EXPECT_EQ(ZE_RESULT_SUCCESS, result); - - EXPECT_EQ(0, csrState.pipelineSelect.systolicMode.value); - - commandList->reset(); - - mockKernelImmData->kernelDescriptor->kernelAttributes.flags.usesSystolicPipelineSelectMode = 1; - result = commandList->appendLaunchKernel(kernel->toHandle(), &groupCount, nullptr, 0, nullptr, launchParams); - EXPECT_EQ(ZE_RESULT_SUCCESS, result); - - EXPECT_EQ(1, cmdlistRequiredState.pipelineSelect.systolicMode.value); - EXPECT_EQ(1, cmdListFinalState.pipelineSelect.systolicMode.value); - - commandList->close(); - - result = commandQueue->executeCommandLists(1, &commandListHandle, nullptr, false); - EXPECT_EQ(ZE_RESULT_SUCCESS, result); - - EXPECT_EQ(1, csrState.pipelineSelect.systolicMode.value); + testBody(); } } // namespace ult diff --git a/shared/test/common/fixtures/command_stream_receiver_fixture.cpp b/shared/test/common/fixtures/command_stream_receiver_fixture.cpp index 0e6a924ffc..3ff1931b75 100644 --- a/shared/test/common/fixtures/command_stream_receiver_fixture.cpp +++ b/shared/test/common/fixtures/command_stream_receiver_fixture.cpp @@ -32,6 +32,7 @@ void CommandStreamReceiverFixture::setUp() { flushTaskFlags.preemptionMode = PreemptionHelper::getDefaultPreemptionMode(pDevice->getHardwareInfo()); } + void CommandStreamReceiverFixture::tearDown() { DeviceFixture::tearDown(); diff --git a/shared/test/common/fixtures/command_stream_receiver_fixture.h b/shared/test/common/fixtures/command_stream_receiver_fixture.h index 0a19661aa0..03c1bb6f20 100644 --- a/shared/test/common/fixtures/command_stream_receiver_fixture.h +++ b/shared/test/common/fixtures/command_stream_receiver_fixture.h @@ -31,3 +31,8 @@ struct CommandStreamReceiverFixture : public NEO::DeviceFixture { uint32_t taskLevel = 2; }; + +struct CommandStreamReceiverSystolicFixture : public CommandStreamReceiverFixture { + template + void testBody(); +}; diff --git a/shared/test/common/fixtures/command_stream_receiver_fixture.inl b/shared/test/common/fixtures/command_stream_receiver_fixture.inl new file mode 100644 index 0000000000..2f0f393f0c --- /dev/null +++ b/shared/test/common/fixtures/command_stream_receiver_fixture.inl @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2022 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/command_stream/stream_properties.h" +#include "shared/test/common/fixtures/command_stream_receiver_fixture.h" +#include "shared/test/common/libult/ult_command_stream_receiver.h" + +template +void CommandStreamReceiverSystolicFixture::testBody() { + auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver(); + StreamProperties &streamProperties = commandStreamReceiver.getStreamProperties(); + + commandStreamReceiver.isPreambleSent = true; + commandStreamReceiver.lastMediaSamplerConfig = false; + + flushTaskFlags.pipelineSelectArgs.systolicPipelineSelectMode = true; + flushTaskFlags.pipelineSelectArgs.mediaSamplerRequired = false; + + commandStreamReceiver.flushTask(commandStream, + 0, + &dsh, + &ioh, + &ssh, + taskLevel, + flushTaskFlags, + *pDevice); + EXPECT_EQ(true, commandStreamReceiver.lastSystolicPipelineSelectMode); + EXPECT_EQ(1, streamProperties.pipelineSelect.systolicMode.value); + + flushTaskFlags.pipelineSelectArgs.systolicPipelineSelectMode = false; + + commandStreamReceiver.flushTask(commandStream, + 0, + &dsh, + &ioh, + &ssh, + taskLevel, + flushTaskFlags, + *pDevice); + EXPECT_EQ(false, commandStreamReceiver.lastSystolicPipelineSelectMode); + EXPECT_EQ(0, streamProperties.pipelineSelect.systolicMode.value); +} diff --git a/shared/test/common/libult/CMakeLists.txt b/shared/test/common/libult/CMakeLists.txt index 827f4ac233..f7162d3195 100644 --- a/shared/test/common/libult/CMakeLists.txt +++ b/shared/test/common/libult/CMakeLists.txt @@ -68,6 +68,7 @@ append_sources_from_properties(neo_libult_common_SRCS_ENABLE_TESTED_HW NEO_SRCS_ set(neo_libult_common_SRCS_LIB_ULT ${NEO_SHARED_TEST_DIRECTORY}/common/fixtures/aub_command_stream_receiver_fixture.h ${NEO_SHARED_TEST_DIRECTORY}/common/fixtures/command_stream_receiver_fixture.cpp + ${NEO_SHARED_TEST_DIRECTORY}/common/fixtures/command_stream_receiver_fixture.inl ${NEO_SHARED_TEST_DIRECTORY}/common/fixtures/command_stream_receiver_fixture.h ${NEO_SHARED_TEST_DIRECTORY}/common/fixtures/device_fixture.cpp ${NEO_SHARED_TEST_DIRECTORY}/common/fixtures/device_fixture.h diff --git a/shared/test/common/test_macros/hw_test.h b/shared/test/common/test_macros/hw_test.h index 918fc467d5..db2117498f 100644 --- a/shared/test/common/test_macros/hw_test.h +++ b/shared/test/common/test_macros/hw_test.h @@ -696,6 +696,14 @@ struct IsNotWithinProducts { } }; +template +struct IsAnyProducts { + template + static constexpr bool isMatched() { + return (... || IsProduct::template isMatched()); + } +}; + struct MatchAny { template static constexpr bool isMatched() { return true; } diff --git a/shared/test/unit_test/command_stream/CMakeLists.txt b/shared/test/unit_test/command_stream/CMakeLists.txt index 8cf2403819..529a6d5511 100644 --- a/shared/test/unit_test/command_stream/CMakeLists.txt +++ b/shared/test/unit_test/command_stream/CMakeLists.txt @@ -36,4 +36,4 @@ if(TESTS_PVC_AND_LATER) target_sources(neo_shared_tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/compute_mode_tests_pvc_and_later.cpp) endif() -add_subdirectories() \ No newline at end of file +add_subdirectories() diff --git a/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp b/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp index d16cc7047c..cd0f60e6b1 100644 --- a/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp +++ b/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp @@ -17,7 +17,7 @@ #include "shared/source/os_interface/hw_info_config.h" #include "shared/source/os_interface/os_interface.h" #include "shared/source/utilities/tag_allocator.h" -#include "shared/test/common/fixtures/command_stream_receiver_fixture.h" +#include "shared/test/common/fixtures/command_stream_receiver_fixture.inl" #include "shared/test/common/fixtures/device_fixture.h" #include "shared/test/common/helpers/debug_manager_state_restore.h" #include "shared/test/common/helpers/engine_descriptor_helper.h" @@ -2118,39 +2118,9 @@ TEST_F(CommandStreamReceiverTest, givenPreemptionSentIsInitialWhenSettingPreempt EXPECT_EQ(mode, commandStreamReceiver->getPreemptionMode()); } -using CommandStreamReceiverHwTests = Test; -using SystolicSupport = IsWithinProducts; -HWTEST2_F(CommandStreamReceiverHwTests, givenSystolicModeChangedWhenFlushTaskCalledThenSystolicStateIsUpdated, SystolicSupport) { - auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver(); - StreamProperties &streamProperties = commandStreamReceiver.getStreamProperties(); +using CommandStreamReceiverSystolicTests = Test; +using SystolicSupport = IsAnyProducts; - commandStreamReceiver.isPreambleSent = true; - commandStreamReceiver.lastMediaSamplerConfig = false; - - flushTaskFlags.pipelineSelectArgs.systolicPipelineSelectMode = true; - flushTaskFlags.pipelineSelectArgs.mediaSamplerRequired = false; - - commandStreamReceiver.flushTask(commandStream, - 0, - &dsh, - &ioh, - &ssh, - taskLevel, - flushTaskFlags, - *pDevice); - EXPECT_EQ(true, commandStreamReceiver.lastSystolicPipelineSelectMode); - EXPECT_EQ(1, streamProperties.pipelineSelect.systolicMode.value); - - flushTaskFlags.pipelineSelectArgs.systolicPipelineSelectMode = false; - - commandStreamReceiver.flushTask(commandStream, - 0, - &dsh, - &ioh, - &ssh, - taskLevel, - flushTaskFlags, - *pDevice); - EXPECT_EQ(false, commandStreamReceiver.lastSystolicPipelineSelectMode); - EXPECT_EQ(0, streamProperties.pipelineSelect.systolicMode.value); +HWTEST2_F(CommandStreamReceiverSystolicTests, givenSystolicModeChangedWhenFlushTaskCalledThenSystolicStateIsUpdated, SystolicSupport) { + testBody(); }