diff --git a/opencl/source/command_queue/gpgpu_walker.h b/opencl/source/command_queue/gpgpu_walker.h index 026c222ebe..da270ab153 100644 --- a/opencl/source/command_queue/gpgpu_walker.h +++ b/opencl/source/command_queue/gpgpu_walker.h @@ -73,6 +73,9 @@ class GpgpuWalkerHelper { private: using PIPE_CONTROL = typename GfxFamily::PIPE_CONTROL; + + template + static void setSystolicModeEnable(WalkerType *walkerCmd); }; template diff --git a/opencl/source/command_queue/gpgpu_walker_base.inl b/opencl/source/command_queue/gpgpu_walker_base.inl index b34795e737..8efda0553f 100644 --- a/opencl/source/command_queue/gpgpu_walker_base.inl +++ b/opencl/source/command_queue/gpgpu_walker_base.inl @@ -23,6 +23,11 @@ namespace NEO { +template +template +void GpgpuWalkerHelper::setSystolicModeEnable(WalkerType *walkerCmd) { +} + template void GpgpuWalkerHelper::dispatchPerfCountersCommandsStart( CommandQueue &commandQueue, diff --git a/opencl/source/command_queue/gpgpu_walker_xehp_and_later.inl b/opencl/source/command_queue/gpgpu_walker_xehp_and_later.inl index 3c0e184756..586f0068a3 100644 --- a/opencl/source/command_queue/gpgpu_walker_xehp_and_later.inl +++ b/opencl/source/command_queue/gpgpu_walker_xehp_and_later.inl @@ -126,11 +126,7 @@ void GpgpuWalkerHelper::setupTimestampPacket(LinearStream *cmdStream, postSyncData.setDestinationAddress(contextStartAddress); } - if constexpr (std::is_same_v) { - if (debugManager.flags.OverrideSystolicInComputeWalker.get() != -1) { - walkerCmd->setSystolicModeEnable((debugManager.flags.OverrideSystolicInComputeWalker.get())); - } - } + setSystolicModeEnable(walkerCmd); } template diff --git a/opencl/source/xe_hpc_core/gpgpu_walker_xe_hpc_core.cpp b/opencl/source/xe_hpc_core/gpgpu_walker_xe_hpc_core.cpp index fe83639260..0dc4ed7619 100644 --- a/opencl/source/xe_hpc_core/gpgpu_walker_xe_hpc_core.cpp +++ b/opencl/source/xe_hpc_core/gpgpu_walker_xe_hpc_core.cpp @@ -14,6 +14,14 @@ namespace NEO { using Family = XeHpcCoreFamily; +template <> +template <> +void GpgpuWalkerHelper::setSystolicModeEnable(Family::COMPUTE_WALKER *walkerCmd) { + if (debugManager.flags.OverrideSystolicInComputeWalker.get() != -1) { + walkerCmd->setSystolicModeEnable((debugManager.flags.OverrideSystolicInComputeWalker.get())); + } +} + template class GpgpuWalkerHelper; template void GpgpuWalkerHelper::setupTimestampPacket(LinearStream *cmdStream, Family::DefaultWalkerType *walkerCmd, TagNodeBase *timestampPacketNode, const RootDeviceEnvironment &rootDeviceEnvironment); template size_t GpgpuWalkerHelper::setGpgpuWalkerThreadData(Family::DefaultWalkerType *walkerCmd, const KernelDescriptor &kernelDescriptor, const size_t startWorkGroups[3], diff --git a/opencl/source/xe_hpg_core/gpgpu_walker_xe_hpg_core.cpp b/opencl/source/xe_hpg_core/gpgpu_walker_xe_hpg_core.cpp index 98d4a36723..94736a70e9 100644 --- a/opencl/source/xe_hpg_core/gpgpu_walker_xe_hpg_core.cpp +++ b/opencl/source/xe_hpg_core/gpgpu_walker_xe_hpg_core.cpp @@ -14,6 +14,14 @@ namespace NEO { using Family = XeHpgCoreFamily; +template <> +template <> +void GpgpuWalkerHelper::setSystolicModeEnable(Family::COMPUTE_WALKER *walkerCmd) { + if (debugManager.flags.OverrideSystolicInComputeWalker.get() != -1) { + walkerCmd->setSystolicModeEnable((debugManager.flags.OverrideSystolicInComputeWalker.get())); + } +} + template class GpgpuWalkerHelper; template void GpgpuWalkerHelper::setupTimestampPacket(LinearStream *cmdStream, Family::DefaultWalkerType *walkerCmd, TagNodeBase *timestampPacketNode, const RootDeviceEnvironment &rootDeviceEnvironment); template size_t GpgpuWalkerHelper::setGpgpuWalkerThreadData(Family::DefaultWalkerType *walkerCmd, const KernelDescriptor &kernelDescriptor, const size_t startWorkGroups[3], diff --git a/opencl/test/unit_test/command_queue/dispatch_walker_tests_xehp_and_later.cpp b/opencl/test/unit_test/command_queue/dispatch_walker_tests_xehp_and_later.cpp index 3cea101522..75e4f4b1f4 100644 --- a/opencl/test/unit_test/command_queue/dispatch_walker_tests_xehp_and_later.cpp +++ b/opencl/test/unit_test/command_queue/dispatch_walker_tests_xehp_and_later.cpp @@ -621,7 +621,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, XeHPAndLaterDispatchWalkerBasicTest, givenDebugVari walkerVariant); } -HWCMDTEST_F(IGFX_XE_HP_CORE, XeHPAndLaterDispatchWalkerBasicTest, givenDebugVariableEnabledWhenEnqueueingThenSystolicIsProgrammed) { +HWTEST2_F(XeHPAndLaterDispatchWalkerBasicTest, givenDebugVariableEnabledWhenEnqueueingThenSystolicIsProgrammed, IsXeHpOrXeHpcOrXeHpgCore) { debugManager.flags.OverrideSystolicInComputeWalker.set(true); auto &compilerProductHelper = device->getCompilerProductHelper(); @@ -2183,4 +2183,4 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, XeHPAndLaterDispatchWalkerTestMultiTileDevice, give EXPECT_EQ(1u, walker->getPartitionSize()); }, walkerVariant); -} \ No newline at end of file +} diff --git a/shared/source/generated/xe2_hpg_core/hw_cmds_generated_xe2_hpg_core.inl b/shared/source/generated/xe2_hpg_core/hw_cmds_generated_xe2_hpg_core.inl index d001742147..8e90989fdc 100644 --- a/shared/source/generated/xe2_hpg_core/hw_cmds_generated_xe2_hpg_core.inl +++ b/shared/source/generated/xe2_hpg_core/hw_cmds_generated_xe2_hpg_core.inl @@ -5509,7 +5509,7 @@ typedef struct tagCOMPUTE_WALKER { uint32_t IndirectParameterEnable : BITFIELD_RANGE(10, 10); uint32_t Reserved_11 : BITFIELD_RANGE(11, 12); uint32_t DispatchComplete : BITFIELD_RANGE(13, 13); - uint32_t SystolicModeEnable : BITFIELD_RANGE(14, 14); + uint32_t Reserved_14 : BITFIELD_RANGE(14, 14); // patched uint32_t CfeSubopcodeVariant : BITFIELD_RANGE(15, 17); uint32_t CfeSubopcode : BITFIELD_RANGE(18, 23); uint32_t ComputeCommandOpcode : BITFIELD_RANGE(24, 26); @@ -5662,12 +5662,6 @@ typedef struct tagCOMPUTE_WALKER { inline bool getDispatchComplete() const { return TheStructure.Common.DispatchComplete; } - inline void setSystolicModeEnable(const bool value) { - TheStructure.Common.SystolicModeEnable = value; - } - inline bool getSystolicModeEnable() const { - return TheStructure.Common.SystolicModeEnable; - } inline void setCfeSubopcodeVariant(const CFE_SUBOPCODE_VARIANT value) { TheStructure.Common.CfeSubopcodeVariant = value; }