Skip to content

Commit a440a3e

Browse files
refactor: use Clonable type for pImplicitArgs
Clonable is a helper type which eases proper management of dynamically-allocated resources. It allows to reduce the amount of manual handling. Related-To: NEO-16017 Signed-off-by: Maciej Bielski <maciej.bielski@intel.com>
1 parent 4b5f206 commit a440a3e

File tree

6 files changed

+14
-13
lines changed

6 files changed

+14
-13
lines changed

level_zero/core/source/kernel/kernel_imp.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -246,10 +246,9 @@ void KernelImmutableData::setIsaPerKernelAllocation(NEO::GraphicsAllocation *all
246246
this->isaGraphicsAllocation.reset(allocation);
247247
}
248248

249-
KernelMutableState::KernelMutableState() : pImplicitArgs{nullptr}, pExtension{nullptr} {};
249+
KernelMutableState::KernelMutableState() : pImplicitArgs{}, pExtension{nullptr} {};
250250

251-
KernelMutableState::KernelMutableState(const KernelMutableState &rhs) : Params{rhs} {
252-
pImplicitArgs = (rhs.pImplicitArgs) ? std::make_unique<NEO::ImplicitArgs>(*rhs.pImplicitArgs) : nullptr;
251+
KernelMutableState::KernelMutableState(const KernelMutableState &rhs) : Params{rhs}, pImplicitArgs(rhs.pImplicitArgs) {
253252
pExtension = nullptr;
254253

255254
crossThreadData = rhs.crossThreadData;
@@ -1233,8 +1232,7 @@ ze_result_t KernelImp::initialize(const ze_kernel_desc_t *desc) {
12331232
}
12341233

12351234
if (kernelDescriptor.kernelAttributes.flags.requiresImplicitArgs) {
1236-
privateState.pImplicitArgs = std::make_unique<NEO::ImplicitArgs>();
1237-
*privateState.pImplicitArgs = {};
1235+
privateState.pImplicitArgs = Clonable(new NEO::ImplicitArgs());
12381236
privateState.pImplicitArgs->initializeHeader(sharedState.implicitArgsVersion);
12391237
privateState.pImplicitArgs->setSimdWidth(kernelDescriptor.kernelAttributes.simdSize);
12401238
}

level_zero/core/source/kernel/kernel_imp.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ struct KernelImp : Kernel {
206206

207207
ze_result_t setSchedulingHintExp(ze_scheduling_hint_exp_desc_t *pHint) override;
208208

209-
NEO::ImplicitArgs *getImplicitArgs() const override { return privateState.pImplicitArgs.get(); }
209+
NEO::ImplicitArgs *getImplicitArgs() const override { return privateState.pImplicitArgs.ptr.get(); }
210210

211211
uint32_t getMaxWgCountPerTile(NEO::EngineGroupType engineGroupType) const override {
212212
auto value = this->sharedState->maxWgCountPerTileCcs;

level_zero/core/source/kernel/kernel_mutable_state.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
#include "shared/source/helpers/vec.h"
1111
#include "shared/source/unified_memory/unified_memory.h"
12+
#include "shared/source/utilities/mem_lifetime.h"
1213

1314
#include "level_zero/ze_api.h"
1415

@@ -89,7 +90,7 @@ struct KernelMutableState : public KernelMutableStateDefaultCopyableParams {
8990

9091
void reservePerThreadDataForWholeThreadGroup(uint32_t sizeNeeded);
9192

92-
std::unique_ptr<NEO::ImplicitArgs> pImplicitArgs;
93+
Clonable<NEO::ImplicitArgs> pImplicitArgs;
9394
std::unique_ptr<KernelExt> pExtension;
9495
std::vector<uint8_t> crossThreadData{};
9596
std::vector<uint8_t> surfaceStateHeapData{};

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "shared/source/helpers/register_offsets.h"
1414
#include "shared/source/indirect_heap/indirect_heap.h"
1515
#include "shared/source/kernel/implicit_args_helper.h"
16+
#include "shared/source/utilities/mem_lifetime.h"
1617
#include "shared/test/common/cmd_parse/gen_cmd_parse.h"
1718
#include "shared/test/common/helpers/debug_manager_state_restore.h"
1819
#include "shared/test/common/helpers/unit_test_helper.h"
@@ -307,7 +308,7 @@ HWTEST_F(CommandListAppendLaunchKernel, givenNonPrintfKernelWithPrintfBufferCrea
307308
kernel->setModule(&module);
308309
kernel->descriptor.kernelAttributes.flags.usesPrintf = false;
309310
kernel->descriptor.kernelAttributes.flags.useStackCalls = true;
310-
kernel->privateState.pImplicitArgs.reset(new ImplicitArgs());
311+
kernel->privateState.pImplicitArgs = Clonable(new ImplicitArgs());
311312
kernel->privateState.pImplicitArgs->v0.header.structVersion = 0;
312313
kernel->privateState.pImplicitArgs->v0.header.structSize = ImplicitArgsV0::getSize();
313314
UnitTestHelper<FamilyType>::adjustKernelDescriptorForImplicitArgs(*kernel->immutableData.kernelDescriptor);
@@ -409,7 +410,7 @@ HWTEST_F(CommandListAppendLaunchKernel, givenNonPrintfKernelAndPrintfBufferForSt
409410
kernel->setModule(&module);
410411
kernel->descriptor.kernelAttributes.flags.usesPrintf = false;
411412
kernel->descriptor.kernelAttributes.flags.useStackCalls = true;
412-
kernel->privateState.pImplicitArgs.reset(new ImplicitArgs());
413+
kernel->privateState.pImplicitArgs = Clonable(new ImplicitArgs());
413414
kernel->privateState.pImplicitArgs->v0.header.structVersion = 0;
414415
kernel->privateState.pImplicitArgs->v0.header.structSize = ImplicitArgsV0::getSize();
415416
UnitTestHelper<FamilyType>::adjustKernelDescriptorForImplicitArgs(*kernel->immutableData.kernelDescriptor);
@@ -1236,7 +1237,7 @@ struct CommandListAppendLaunchKernelWithImplicitArgs : CommandListAppendLaunchKe
12361237
if (FamilyType::supportsCmdSet(IGFX_XE_HP_CORE)) {
12371238
const auto &rootDeviceEnvironment = device->getNEODevice()->getRootDeviceEnvironment();
12381239
auto implicitArgsProgrammingSize =
1239-
ImplicitArgsHelper::getSizeForImplicitArgsPatching(kernel.privateState.pImplicitArgs.get(),
1240+
ImplicitArgsHelper::getSizeForImplicitArgsPatching(kernel.getImplicitArgs(),
12401241
kernel.getKernelDescriptor(),
12411242
!kernel.privateState.kernelRequiresGenerationOfLocalIdsByRuntime,
12421243
rootDeviceEnvironment);
@@ -1257,7 +1258,7 @@ HWTEST_F(CommandListAppendLaunchKernelWithImplicitArgs, givenIndirectDispatchWit
12571258
auto pMockModule = std::unique_ptr<Module>(new Mock<Module>(device, nullptr));
12581259
kernel.module = pMockModule.get();
12591260
kernel.immutableData.crossThreadDataSize = sizeof(uint64_t);
1260-
kernel.privateState.pImplicitArgs.reset(new ImplicitArgs());
1261+
kernel.privateState.pImplicitArgs = Clonable(new ImplicitArgs());
12611262
kernel.privateState.pImplicitArgs->v0.header.structVersion = 0;
12621263
kernel.privateState.pImplicitArgs->v0.header.structSize = ImplicitArgsV0::getSize();
12631264
kernel.privateState.pImplicitArgs->setLocalSize(1, 1, 1);

level_zero/core/test/unit_tests/sources/kernel/test_kernel_2.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "shared/source/helpers/gfx_core_helper.h"
1111
#include "shared/source/helpers/local_id_gen.h"
1212
#include "shared/source/helpers/simd_helper.h"
13+
#include "shared/source/utilities/mem_lifetime.h"
1314
#include "shared/test/common/helpers/raii_gfx_core_helper.h"
1415
#include "shared/test/common/helpers/stream_capture.h"
1516
#include "shared/test/common/mocks/mock_bindless_heaps_helper.h"
@@ -78,7 +79,7 @@ TEST_F(KernelImpTest, GivenKernelMutableStateWhenAssigningToItselfThenTheCurrent
7879

7980
void fillKernelMutableStateWithMockData(KernelMutableState &state) {
8081
state.unifiedMemoryControls = {true, true, true};
81-
state.pImplicitArgs.reset(new ImplicitArgs{});
82+
state.pImplicitArgs.ptr.reset(new ImplicitArgs{});
8283
state.pImplicitArgs->v0 = ImplicitArgsV0{
8384
.numWorkDim = 2,
8485
.simdWidth = 4,

shared/source/utilities/mem_lifetime.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ struct Ext : Impl::UniquePtrWrapperOps<Ext<T>> {
8888
};
8989

9090
template <typename T>
91-
struct Clonable : Impl::UniquePtrWrapperOps<Clonable<Ext<T>>> {
91+
struct Clonable : Impl::UniquePtrWrapperOps<Clonable<T>> {
9292
Clonable(T *ptr) : ptr(ptr) {}
9393
Clonable() = default;
9494
Clonable(const Clonable &rhs) {

0 commit comments

Comments
 (0)