Skip to content

Commit fc72de1

Browse files
Add support for cooperative kernels to immediate command lists
Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
1 parent af3dd28 commit fc72de1

File tree

7 files changed

+66
-11
lines changed

7 files changed

+66
-11
lines changed

level_zero/core/source/cmdlist/cmdlist.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,9 @@ struct CommandList : _ze_command_list_handle_t {
9999
const CmdListKernelLaunchParams &launchParams) = 0;
100100
virtual ze_result_t appendLaunchCooperativeKernel(ze_kernel_handle_t kernelHandle,
101101
const ze_group_count_t *launchKernelArgs,
102-
ze_event_handle_t hSignalEvent,
102+
ze_event_handle_t signalEvent,
103103
uint32_t numWaitEvents,
104-
ze_event_handle_t *phWaitEvents) = 0;
104+
ze_event_handle_t *waitEventHandles) = 0;
105105
virtual ze_result_t appendLaunchKernelIndirect(ze_kernel_handle_t kernelHandle,
106106
const ze_group_count_t *pDispatchArgumentsBuffer,
107107
ze_event_handle_t hEvent, uint32_t numWaitEvents,

level_zero/core/source/cmdlist/cmdlist_hw.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,9 @@ struct CommandListCoreFamily : CommandListImp {
8888
const CmdListKernelLaunchParams &launchParams) override;
8989
ze_result_t appendLaunchCooperativeKernel(ze_kernel_handle_t kernelHandle,
9090
const ze_group_count_t *launchKernelArgs,
91-
ze_event_handle_t hSignalEvent,
91+
ze_event_handle_t signalEvent,
9292
uint32_t numWaitEvents,
93-
ze_event_handle_t *phWaitEvents) override;
93+
ze_event_handle_t *waitEventHandles) override;
9494
ze_result_t appendLaunchKernelIndirect(ze_kernel_handle_t kernelHandle,
9595
const ze_group_count_t *pDispatchArgumentsBuffer,
9696
ze_event_handle_t hEvent, uint32_t numWaitEvents,

level_zero/core/source/cmdlist/cmdlist_hw.inl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -253,18 +253,18 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendLaunchKernel(ze_kernel_h
253253
template <GFXCORE_FAMILY gfxCoreFamily>
254254
ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendLaunchCooperativeKernel(ze_kernel_handle_t kernelHandle,
255255
const ze_group_count_t *launchKernelArgs,
256-
ze_event_handle_t hSignalEvent,
256+
ze_event_handle_t signalEvent,
257257
uint32_t numWaitEvents,
258-
ze_event_handle_t *phWaitEvents) {
258+
ze_event_handle_t *waitEventHandles) {
259259

260-
ze_result_t ret = addEventsToCmdList(numWaitEvents, phWaitEvents);
260+
ze_result_t ret = addEventsToCmdList(numWaitEvents, waitEventHandles);
261261
if (ret) {
262262
return ret;
263263
}
264264

265265
Event *event = nullptr;
266-
if (hSignalEvent) {
267-
event = Event::fromHandle(hSignalEvent);
266+
if (signalEvent) {
267+
event = Event::fromHandle(signalEvent);
268268
}
269269

270270
CmdListKernelLaunchParams launchParams = {};

level_zero/core/source/cmdlist/cmdlist_hw_immediate.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,12 @@ struct CommandListCoreFamilyImmediate : public CommandListCoreFamily<gfxCoreFami
118118
uint32_t numWaitEvents,
119119
ze_event_handle_t *phWaitEvents) override;
120120

121+
ze_result_t appendLaunchCooperativeKernel(ze_kernel_handle_t kernelHandle,
122+
const ze_group_count_t *launchKernelArgs,
123+
ze_event_handle_t signalEvent,
124+
uint32_t numWaitEvents,
125+
ze_event_handle_t *waitEventHandles) override;
126+
121127
MOCKABLE_VIRTUAL ze_result_t executeCommandListImmediateWithFlushTask(bool performMigration);
122128

123129
void checkAvailableSpace();

level_zero/core/source/cmdlist/cmdlist_hw_immediate.inl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,19 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendMemoryRangesBar
458458
return flushImmediate(ret, true);
459459
}
460460

461+
template <GFXCORE_FAMILY gfxCoreFamily>
462+
ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendLaunchCooperativeKernel(ze_kernel_handle_t kernelHandle,
463+
const ze_group_count_t *launchKernelArgs,
464+
ze_event_handle_t signalEvent,
465+
uint32_t numWaitEvents,
466+
ze_event_handle_t *waitEventHandles) {
467+
if (this->isFlushTaskSubmissionEnabled) {
468+
checkAvailableSpace();
469+
}
470+
auto ret = CommandListCoreFamily<gfxCoreFamily>::appendLaunchCooperativeKernel(kernelHandle, launchKernelArgs, signalEvent, numWaitEvents, waitEventHandles);
471+
return flushImmediate(ret, true);
472+
}
473+
461474
template <GFXCORE_FAMILY gfxCoreFamily>
462475
ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::flushImmediate(ze_result_t inputRet, bool performMigration) {
463476
if (inputRet == ZE_RESULT_SUCCESS) {

level_zero/core/test/unit_tests/mocks/mock_cmdlist.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,9 @@ struct MockCommandList : public CommandList {
180180
ADDMETHOD_NOBASE(appendLaunchCooperativeKernel, ze_result_t, ZE_RESULT_SUCCESS,
181181
(ze_kernel_handle_t kernelHandle,
182182
const ze_group_count_t *launchKernelArgs,
183-
ze_event_handle_t hSignalEvent,
183+
ze_event_handle_t signalEvent,
184184
uint32_t numWaitEvents,
185-
ze_event_handle_t *phWaitEvents));
185+
ze_event_handle_t *waitEventHandles));
186186

187187
ADDMETHOD_NOBASE(appendLaunchKernelIndirect, ze_result_t, ZE_RESULT_SUCCESS,
188188
(ze_kernel_handle_t kernelHandle,

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -784,5 +784,41 @@ HWTEST_F(CommandListAppendLaunchKernel, givenInvalidEventListWhenAppendLaunchCoo
784784
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, returnValue);
785785
}
786786

787+
HWTEST2_F(CommandListAppendLaunchKernel, givenImmediateCommandListWhenAppendLaunchCooperativeKernelUsingFlushTaskThenExpectCorrectExecuteCall, IsAtLeastSkl) {
788+
createKernel();
789+
790+
MockCommandListImmediateHw<gfxCoreFamily> cmdList;
791+
cmdList.isFlushTaskSubmissionEnabled = true;
792+
cmdList.cmdListType = CommandList::CommandListType::TYPE_IMMEDIATE;
793+
cmdList.csr = device->getNEODevice()->getDefaultEngine().commandStreamReceiver;
794+
cmdList.initialize(device, NEO::EngineGroupType::RenderCompute, 0u);
795+
796+
ze_group_count_t groupCount{1, 1, 1};
797+
ze_result_t returnValue;
798+
799+
returnValue = cmdList.appendLaunchCooperativeKernel(kernel->toHandle(), &groupCount, nullptr, 0, nullptr);
800+
EXPECT_EQ(0u, cmdList.executeCommandListImmediateCalledCount);
801+
EXPECT_EQ(1u, cmdList.executeCommandListImmediateWithFlushTaskCalledCount);
802+
EXPECT_EQ(ZE_RESULT_SUCCESS, returnValue);
803+
}
804+
805+
HWTEST2_F(CommandListAppendLaunchKernel, givenImmediateCommandListWhenAppendLaunchCooperativeKernelNotUsingFlushTaskThenExpectCorrectExecuteCall, IsAtLeastSkl) {
806+
createKernel();
807+
808+
MockCommandListImmediateHw<gfxCoreFamily> cmdList;
809+
cmdList.isFlushTaskSubmissionEnabled = false;
810+
cmdList.cmdListType = CommandList::CommandListType::TYPE_IMMEDIATE;
811+
cmdList.csr = device->getNEODevice()->getDefaultEngine().commandStreamReceiver;
812+
cmdList.initialize(device, NEO::EngineGroupType::RenderCompute, 0u);
813+
814+
ze_group_count_t groupCount{1, 1, 1};
815+
ze_result_t returnValue;
816+
817+
returnValue = cmdList.appendLaunchCooperativeKernel(kernel->toHandle(), &groupCount, nullptr, 0, nullptr);
818+
EXPECT_EQ(1u, cmdList.executeCommandListImmediateCalledCount);
819+
EXPECT_EQ(0u, cmdList.executeCommandListImmediateWithFlushTaskCalledCount);
820+
EXPECT_EQ(ZE_RESULT_SUCCESS, returnValue);
821+
}
822+
787823
} // namespace ult
788824
} // namespace L0

0 commit comments

Comments
 (0)