Skip to content

Commit 67c0378

Browse files
set Event::csr for immediate cmdlists
Currently Event::csr is set during initialization and never changes. This PR is to associate Event::csr with the one that was used to dispatch task in cmdlist Signed-off-by: Szymon Morek <szymon.morek@intel.com>
1 parent 95434f4 commit 67c0378

File tree

7 files changed

+66
-17
lines changed

7 files changed

+66
-17
lines changed

level_zero/core/source/cmdlist/cmdlist_hw_immediate.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ struct CommandListCoreFamilyImmediate : public CommandListCoreFamily<gfxCoreFami
123123
void checkAvailableSpace();
124124
void updateDispatchFlagsWithRequiredStreamState(NEO::DispatchFlags &dispatchFlags);
125125

126-
ze_result_t flushImmediate(ze_result_t inputRet, bool performMigration);
126+
ze_result_t flushImmediate(ze_result_t inputRet, bool performMigration, ze_event_handle_t signalEvent);
127127

128128
void createLogicalStateHelper() override {}
129129
NEO::LogicalStateHelper *getLogicalStateHelper() const override;

level_zero/core/source/cmdlist/cmdlist_hw_immediate.inl

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendLaunchKernel(
183183
auto ret = CommandListCoreFamily<gfxCoreFamily>::appendLaunchKernel(kernelHandle, threadGroupDimensions,
184184
hSignalEvent, numWaitEvents, phWaitEvents,
185185
launchParams);
186-
return flushImmediate(ret, true);
186+
return flushImmediate(ret, true, hSignalEvent);
187187
}
188188

189189
template <GFXCORE_FAMILY gfxCoreFamily>
@@ -196,7 +196,7 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendLaunchKernelInd
196196
}
197197
auto ret = CommandListCoreFamily<gfxCoreFamily>::appendLaunchKernelIndirect(kernelHandle, pDispatchArgumentsBuffer,
198198
hSignalEvent, numWaitEvents, phWaitEvents);
199-
return flushImmediate(ret, true);
199+
return flushImmediate(ret, true, hSignalEvent);
200200
}
201201

202202
template <GFXCORE_FAMILY gfxCoreFamily>
@@ -210,7 +210,7 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendBarrier(
210210
checkAvailableSpace();
211211
}
212212
ret = CommandListCoreFamily<gfxCoreFamily>::appendBarrier(hSignalEvent, numWaitEvents, phWaitEvents);
213-
return flushImmediate(ret, true);
213+
return flushImmediate(ret, true, hSignalEvent);
214214
}
215215

216216
template <GFXCORE_FAMILY gfxCoreFamily>
@@ -244,7 +244,7 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendMemoryCopy(
244244
ret = CommandListCoreFamily<gfxCoreFamily>::appendMemoryCopy(dstptr, srcptr, size, hSignalEvent,
245245
numWaitEvents, phWaitEvents);
246246
}
247-
return flushImmediate(ret, true);
247+
return flushImmediate(ret, true, hSignalEvent);
248248
}
249249

250250
template <GFXCORE_FAMILY gfxCoreFamily>
@@ -286,7 +286,8 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendMemoryCopyRegio
286286
srcPtr, srcRegion, srcPitch, srcSlicePitch,
287287
hSignalEvent, numWaitEvents, phWaitEvents);
288288
}
289-
return flushImmediate(ret, true);
289+
290+
return flushImmediate(ret, true, hSignalEvent);
290291
}
291292

292293
template <GFXCORE_FAMILY gfxCoreFamily>
@@ -300,7 +301,8 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendMemoryFill(void
300301
checkAvailableSpace();
301302
}
302303
auto ret = CommandListCoreFamily<gfxCoreFamily>::appendMemoryFill(ptr, pattern, patternSize, size, hSignalEvent, numWaitEvents, phWaitEvents);
303-
return flushImmediate(ret, true);
304+
305+
return flushImmediate(ret, true, hSignalEvent);
304306
}
305307

306308
template <GFXCORE_FAMILY gfxCoreFamily>
@@ -312,7 +314,7 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendSignalEvent(ze_
312314
checkAvailableSpace();
313315
}
314316
ret = CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(hSignalEvent);
315-
return flushImmediate(ret, true);
317+
return flushImmediate(ret, true, hSignalEvent);
316318
}
317319

318320
template <GFXCORE_FAMILY gfxCoreFamily>
@@ -324,7 +326,7 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendEventReset(ze_e
324326
checkAvailableSpace();
325327
}
326328
ret = CommandListCoreFamily<gfxCoreFamily>::appendEventReset(hSignalEvent);
327-
return flushImmediate(ret, true);
329+
return flushImmediate(ret, true, hSignalEvent);
328330
}
329331

330332
template <GFXCORE_FAMILY gfxCoreFamily>
@@ -350,7 +352,7 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendPageFaultCopy(N
350352
} else {
351353
ret = CommandListCoreFamily<gfxCoreFamily>::appendPageFaultCopy(dstAllocation, srcAllocation, size, flushHost);
352354
}
353-
return flushImmediate(ret, false);
355+
return flushImmediate(ret, false, nullptr);
354356
}
355357

356358
template <GFXCORE_FAMILY gfxCoreFamily>
@@ -359,7 +361,7 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendWaitOnEvents(ui
359361
checkAvailableSpace();
360362
}
361363
auto ret = CommandListCoreFamily<gfxCoreFamily>::appendWaitOnEvents(numEvents, phWaitEvents);
362-
return flushImmediate(ret, true);
364+
return flushImmediate(ret, true, nullptr);
363365
}
364366

365367
template <GFXCORE_FAMILY gfxCoreFamily>
@@ -371,7 +373,8 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendWriteGlobalTime
371373
checkAvailableSpace();
372374
}
373375
auto ret = CommandListCoreFamily<gfxCoreFamily>::appendWriteGlobalTimestamp(dstptr, hSignalEvent, numWaitEvents, phWaitEvents);
374-
return flushImmediate(ret, true);
376+
377+
return flushImmediate(ret, true, hSignalEvent);
375378
}
376379

377380
template <GFXCORE_FAMILY gfxCoreFamily>
@@ -407,7 +410,7 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendImageCopyRegion
407410
}
408411
auto ret = CommandListCoreFamily<gfxCoreFamily>::appendImageCopyRegion(hDstImage, hSrcImage, pDstRegion, pSrcRegion, hSignalEvent,
409412
numWaitEvents, phWaitEvents);
410-
return flushImmediate(ret, true);
413+
return flushImmediate(ret, true, hSignalEvent);
411414
}
412415

413416
template <GFXCORE_FAMILY gfxCoreFamily>
@@ -424,7 +427,8 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendImageCopyFromMe
424427
}
425428
auto ret = CommandListCoreFamily<gfxCoreFamily>::appendImageCopyFromMemory(hDstImage, srcPtr, pDstRegion, hSignalEvent,
426429
numWaitEvents, phWaitEvents);
427-
return flushImmediate(ret, true);
430+
431+
return flushImmediate(ret, true, hSignalEvent);
428432
}
429433

430434
template <GFXCORE_FAMILY gfxCoreFamily>
@@ -441,7 +445,8 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendImageCopyToMemo
441445
}
442446
auto ret = CommandListCoreFamily<gfxCoreFamily>::appendImageCopyToMemory(dstPtr, hSrcImage, pSrcRegion, hSignalEvent,
443447
numWaitEvents, phWaitEvents);
444-
return flushImmediate(ret, true);
448+
449+
return flushImmediate(ret, true, hSignalEvent);
445450
}
446451

447452
template <GFXCORE_FAMILY gfxCoreFamily>
@@ -455,18 +460,21 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendMemoryRangesBar
455460
checkAvailableSpace();
456461
}
457462
auto ret = CommandListCoreFamily<gfxCoreFamily>::appendMemoryRangesBarrier(numRanges, pRangeSizes, pRanges, hSignalEvent, numWaitEvents, phWaitEvents);
458-
return flushImmediate(ret, true);
463+
return flushImmediate(ret, true, hSignalEvent);
459464
}
460465

461466
template <GFXCORE_FAMILY gfxCoreFamily>
462-
ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::flushImmediate(ze_result_t inputRet, bool performMigration) {
467+
ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::flushImmediate(ze_result_t inputRet, bool performMigration, ze_event_handle_t signalEvent) {
463468
if (inputRet == ZE_RESULT_SUCCESS) {
464469
if (this->isFlushTaskSubmissionEnabled) {
465470
inputRet = executeCommandListImmediateWithFlushTask(performMigration);
466471
} else {
467472
inputRet = executeCommandListImmediate(performMigration);
468473
}
469474
}
475+
if (signalEvent) {
476+
Event::fromHandle(signalEvent)->setCsr(this->csr);
477+
}
470478
return inputRet;
471479
}
472480

level_zero/core/source/event/event.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ struct Event : _ze_event_handle_t {
9898
bool isUsingContextEndOffset() const {
9999
return isTimestampEvent || usingContextEndOffset;
100100
}
101+
void setCsr(NEO::CommandStreamReceiver *csr) {
102+
this->csr = csr;
103+
}
101104

102105
void increaseKernelCount() {
103106
kernelCount++;

level_zero/core/source/event/event_impl.inl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ ze_result_t EventImp<TagSizeT>::reset() {
292292
hostEventSetValue(Event::STATE_INITIAL);
293293
resetPackets();
294294
resetCompletion();
295+
295296
this->l3FlushAppliedOnKernel.reset();
296297
return ZE_RESULT_SUCCESS;
297298
}
@@ -388,6 +389,7 @@ void EventImp<TagSizeT>::resetPackets() {
388389
cpuStartTimestamp = 0;
389390
gpuStartTimestamp = 0;
390391
gpuEndTimestamp = 0;
392+
this->csr = this->device->getNEODevice()->getDefaultEngine().commandStreamReceiver;
391393
}
392394

393395
template <typename TagSizeT>

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,28 @@ HWTEST2_F(CommandListTest, givenImmediateCommandListWhenAppendMemoryRangesBarrie
295295
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
296296
}
297297

298+
HWTEST2_F(CommandListTest, givenImmediateCommandListWhenFlushImmediateThenOverrideEventCsr, IsAtLeastSkl) {
299+
MockCommandListImmediateHw<gfxCoreFamily> cmdList;
300+
cmdList.cmdListType = CommandList::CommandListType::TYPE_IMMEDIATE;
301+
cmdList.initialize(device, NEO::EngineGroupType::Copy, 0u);
302+
303+
ze_event_pool_desc_t eventPoolDesc = {};
304+
eventPoolDesc.count = 1;
305+
ze_result_t result = ZE_RESULT_SUCCESS;
306+
auto eventPool = std::unique_ptr<L0::EventPool>(L0::EventPool::create(driverHandle.get(), context, 0, nullptr, &eventPoolDesc, result));
307+
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
308+
309+
ze_event_desc_t eventDesc = {};
310+
eventDesc.index = 0;
311+
auto event = std::unique_ptr<L0::Event>(L0::Event::create<uint32_t>(eventPool.get(), &eventDesc, device));
312+
313+
MockCommandStreamReceiver mockCommandStreamReceiver(*neoDevice->executionEnvironment, neoDevice->getRootDeviceIndex(), neoDevice->getDeviceBitfield());
314+
cmdList.csr = event->csr;
315+
event->csr = &mockCommandStreamReceiver;
316+
cmdList.flushImmediate(ZE_RESULT_SUCCESS, false, event->toHandle());
317+
EXPECT_EQ(event->csr, cmdList.csr);
318+
}
319+
298320
HWTEST2_F(CommandListTest,
299321
givenComputeCommandListAnd2dRegionWhenMemoryCopyRegionInExternalHostAllocationCalledThenBuiltinFlagAndDestinationAllocSystemIsSet, IsAtLeastSkl) {
300322
auto commandList = std::make_unique<WhiteBox<::L0::CommandListCoreFamily<gfxCoreFamily>>>();

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ HWTEST2_F(AppendMemoryCopy, givenAsyncImmediateCommandListWhenAppendingMemoryCop
171171
commandList->device = device;
172172
commandList->cmdQImmediate = &cmdQueue;
173173
commandList->cmdListType = CommandList::CommandListType::TYPE_IMMEDIATE;
174+
commandList->csr = device->getNEODevice()->getDefaultEngine().commandStreamReceiver;
174175

175176
auto result = commandList->appendMemoryCopy(dstPtr, srcPtr, 8, nullptr, 0, nullptr);
176177
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
@@ -194,6 +195,7 @@ HWTEST2_F(AppendMemoryCopy, givenSyncModeImmediateCommandListWhenAppendingMemory
194195
commandList->cmdQImmediate = &cmdQueue;
195196
commandList->cmdListType = CommandList::CommandListType::TYPE_IMMEDIATE;
196197
commandList->isSyncModeQueue = true;
198+
commandList->csr = device->getNEODevice()->getDefaultEngine().commandStreamReceiver;
197199

198200
auto result = commandList->appendMemoryCopy(dstPtr, srcPtr, 8, nullptr, 0, nullptr);
199201
ASSERT_EQ(ZE_RESULT_SUCCESS, result);

level_zero/core/test/unit_tests/sources/event/test_event.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2272,5 +2272,17 @@ TEST_F(EventTests, WhenResetEventThenZeroCpuTimestamps) {
22722272
EXPECT_EQ(event->gpuEndTimestamp, 0u);
22732273
}
22742274

2275+
TEST_F(EventSynchronizeTest, whenEventSetCsrThenCorrectCsrSet) {
2276+
auto defaultCsr = neoDevice->getDefaultEngine().commandStreamReceiver;
2277+
const auto mockCsr = std::make_unique<MockCommandStreamReceiver>(*neoDevice->getExecutionEnvironment(), 0, neoDevice->getDeviceBitfield());
2278+
2279+
EXPECT_EQ(event->csr, defaultCsr);
2280+
event->setCsr(mockCsr.get());
2281+
EXPECT_EQ(event->csr, mockCsr.get());
2282+
2283+
event->reset();
2284+
EXPECT_EQ(event->csr, defaultCsr);
2285+
}
2286+
22752287
} // namespace ult
22762288
} // namespace L0

0 commit comments

Comments
 (0)