Skip to content

Commit 18d7a22

Browse files
refactor: pass increment address and value to dispatch params
Signed-off-by: Bartosz Dunajski <[email protected]>
1 parent 09298d3 commit 18d7a22

File tree

9 files changed

+166
-227
lines changed

9 files changed

+166
-227
lines changed

level_zero/core/source/cmdlist/cmdlist_hw_skl_to_tgllp.inl

Lines changed: 41 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -190,45 +190,47 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendLaunchKernelWithParams(K
190190
auto maxWgCountPerTile = kernel->getMaxWgCountPerTile(this->engineGroupType);
191191

192192
NEO::EncodeDispatchKernelArgs dispatchKernelArgs{
193-
0, // eventAddress
194-
static_cast<uint64_t>(Event::STATE_SIGNALED), // postSyncImmValue
195-
0, // inOrderCounterValue
196-
neoDevice, // device
197-
nullptr, // inOrderExecInfo
198-
kernel, // dispatchInterface
199-
ssh, // surfaceStateHeap
200-
dsh, // dynamicStateHeap
201-
reinterpret_cast<const void *>(&threadGroupDimensions), // threadGroupDimensions
202-
nullptr, // outWalkerPtr
203-
nullptr, // cpuWalkerBuffer
204-
nullptr, // cpuPayloadBuffer
205-
nullptr, // outImplicitArgsPtr
206-
&additionalCommands, // additionalCommands
207-
nullptr, // extendedArgs
208-
commandListPreemptionMode, // preemptionMode
209-
launchParams.requiredPartitionDim, // requiredPartitionDim
210-
launchParams.requiredDispatchWalkOrder, // requiredDispatchWalkOrder
211-
launchParams.localRegionSize, // localRegionSize
212-
0, // partitionCount
213-
launchParams.reserveExtraPayloadSpace, // reserveExtraPayloadSpace
214-
maxWgCountPerTile, // maxWgCountPerTile
215-
NEO::ThreadArbitrationPolicy::NotPresent, // defaultPipelinedThreadArbitrationPolicy
216-
launchParams.isIndirect, // isIndirect
217-
launchParams.isPredicate, // isPredicate
218-
false, // isTimestampEvent
219-
uncachedMocsKernel, // requiresUncachedMocs
220-
internalUsage, // isInternal
221-
launchParams.isCooperative, // isCooperative
222-
false, // isHostScopeSignalEvent
223-
false, // isKernelUsingSystemAllocation
224-
isImmediateType(), // isKernelDispatchedFromImmediateCmdList
225-
engineGroupType == NEO::EngineGroupType::renderCompute, // isRcs
226-
this->dcFlushSupport, // dcFlushEnable
227-
this->heaplessModeEnabled, // isHeaplessModeEnabled
228-
this->heaplessStateInitEnabled, // isHeaplessStateInitEnabled
229-
false, // interruptEvent
230-
!this->scratchAddressPatchingEnabled, // immediateScratchAddressPatching
231-
false, // makeCommandView
193+
.eventAddress = 0,
194+
.postSyncImmValue = static_cast<uint64_t>(Event::STATE_SIGNALED),
195+
.inOrderCounterValue = 0,
196+
.inOrderIncrementGpuAddress = 0,
197+
.inOrderIncrementValue = 0,
198+
.device = neoDevice,
199+
.inOrderExecInfo = nullptr,
200+
.dispatchInterface = kernel,
201+
.surfaceStateHeap = ssh,
202+
.dynamicStateHeap = dsh,
203+
.threadGroupDimensions = reinterpret_cast<const void *>(&threadGroupDimensions),
204+
.outWalkerPtr = nullptr,
205+
.cpuWalkerBuffer = nullptr,
206+
.cpuPayloadBuffer = nullptr,
207+
.outImplicitArgsPtr = nullptr,
208+
.additionalCommands = &additionalCommands,
209+
.extendedArgs = nullptr,
210+
.preemptionMode = commandListPreemptionMode,
211+
.requiredPartitionDim = launchParams.requiredPartitionDim,
212+
.requiredDispatchWalkOrder = launchParams.requiredDispatchWalkOrder,
213+
.localRegionSize = launchParams.localRegionSize,
214+
.partitionCount = 0,
215+
.reserveExtraPayloadSpace = launchParams.reserveExtraPayloadSpace,
216+
.maxWgCountPerTile = maxWgCountPerTile,
217+
.defaultPipelinedThreadArbitrationPolicy = NEO::ThreadArbitrationPolicy::NotPresent,
218+
.isIndirect = launchParams.isIndirect,
219+
.isPredicate = launchParams.isPredicate,
220+
.isTimestampEvent = false,
221+
.requiresUncachedMocs = uncachedMocsKernel,
222+
.isInternal = internalUsage,
223+
.isCooperative = launchParams.isCooperative,
224+
.isHostScopeSignalEvent = false,
225+
.isKernelUsingSystemAllocation = false,
226+
.isKernelDispatchedFromImmediateCmdList = isImmediateType(),
227+
.isRcs = engineGroupType == NEO::EngineGroupType::renderCompute,
228+
.dcFlushEnable = this->dcFlushSupport,
229+
.isHeaplessModeEnabled = this->heaplessModeEnabled,
230+
.isHeaplessStateInitEnabled = this->heaplessStateInitEnabled,
231+
.interruptEvent = false,
232+
.immediateScratchAddressPatching = !this->scratchAddressPatchingEnabled,
233+
.makeCommandView = false,
232234
};
233235

234236
NEO::EncodeDispatchKernel<GfxFamily>::encodeCommon(commandContainer, dispatchKernelArgs);

level_zero/core/source/cmdlist/cmdlist_hw_xehp_and_later.inl

Lines changed: 52 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,8 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendLaunchKernelWithParams(K
303303
bool inOrderNonWalkerSignalling = false;
304304

305305
uint64_t inOrderCounterValue = 0;
306+
uint64_t inOrderIncrementValue = 0;
307+
uint64_t inOrderIncrementGpuAddress = 0;
306308
NEO::InOrderExecInfo *inOrderExecInfo = nullptr;
307309

308310
if (!launchParams.makeKernelCommandView) {
@@ -327,8 +329,14 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendLaunchKernelWithParams(K
327329
} else {
328330
inOrderCounterValue = this->inOrderExecInfo->getCounterValue() + getInOrderIncrementValue();
329331
inOrderExecInfo = this->inOrderExecInfo.get();
330-
if (eventForInOrderExec && eventForInOrderExec->isCounterBased() && !isTimestampEvent) {
331-
eventAddress = 0;
332+
if (eventForInOrderExec && eventForInOrderExec->isCounterBased()) {
333+
if (eventForInOrderExec->getInOrderIncrementValue() > 0) {
334+
inOrderIncrementGpuAddress = eventForInOrderExec->getInOrderExecInfo()->getBaseDeviceAddress();
335+
inOrderIncrementValue = eventForInOrderExec->getInOrderIncrementValue();
336+
}
337+
if (!isTimestampEvent) {
338+
eventAddress = 0;
339+
}
332340
}
333341
}
334342
}
@@ -338,46 +346,49 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendLaunchKernelWithParams(K
338346
auto maxWgCountPerTile = kernel->getMaxWgCountPerTile(this->engineGroupType);
339347

340348
NEO::EncodeKernelArgsExt dispatchKernelArgsExt = {};
349+
341350
NEO::EncodeDispatchKernelArgs dispatchKernelArgs{
342-
eventAddress, // eventAddress
343-
static_cast<uint64_t>(Event::STATE_SIGNALED), // postSyncImmValue
344-
inOrderCounterValue, // inOrderCounterValue
345-
neoDevice, // device
346-
inOrderExecInfo, // inOrderExecInfo
347-
kernel, // dispatchInterface
348-
ssh, // surfaceStateHeap
349-
dsh, // dynamicStateHeap
350-
reinterpret_cast<const void *>(&threadGroupDimensions), // threadGroupDimensions
351-
nullptr, // outWalkerPtr
352-
launchParams.cmdWalkerBuffer, // cpuWalkerBuffer
353-
launchParams.hostPayloadBuffer, // cpuPayloadBuffer
354-
nullptr, // outImplicitArgsPtr
355-
&additionalCommands, // additionalCommands
356-
&dispatchKernelArgsExt, // extendedArgs
357-
kernelPreemptionMode, // preemptionMode
358-
launchParams.requiredPartitionDim, // requiredPartitionDim
359-
launchParams.requiredDispatchWalkOrder, // requiredDispatchWalkOrder
360-
launchParams.localRegionSize, // localRegionSize
361-
this->partitionCount, // partitionCount
362-
launchParams.reserveExtraPayloadSpace, // reserveExtraPayloadSpace
363-
maxWgCountPerTile, // maxWgCountPerTile
364-
this->defaultPipelinedThreadArbitrationPolicy, // defaultPipelinedThreadArbitrationPolicy
365-
launchParams.isIndirect, // isIndirect
366-
launchParams.isPredicate, // isPredicate
367-
isTimestampEvent, // isTimestampEvent
368-
uncachedMocsKernel, // requiresUncachedMocs
369-
internalUsage, // isInternal
370-
launchParams.isCooperative, // isCooperative
371-
isHostSignalScopeEvent, // isHostScopeSignalEvent
372-
isKernelUsingSystemAllocation, // isKernelUsingSystemAllocation
373-
isImmediateType(), // isKernelDispatchedFromImmediateCmdList
374-
engineGroupType == NEO::EngineGroupType::renderCompute, // isRcs
375-
this->dcFlushSupport, // dcFlushEnable
376-
this->heaplessModeEnabled, // isHeaplessModeEnabled
377-
this->heaplessStateInitEnabled, // isHeaplessStateInitEnabled
378-
interruptEvent, // interruptEvent
379-
!this->scratchAddressPatchingEnabled, // immediateScratchAddressPatching
380-
launchParams.makeKernelCommandView // makeCommandView
351+
.eventAddress = eventAddress,
352+
.postSyncImmValue = static_cast<uint64_t>(Event::STATE_SIGNALED),
353+
.inOrderCounterValue = inOrderCounterValue,
354+
.inOrderIncrementGpuAddress = inOrderIncrementGpuAddress,
355+
.inOrderIncrementValue = inOrderIncrementValue,
356+
.device = neoDevice,
357+
.inOrderExecInfo = inOrderExecInfo,
358+
.dispatchInterface = kernel,
359+
.surfaceStateHeap = ssh,
360+
.dynamicStateHeap = dsh,
361+
.threadGroupDimensions = reinterpret_cast<const void *>(&threadGroupDimensions),
362+
.outWalkerPtr = nullptr,
363+
.cpuWalkerBuffer = launchParams.cmdWalkerBuffer,
364+
.cpuPayloadBuffer = launchParams.hostPayloadBuffer,
365+
.outImplicitArgsPtr = nullptr,
366+
.additionalCommands = &additionalCommands,
367+
.extendedArgs = &dispatchKernelArgsExt,
368+
.preemptionMode = kernelPreemptionMode,
369+
.requiredPartitionDim = launchParams.requiredPartitionDim,
370+
.requiredDispatchWalkOrder = launchParams.requiredDispatchWalkOrder,
371+
.localRegionSize = launchParams.localRegionSize,
372+
.partitionCount = this->partitionCount,
373+
.reserveExtraPayloadSpace = launchParams.reserveExtraPayloadSpace,
374+
.maxWgCountPerTile = maxWgCountPerTile,
375+
.defaultPipelinedThreadArbitrationPolicy = this->defaultPipelinedThreadArbitrationPolicy,
376+
.isIndirect = launchParams.isIndirect,
377+
.isPredicate = launchParams.isPredicate,
378+
.isTimestampEvent = isTimestampEvent,
379+
.requiresUncachedMocs = uncachedMocsKernel,
380+
.isInternal = internalUsage,
381+
.isCooperative = launchParams.isCooperative,
382+
.isHostScopeSignalEvent = isHostSignalScopeEvent,
383+
.isKernelUsingSystemAllocation = isKernelUsingSystemAllocation,
384+
.isKernelDispatchedFromImmediateCmdList = isImmediateType(),
385+
.isRcs = engineGroupType == NEO::EngineGroupType::renderCompute,
386+
.dcFlushEnable = this->dcFlushSupport,
387+
.isHeaplessModeEnabled = this->heaplessModeEnabled,
388+
.isHeaplessStateInitEnabled = this->heaplessStateInitEnabled,
389+
.interruptEvent = interruptEvent,
390+
.immediateScratchAddressPatching = !this->scratchAddressPatchingEnabled,
391+
.makeCommandView = launchParams.makeKernelCommandView,
381392
};
382393
setAdditionalDispatchKernelArgsFromLaunchParams(dispatchKernelArgs, launchParams);
383394

level_zero/core/test/unit_tests/fixtures/in_order_cmd_list_fixture.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "level_zero/core/test/unit_tests/mocks/mock_cmdlist.h"
1818
#include "level_zero/core/test/unit_tests/mocks/mock_cmdqueue.h"
1919
#include "level_zero/core/test/unit_tests/sources/helper/ze_object_utils.h"
20+
#include "level_zero/driver_experimental/zex_api.h"
2021

2122
namespace L0 {
2223
namespace ult {
@@ -84,6 +85,19 @@ struct InOrderCmdListFixture : public ::Test<ModuleFixture> {
8485
::Test<ModuleFixture>::TearDown();
8586
}
8687

88+
void createExternalSyncStorageEvent(uint64_t counterValue, uint64_t incrementValue, uint64_t *deviceAddress, ze_event_handle_t &outEvent) {
89+
zex_counter_based_event_external_storage_properties_t externalStorageAllocProperties = {ZEX_STRUCTURE_COUNTER_BASED_EVENT_EXTERNAL_STORAGE_ALLOC_PROPERTIES}; // NOLINT(clang-analyzer-optin.core.EnumCastOutOfRange), NEO-12901
90+
externalStorageAllocProperties.completionValue = counterValue;
91+
externalStorageAllocProperties.deviceAddress = deviceAddress;
92+
externalStorageAllocProperties.incrementValue = incrementValue;
93+
94+
zex_counter_based_event_desc_t counterBasedDesc = {ZEX_STRUCTURE_COUNTER_BASED_EVENT_DESC}; // NOLINT(clang-analyzer-optin.core.EnumCastOutOfRange), NEO-12901
95+
counterBasedDesc.flags = ZEX_COUNTER_BASED_EVENT_FLAG_IMMEDIATE | ZEX_COUNTER_BASED_EVENT_FLAG_NON_IMMEDIATE;
96+
counterBasedDesc.pNext = &externalStorageAllocProperties;
97+
98+
EXPECT_EQ(ZE_RESULT_SUCCESS, zexCounterBasedEventCreate2(context, device, &counterBasedDesc, &outEvent));
99+
}
100+
87101
DestroyableZeUniquePtr<FixtureMockEvent> createStandaloneCbEvent(const ze_base_desc_t *pNext) {
88102
constexpr uint32_t counterBasedFlags = (ZE_EVENT_POOL_COUNTER_BASED_EXP_FLAG_IMMEDIATE | ZE_EVENT_POOL_COUNTER_BASED_EXP_FLAG_NON_IMMEDIATE);
89103

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

Lines changed: 4 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "shared/test/common/mocks/mock_device.h"
2323
#include "shared/test/common/mocks/mock_graphics_allocation.h"
2424
#include "shared/test/common/test_macros/hw_test.h"
25+
#include "shared/test/unit_test/fixtures/command_container_fixture.h"
2526

2627
#include "level_zero/core/source/cmdlist/cmdlist_hw_immediate.h"
2728
#include "level_zero/core/source/event/event.h"
@@ -195,47 +196,9 @@ HWTEST2_F(CommandListAppendLaunchKernel, givenNotEnoughSpaceInCommandStreamWhenA
195196

196197
const uint32_t threadGroupDimensions[3] = {1, 1, 1};
197198

198-
NEO::EncodeDispatchKernelArgs dispatchKernelArgs{
199-
0, // eventAddress
200-
0, // postSyncImmValue
201-
0, // inOrderCounterValue
202-
device->getNEODevice(), // device
203-
nullptr, // inOrderExecInfo
204-
kernel.get(), // dispatchInterface
205-
nullptr, // surfaceStateHeap
206-
nullptr, // dynamicStateHeap
207-
threadGroupDimensions, // threadGroupDimensions
208-
nullptr, // outWalkerPtr
209-
nullptr, // cpuWalkerBuffer
210-
nullptr, // cpuPayloadBuffer
211-
nullptr, // outImplicitArgsPtr
212-
nullptr, // additionalCommands
213-
nullptr, // extendedArgs
214-
PreemptionMode::MidBatch, // preemptionMode
215-
NEO::RequiredPartitionDim::none, // requiredPartitionDim
216-
NEO::RequiredDispatchWalkOrder::none, // requiredDispatchWalkOrder
217-
NEO::localRegionSizeParamNotSet, // localRegionSize
218-
0, // partitionCount
219-
0, // reserveExtraPayloadSpace
220-
1, // maxWgCountPerTile
221-
NEO::ThreadArbitrationPolicy::NotPresent, // defaultPipelinedThreadArbitrationPolicy
222-
false, // isIndirect
223-
false, // isPredicate
224-
false, // isTimestampEvent
225-
false, // requiresUncachedMocs
226-
false, // isInternal
227-
false, // isCooperative
228-
false, // isHostScopeSignalEvent
229-
false, // isKernelUsingSystemAllocation
230-
false, // isKernelDispatchedFromImmediateCmdList
231-
false, // isRcs
232-
commandList->getDcFlushRequired(true), // dcFlushEnable
233-
false, // isHeaplessModeEnabled
234-
false, // isHeaplessStateInitEnabled
235-
false, // interruptEvent
236-
false, // immediateScratchAddressPatching
237-
false, // makeCommandView
238-
};
199+
auto dispatchKernelArgs = CommandEncodeStatesFixture::createDefaultDispatchKernelArgs(device->getNEODevice(), kernel.get(), threadGroupDimensions, false);
200+
dispatchKernelArgs.dcFlushEnable = commandList->getDcFlushRequired(true);
201+
239202
NEO::EncodeDispatchKernel<FamilyType>::template encode<DefaultWalkerType>(commandContainer, dispatchKernelArgs);
240203

241204
auto usedSpaceAfter = commandContainer.getCommandStream()->getUsed();

0 commit comments

Comments
 (0)