Skip to content

Commit b266f1f

Browse files
refactor: improve implicit scaling interface
Signed-off-by: Dunajski, Bartosz <[email protected]>
1 parent 93e941f commit b266f1f

File tree

8 files changed

+40
-6
lines changed

8 files changed

+40
-6
lines changed

level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel_2.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2020-2023 Intel Corporation
2+
* Copyright (C) 2020-2024 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -1591,7 +1591,14 @@ HWTEST2_F(MultiTileCommandListAppendLaunchKernelXeHpCoreTest, givenCooperativeKe
15911591
itorWalker = find<typename FamilyType::DefaultWalkerType *>(cmdList.begin(), cmdList.end());
15921592
cmd = genCmdCast<typename FamilyType::DefaultWalkerType *>(*itorWalker);
15931593
EXPECT_TRUE(cmd->getWorkloadPartitionEnable());
1594-
EXPECT_EQ(16u, cmd->getPartitionSize());
1594+
1595+
const auto &gfxCoreHelper = device->getGfxCoreHelper();
1596+
1597+
if (gfxCoreHelper.singleTileExecImplicitScalingRequired(true)) {
1598+
EXPECT_EQ(16u, cmd->getPartitionSize());
1599+
} else {
1600+
EXPECT_EQ(4u, cmd->getPartitionSize());
1601+
}
15951602
}
15961603

15971604
HWTEST2_F(MultiTileCommandListAppendLaunchKernelXeHpCoreTest,

opencl/source/kernel/kernel.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1264,7 +1264,9 @@ bool Kernel::hasRunFinished(TimestampPacketContainer *timestampContainer) {
12641264
}
12651265

12661266
bool Kernel::isSingleSubdevicePreferred() const {
1267-
return this->singleSubdevicePreferredInCurrentEnqueue || this->usesSyncBuffer();
1267+
auto &gfxCoreHelper = this->getGfxCoreHelper();
1268+
1269+
return this->singleSubdevicePreferredInCurrentEnqueue || gfxCoreHelper.singleTileExecImplicitScalingRequired(this->usesSyncBuffer());
12681270
}
12691271

12701272
void Kernel::setInlineSamplers() {

opencl/test/unit_test/kernel/kernel_tests.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,14 +380,16 @@ TEST_F(KernelTests, GivenInvalidParamNameWhenGettingWorkGroupInfoThenInvalidValu
380380
}
381381

382382
TEST_F(KernelTests, WhenIsSingleSubdevicePreferredIsCalledThenCorrectValuesAreReturned) {
383+
auto &helper = pClDevice->getGfxCoreHelper();
384+
383385
std::unique_ptr<MockKernel> kernel{MockKernel::create<MockKernel>(pClDevice->getDevice(), pProgram)};
384386
for (auto usesSyncBuffer : ::testing::Bool()) {
385387
kernel->getAllocatedKernelInfo()->kernelDescriptor.kernelAttributes.flags.usesSyncBuffer = usesSyncBuffer;
386388
for (auto singleSubdevicePreferredInCurrentEnqueue : ::testing::Bool()) {
387389
kernel->singleSubdevicePreferredInCurrentEnqueue = singleSubdevicePreferredInCurrentEnqueue;
388390

389391
EXPECT_EQ(usesSyncBuffer, kernel->usesSyncBuffer());
390-
auto expectedSingleSubdevicePreferredInCurrentEnqueue = singleSubdevicePreferredInCurrentEnqueue || usesSyncBuffer;
392+
auto expectedSingleSubdevicePreferredInCurrentEnqueue = singleSubdevicePreferredInCurrentEnqueue || helper.singleTileExecImplicitScalingRequired(usesSyncBuffer);
391393
EXPECT_EQ(expectedSingleSubdevicePreferredInCurrentEnqueue, kernel->isSingleSubdevicePreferred());
392394
}
393395
}

shared/source/command_container/command_encoder_xehp_and_later.inl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ void EncodeDispatchKernel<Family>::encode(CommandContainer &container, EncodeDis
403403
!(container.getFlushTaskUsedForImmediate() || container.isUsingPrimaryBuffer()),
404404
!args.isKernelDispatchedFromImmediateCmdList,
405405
args.dcFlushEnable,
406-
args.isCooperative,
406+
gfxCoreHelper.singleTileExecImplicitScalingRequired(args.isCooperative),
407407
workPartitionAllocationGpuVa,
408408
hwInfo);
409409
} else {

shared/source/helpers/gfx_core_helper.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,8 @@ class GfxCoreHelper {
182182
virtual bool is48ResourceNeededForCmdBuffer() const = 0;
183183
virtual uint32_t getKernelPrivateMemSize(const KernelDescriptor &kernelDescriptor) const = 0;
184184

185+
virtual bool singleTileExecImplicitScalingRequired(bool cooperativeKernel) const = 0;
186+
185187
virtual ~GfxCoreHelper() = default;
186188

187189
protected:
@@ -402,6 +404,8 @@ class GfxCoreHelperHw : public GfxCoreHelper {
402404

403405
uint32_t getKernelPrivateMemSize(const KernelDescriptor &kernelDescriptor) const override;
404406

407+
bool singleTileExecImplicitScalingRequired(bool cooperativeKernel) const override;
408+
405409
~GfxCoreHelperHw() override = default;
406410

407411
protected:

shared/source/helpers/gfx_core_helper_base.inl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,4 +740,9 @@ bool GfxCoreHelperHw<GfxFamily>::is48ResourceNeededForCmdBuffer() const {
740740
return true;
741741
}
742742

743+
template <typename GfxFamily>
744+
bool GfxCoreHelperHw<GfxFamily>::singleTileExecImplicitScalingRequired(bool cooperativeKernel) const {
745+
return cooperativeKernel;
746+
}
747+
743748
} // namespace NEO

shared/test/unit_test/encoders/test_encode_dispatch_kernel_xehp_and_later.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2021-2023 Intel Corporation
2+
* Copyright (C) 2021-2024 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -1084,7 +1084,14 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CommandEncodeStatesImplicitScaling, givenCooperativ
10841084

10851085
auto partitionWalkerCmd = genCmdCast<DefaultWalkerType *>(*itor);
10861086
EXPECT_EQ(DefaultWalkerType::PARTITION_TYPE::PARTITION_TYPE_X, partitionWalkerCmd->getPartitionType());
1087+
1088+
const auto &gfxCoreHelper = pDevice->getGfxCoreHelper();
10871089
uint32_t expectedPartitionSize = dims[0];
1090+
1091+
if (!gfxCoreHelper.singleTileExecImplicitScalingRequired(isCooperative)) {
1092+
expectedPartitionSize /= dispatchArgs.partitionCount;
1093+
}
1094+
10881095
EXPECT_EQ(expectedPartitionSize, partitionWalkerCmd->getPartitionSize());
10891096
}
10901097

shared/test/unit_test/helpers/gfx_core_helper_tests.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1657,6 +1657,13 @@ TEST_F(GfxCoreHelperTest, whenOnlyPerThreadPrivateMemorySizeIsDefinedThenItIsRet
16571657
EXPECT_EQ(0x100u, getHelper<GfxCoreHelper>().getKernelPrivateMemSize(kernelDescriptor));
16581658
}
16591659

1660+
HWTEST_F(GfxCoreHelperTest, givenCooperativeKernelWhenAskingForSingleTileDispatchThenReturnTrue) {
1661+
auto &helper = getHelper<GfxCoreHelper>();
1662+
1663+
EXPECT_TRUE(helper.singleTileExecImplicitScalingRequired(true));
1664+
EXPECT_FALSE(helper.singleTileExecImplicitScalingRequired(false));
1665+
}
1666+
16601667
HWTEST2_F(GfxCoreHelperTest, whenPrivateScratchSizeIsDefinedThenItIsReturnedAsKernelPrivateMemorySize, IsAtLeastXeHpCore) {
16611668
KernelDescriptor kernelDescriptor{};
16621669
kernelDescriptor.kernelAttributes.perHwThreadPrivateMemorySize = 0x100u;

0 commit comments

Comments
 (0)