Skip to content

Commit 34dad4d

Browse files
refactor: store implicit args version in kernel
- adjust tests to work with implicitargs v0 and v1 Related-To: NEO-14115 Signed-off-by: Mateusz Hoppe <[email protected]>
1 parent f5e37e7 commit 34dad4d

File tree

9 files changed

+77
-41
lines changed

9 files changed

+77
-41
lines changed

level_zero/core/test/unit_tests/sources/module/test_module.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "shared/test/common/compiler_interface/linker_mock.h"
2525
#include "shared/test/common/device_binary_format/patchtokens_tests.h"
2626
#include "shared/test/common/helpers/debug_manager_state_restore.h"
27+
#include "shared/test/common/helpers/implicit_args_test_helper.h"
2728
#include "shared/test/common/helpers/mock_file_io.h"
2829
#include "shared/test/common/libult/ult_command_stream_receiver.h"
2930
#include "shared/test/common/mocks/mock_compiler_product_helper.h"
@@ -1899,7 +1900,7 @@ TEST_F(ModuleDynamicLinkTests, givenModuleWithInternalRelocationAndUnresolvedExt
18991900

19001901
uint32_t internalRelocationOffset = 0x10;
19011902
linkerInput->textRelocations.push_back({{implicitArgsRelocationSymbolName, internalRelocationOffset, LinkerInput::RelocationInfo::Type::address, SegmentType::instructions}});
1902-
uint32_t expectedInternalRelocationValue = ImplicitArgsV0::getSize();
1903+
uint32_t expectedInternalRelocationValue = ImplicitArgsTestHelper::getImplicitArgsSize(neoDevice->getGfxCoreHelper().getImplicitArgsVersion());
19031904

19041905
uint32_t externalRelocationOffset = 0x20;
19051906
constexpr auto externalSymbolName = "unresolved";
@@ -4766,7 +4767,7 @@ TEST_F(ModuleTests, givenImplicitArgsRelocationAndStackCallsWhenLinkingModuleThe
47664767
auto status = pModule->linkBinary();
47674768
EXPECT_TRUE(status);
47684769

4769-
EXPECT_EQ(ImplicitArgsV0::getSize(), *reinterpret_cast<uint32_t *>(ptrOffset(isaCpuPtr, 0x8)));
4770+
EXPECT_EQ(ImplicitArgsTestHelper::getImplicitArgsSize(device->getGfxCoreHelper().getImplicitArgsVersion()), *reinterpret_cast<uint32_t *>(ptrOffset(isaCpuPtr, 0x8)));
47704771

47714772
EXPECT_TRUE(kernelInfo->kernelDescriptor.kernelAttributes.flags.requiresImplicitArgs);
47724773
}

opencl/source/kernel/kernel.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ Kernel::Kernel(Program *programArg, const KernelInfo &kernelInfoArg, ClDevice &c
9292
maxKernelWorkGroupSize = static_cast<uint32_t>(deviceInfo.maxWorkGroupSize);
9393
}
9494
slmTotalSize = kernelInfoArg.kernelDescriptor.kernelAttributes.slmInlineSize;
95+
this->implicitArgsVersion = getDevice().getGfxCoreHelper().getImplicitArgsVersion();
9596
}
9697

9798
Kernel::~Kernel() {
@@ -204,7 +205,7 @@ cl_int Kernel::initialize() {
204205
if (kernelDescriptor.kernelAttributes.flags.requiresImplicitArgs) {
205206
pImplicitArgs = std::make_unique<ImplicitArgs>();
206207
*pImplicitArgs = {};
207-
pImplicitArgs->initializeHeader(gfxCoreHelper.getImplicitArgsVersion());
208+
pImplicitArgs->initializeHeader(this->implicitArgsVersion);
208209
pImplicitArgs->setSimdWidth(maxSimdSize);
209210
}
210211
auto ret = KernelHelper::checkIfThereIsSpaceForScratchOrPrivate(kernelDescriptor.kernelAttributes, &pClDevice->getDevice());

opencl/source/kernel/kernel.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,7 @@ class Kernel : public ReferenceTrackedObject<Kernel>, NEO::NonCopyableAndNonMova
513513
uint32_t slmTotalSize = 0u;
514514
uint32_t sshLocalSize = 0u;
515515
uint32_t crossThreadDataSize = 0u;
516+
uint32_t implicitArgsVersion = 0;
516517

517518
bool containsStatelessWrites = true;
518519
bool usingSharedObjArgs = false;

opencl/test/unit_test/helpers/hardware_commands_helper_tests.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1209,6 +1209,7 @@ struct HardwareCommandsImplicitArgsTests : Test<ClDeviceFixture> {
12091209
MockProgram program(&context, false, toClDeviceVector(*pClDevice));
12101210

12111211
MockKernel kernel(&program, *pKernelInfo, *pClDevice);
1212+
kernel.implicitArgsVersion = 0;
12121213
ASSERT_EQ(CL_SUCCESS, kernel.initialize());
12131214
auto pImplicitArgs = kernel.getImplicitArgs();
12141215

opencl/test/unit_test/kernel/kernel_tests.cpp

Lines changed: 42 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3915,8 +3915,17 @@ TEST_F(KernelImplicitArgsTest, WhenKernelRequiresImplicitArgsThenImplicitArgsStr
39153915

39163916
ASSERT_NE(nullptr, pImplicitArgs);
39173917

3918-
ImplicitArgsV0 expectedImplicitArgs = {{ImplicitArgsV0::getSize(), 0}, 0, 32};
3919-
EXPECT_EQ(0, memcmp(&expectedImplicitArgs, pImplicitArgs, ImplicitArgsV0::getSize()));
3918+
ImplicitArgs expectedImplicitArgs = {};
3919+
if (pClDevice->getGfxCoreHelper().getImplicitArgsVersion() == 0) {
3920+
expectedImplicitArgs.v0.header.structVersion = 0;
3921+
expectedImplicitArgs.v0.header.structSize = ImplicitArgsV0::getSize();
3922+
} else if (pClDevice->getGfxCoreHelper().getImplicitArgsVersion() == 1) {
3923+
expectedImplicitArgs.v1.header.structVersion = 1;
3924+
expectedImplicitArgs.v1.header.structSize = ImplicitArgsV1::getSize();
3925+
}
3926+
expectedImplicitArgs.setSimdWidth(32);
3927+
3928+
EXPECT_EQ(0, memcmp(&expectedImplicitArgs, pImplicitArgs, pImplicitArgs->getSize()));
39203929
}
39213930
}
39223931

@@ -3934,21 +3943,21 @@ TEST_F(KernelImplicitArgsTest, givenKernelWithImplicitArgsWhenSettingKernelParam
39343943

39353944
ASSERT_NE(nullptr, pImplicitArgs);
39363945

3937-
ImplicitArgsV0 expectedImplicitArgs = {{ImplicitArgsV0::getSize(), 0}};
3938-
expectedImplicitArgs.numWorkDim = 3;
3939-
expectedImplicitArgs.simdWidth = 32;
3940-
expectedImplicitArgs.localSizeX = 4;
3941-
expectedImplicitArgs.localSizeY = 5;
3942-
expectedImplicitArgs.localSizeZ = 6;
3943-
expectedImplicitArgs.globalSizeX = 7;
3944-
expectedImplicitArgs.globalSizeY = 8;
3945-
expectedImplicitArgs.globalSizeZ = 9;
3946-
expectedImplicitArgs.globalOffsetX = 1;
3947-
expectedImplicitArgs.globalOffsetY = 2;
3948-
expectedImplicitArgs.globalOffsetZ = 3;
3949-
expectedImplicitArgs.groupCountX = 3;
3950-
expectedImplicitArgs.groupCountY = 2;
3951-
expectedImplicitArgs.groupCountZ = 1;
3946+
ImplicitArgs expectedImplicitArgs = {};
3947+
if (pClDevice->getGfxCoreHelper().getImplicitArgsVersion() == 0) {
3948+
expectedImplicitArgs.v0.header.structVersion = 0;
3949+
expectedImplicitArgs.v0.header.structSize = ImplicitArgsV0::getSize();
3950+
} else if (pClDevice->getGfxCoreHelper().getImplicitArgsVersion() == 1) {
3951+
expectedImplicitArgs.v1.header.structVersion = 1;
3952+
expectedImplicitArgs.v1.header.structSize = ImplicitArgsV1::getSize();
3953+
}
3954+
3955+
expectedImplicitArgs.setNumWorkDim(3);
3956+
expectedImplicitArgs.setSimdWidth(32);
3957+
expectedImplicitArgs.setLocalSize(4, 5, 6);
3958+
expectedImplicitArgs.setGlobalSize(7, 8, 9);
3959+
expectedImplicitArgs.setGlobalOffset(1, 2, 3);
3960+
expectedImplicitArgs.setGroupCount(3, 2, 1);
39523961

39533962
kernel.setWorkDim(3);
39543963
kernel.setLocalWorkSizeValues(4, 5, 6);
@@ -4018,21 +4027,21 @@ TEST_F(KernelImplicitArgsTest, givenKernelWithImplicitArgsWhenCloneKernelThenImp
40184027
ASSERT_EQ(CL_SUCCESS, kernel.initialize());
40194028
ASSERT_EQ(CL_SUCCESS, kernel2.initialize());
40204029

4021-
ImplicitArgsV0 expectedImplicitArgs = {{ImplicitArgsV0::getSize(), 0}};
4022-
expectedImplicitArgs.numWorkDim = 3;
4023-
expectedImplicitArgs.simdWidth = 32;
4024-
expectedImplicitArgs.localSizeX = 4;
4025-
expectedImplicitArgs.localSizeY = 5;
4026-
expectedImplicitArgs.localSizeZ = 6;
4027-
expectedImplicitArgs.globalSizeX = 7;
4028-
expectedImplicitArgs.globalSizeY = 8;
4029-
expectedImplicitArgs.globalSizeZ = 9;
4030-
expectedImplicitArgs.globalOffsetX = 1;
4031-
expectedImplicitArgs.globalOffsetY = 2;
4032-
expectedImplicitArgs.globalOffsetZ = 3;
4033-
expectedImplicitArgs.groupCountX = 3;
4034-
expectedImplicitArgs.groupCountY = 2;
4035-
expectedImplicitArgs.groupCountZ = 1;
4030+
ImplicitArgs expectedImplicitArgs = {};
4031+
if (pClDevice->getGfxCoreHelper().getImplicitArgsVersion() == 0) {
4032+
expectedImplicitArgs.v0.header.structVersion = 0;
4033+
expectedImplicitArgs.v0.header.structSize = ImplicitArgsV0::getSize();
4034+
} else if (pClDevice->getGfxCoreHelper().getImplicitArgsVersion() == 1) {
4035+
expectedImplicitArgs.v1.header.structVersion = 1;
4036+
expectedImplicitArgs.v1.header.structSize = ImplicitArgsV1::getSize();
4037+
}
4038+
4039+
expectedImplicitArgs.setNumWorkDim(3);
4040+
expectedImplicitArgs.setSimdWidth(32);
4041+
expectedImplicitArgs.setLocalSize(4, 5, 6);
4042+
expectedImplicitArgs.setGlobalSize(7, 8, 9);
4043+
expectedImplicitArgs.setGlobalOffset(1, 2, 3);
4044+
expectedImplicitArgs.setGroupCount(3, 2, 1);
40364045

40374046
kernel.setWorkDim(3);
40384047
kernel.setLocalWorkSizeValues(4, 5, 6);
@@ -4046,7 +4055,7 @@ TEST_F(KernelImplicitArgsTest, givenKernelWithImplicitArgsWhenCloneKernelThenImp
40464055

40474056
ASSERT_NE(nullptr, pImplicitArgs);
40484057

4049-
EXPECT_EQ(0, memcmp(&expectedImplicitArgs, pImplicitArgs, ImplicitArgsV0::getSize()));
4058+
EXPECT_EQ(0, memcmp(&expectedImplicitArgs, pImplicitArgs, pImplicitArgs->getSize()));
40504059
}
40514060

40524061
TEST_F(KernelImplicitArgsTest, givenKernelWithoutImplicitArgsWhenSettingKernelParamsThenImplicitArgsAreNotSet) {

opencl/test/unit_test/mocks/mock_kernel.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2018-2024 Intel Corporation
2+
* Copyright (C) 2018-2025 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -132,6 +132,7 @@ class MockKernel : public Kernel {
132132
using Kernel::singleSubdevicePreferredInCurrentEnqueue;
133133
using Kernel::unifiedMemoryControls;
134134

135+
using Kernel::implicitArgsVersion;
135136
using Kernel::slmSizes;
136137
using Kernel::slmTotalSize;
137138

shared/test/common/helpers/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#
2-
# Copyright (C) 2019-2023 Intel Corporation
2+
# Copyright (C) 2019-2025 Intel Corporation
33
#
44
# SPDX-License-Identifier: MIT
55
#
@@ -9,6 +9,7 @@ target_sources(neo_libult_common PRIVATE
99
${CMAKE_CURRENT_SOURCE_DIR}/cmd_buffer_validator.h
1010
${CMAKE_CURRENT_SOURCE_DIR}/batch_buffer_helper.h
1111
${CMAKE_CURRENT_SOURCE_DIR}/gtest_helpers.h
12+
${CMAKE_CURRENT_SOURCE_DIR}/implicit_args_test_helper.h
1213
${CMAKE_CURRENT_SOURCE_DIR}/raii_gfx_core_helper.h
1314
${CMAKE_CURRENT_SOURCE_DIR}/raii_product_helper.h
1415
${CMAKE_CURRENT_SOURCE_DIR}/relaxed_ordering_commands_helper.h
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright (C) 2025 Intel Corporation
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*
6+
*/
7+
8+
#pragma once
9+
#include "implicit_args.h"
10+
11+
namespace ImplicitArgsTestHelper {
12+
constexpr uint32_t getImplicitArgsSize(uint32_t version) {
13+
if (version == 0) {
14+
return NEO::ImplicitArgsV0::getSize();
15+
} else if (version == 1) {
16+
return NEO::ImplicitArgsV1::getSize();
17+
}
18+
return 0;
19+
}
20+
} // namespace ImplicitArgsTestHelper

shared/test/unit_test/compiler_interface/linker_tests.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "shared/test/common/helpers/debug_manager_state_restore.h"
1919
#include "shared/test/common/helpers/default_hw_info.h"
2020
#include "shared/test/common/helpers/gtest_helpers.h"
21+
#include "shared/test/common/helpers/implicit_args_test_helper.h"
2122
#include "shared/test/common/helpers/raii_gfx_core_helper.h"
2223
#include "shared/test/common/mocks/mock_device.h"
2324
#include "shared/test/common/mocks/mock_elf.h"
@@ -2082,7 +2083,7 @@ TEST_F(LinkerTests, givenImplicitArgRelocationAndStackCallsThenPatchRelocationWi
20822083
EXPECT_EQ(0U, relocatedSymbols.size());
20832084

20842085
auto addressToPatch = reinterpret_cast<const uint32_t *>(instructionSegment.data() + reloc.r_offset);
2085-
EXPECT_EQ(ImplicitArgsV0::getSize(), *addressToPatch);
2086+
EXPECT_EQ(ImplicitArgsTestHelper::getImplicitArgsSize(deviceFactory.rootDevices[0]->getGfxCoreHelper().getImplicitArgsVersion()), *addressToPatch);
20862087
EXPECT_EQ(initData, *(addressToPatch - 1));
20872088
EXPECT_EQ(initData, *(addressToPatch + 1));
20882089
EXPECT_TRUE(kernelDescriptor.kernelAttributes.flags.requiresImplicitArgs);
@@ -2270,7 +2271,7 @@ TEST_F(LinkerDebuggingSupportedTests, givenImplicitArgRelocationAndEnabledDebugg
22702271
EXPECT_EQ(0U, relocatedSymbols.size());
22712272

22722273
auto addressToPatch = reinterpret_cast<const uint32_t *>(instructionSegment.data() + reloc.r_offset);
2273-
EXPECT_EQ(ImplicitArgsV0::getSize(), *addressToPatch);
2274+
EXPECT_EQ(ImplicitArgsTestHelper::getImplicitArgsSize(device->getGfxCoreHelper().getImplicitArgsVersion()), *addressToPatch);
22742275
EXPECT_EQ(initData, *(addressToPatch - 1));
22752276
EXPECT_EQ(initData, *(addressToPatch + 1));
22762277
EXPECT_TRUE(kernelDescriptor.kernelAttributes.flags.requiresImplicitArgs);
@@ -2477,7 +2478,7 @@ TEST_F(LinkerTests, givenMultipleImplicitArgsRelocationsWithinSingleKernelWhenLi
24772478

24782479
for (const auto &reloc : relocs) {
24792480
auto addressToPatch = reinterpret_cast<const uint32_t *>(instructionSegment.data() + reloc.r_offset);
2480-
EXPECT_EQ(ImplicitArgsV0::getSize(), *addressToPatch);
2481+
EXPECT_EQ(ImplicitArgsTestHelper::getImplicitArgsSize(deviceFactory.rootDevices[0]->getGfxCoreHelper().getImplicitArgsVersion()), *addressToPatch);
24812482
EXPECT_TRUE(kernelDescriptor.kernelAttributes.flags.requiresImplicitArgs);
24822483
}
24832484
}

0 commit comments

Comments
 (0)