Skip to content

Commit dc4a1e7

Browse files
Add debug flag to select event field for event completion
Related-To: NEO-6871 Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
1 parent 0e2bfe9 commit dc4a1e7

File tree

6 files changed

+93
-1
lines changed

6 files changed

+93
-1
lines changed

level_zero/core/source/event/event_impl.inl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*
66
*/
77

8+
#include "shared/source/debug_settings/debug_settings_manager.h"
89
#include "shared/source/memory_manager/internal_allocation_storage.h"
910

1011
#include "level_zero/core/source/event/event.h"
@@ -30,7 +31,12 @@ Event *Event::create(EventPool *eventPool, const ze_event_desc_t *desc, Device *
3031
event->signalScope = desc->signal;
3132
event->waitScope = desc->wait;
3233
event->csr = neoDevice->getDefaultEngine().commandStreamReceiver;
33-
event->setUsingContextEndOffset(L0HwHelper::get(neoDevice->getHardwareInfo().platform.eRenderCoreFamily).multiTileCapablePlatform());
34+
bool useContextEndOffset = L0HwHelper::get(neoDevice->getHardwareInfo().platform.eRenderCoreFamily).multiTileCapablePlatform();
35+
int32_t overrideUseContextEndOffset = NEO::DebugManager.flags.UseContextEndOffsetForEventCompletion.get();
36+
if (overrideUseContextEndOffset != -1) {
37+
useContextEndOffset = !!overrideUseContextEndOffset;
38+
}
39+
event->setUsingContextEndOffset(useContextEndOffset);
3440

3541
EventPoolImp *EventPoolImp = static_cast<struct EventPoolImp *>(eventPool);
3642
// do not reset even if it has been imported, since event pool

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

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -603,6 +603,80 @@ TEST_F(EventCreate, givenAnEventCreateWithInvalidIndexUsingThisEventPoolThenErro
603603
ASSERT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, value);
604604
}
605605

606+
HWTEST2_F(EventCreate, givenPlatformSupportMultTileWhenDebugKeyIsSetToNotUseContextEndThenDoNotUseContextEndOffset, isXeHpOrXeHpcCore) {
607+
DebugManagerStateRestore restorer;
608+
NEO::DebugManager.flags.UseContextEndOffsetForEventCompletion.set(0);
609+
610+
bool useContextEndOffset = L0HwHelper::get(neoDevice->getHardwareInfo().platform.eRenderCoreFamily).multiTileCapablePlatform();
611+
EXPECT_TRUE(useContextEndOffset);
612+
613+
ze_event_pool_desc_t eventPoolDesc = {
614+
ZE_STRUCTURE_TYPE_EVENT_POOL_DESC,
615+
nullptr,
616+
0,
617+
1};
618+
const ze_event_desc_t eventDesc = {
619+
ZE_STRUCTURE_TYPE_EVENT_DESC,
620+
nullptr,
621+
0,
622+
0,
623+
0};
624+
625+
ze_event_handle_t eventHandle = nullptr;
626+
627+
ze_result_t result = ZE_RESULT_SUCCESS;
628+
std::unique_ptr<L0::EventPool> eventPool(EventPool::create(driverHandle.get(), context, 0, nullptr, &eventPoolDesc, result));
629+
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
630+
ASSERT_NE(nullptr, eventPool);
631+
632+
ze_result_t value = eventPool->createEvent(&eventDesc, &eventHandle);
633+
ASSERT_NE(nullptr, eventHandle);
634+
EXPECT_EQ(ZE_RESULT_SUCCESS, value);
635+
636+
auto event = Event::fromHandle(eventHandle);
637+
EXPECT_FALSE(event->isEventTimestampFlagSet());
638+
EXPECT_FALSE(event->isUsingContextEndOffset());
639+
640+
event->destroy();
641+
}
642+
643+
HWTEST2_F(EventCreate, givenPlatformNotSupportsMultTileWhenDebugKeyIsSetToUseContextEndThenUseContextEndOffset, isNotXeHpOrXeHpcCore) {
644+
DebugManagerStateRestore restorer;
645+
NEO::DebugManager.flags.UseContextEndOffsetForEventCompletion.set(1);
646+
647+
bool useContextEndOffset = L0HwHelper::get(neoDevice->getHardwareInfo().platform.eRenderCoreFamily).multiTileCapablePlatform();
648+
EXPECT_FALSE(useContextEndOffset);
649+
650+
ze_event_pool_desc_t eventPoolDesc = {
651+
ZE_STRUCTURE_TYPE_EVENT_POOL_DESC,
652+
nullptr,
653+
0,
654+
1};
655+
const ze_event_desc_t eventDesc = {
656+
ZE_STRUCTURE_TYPE_EVENT_DESC,
657+
nullptr,
658+
0,
659+
0,
660+
0};
661+
662+
ze_event_handle_t eventHandle = nullptr;
663+
664+
ze_result_t result = ZE_RESULT_SUCCESS;
665+
std::unique_ptr<L0::EventPool> eventPool(EventPool::create(driverHandle.get(), context, 0, nullptr, &eventPoolDesc, result));
666+
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
667+
ASSERT_NE(nullptr, eventPool);
668+
669+
ze_result_t value = eventPool->createEvent(&eventDesc, &eventHandle);
670+
ASSERT_NE(nullptr, eventHandle);
671+
EXPECT_EQ(ZE_RESULT_SUCCESS, value);
672+
673+
auto event = Event::fromHandle(eventHandle);
674+
EXPECT_FALSE(event->isEventTimestampFlagSet());
675+
EXPECT_TRUE(event->isUsingContextEndOffset());
676+
677+
event->destroy();
678+
}
679+
606680
class EventSynchronizeTest : public Test<DeviceFixture> {
607681
public:
608682
void SetUp() override {

opencl/test/unit_test/test_files/igdrcl.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,5 +411,6 @@ DirectSubmissionReadBackCommandBuffer = -1
411411
DirectSubmissionReadBackRingBuffer = -1
412412
ReadBackCommandBufferAllocation = -1
413413
PrintImageBlitBlockCopyCmdDetails = 0
414+
UseContextEndOffsetForEventCompletion = -1
414415
DirectSubmissionInsertExtraMiMemFenceCommands = -1
415416
DirectSubmissionInsertSfenceInstructionPriorToSubmission = -1

shared/source/debug_settings/debug_variables_base.inl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, ForcePreParserEnabledForMiArbCheck, -1, "-1: def
200200
DECLARE_DEBUG_VARIABLE(int32_t, BatchBufferStartPrepatchingWaEnabled, -1, "-1: default , 0: disabled, 1: enabled. WA applies valid VA pointing to 'self' instead of 0x0. This mitigates incorrect VA preparsing.")
201201
DECLARE_DEBUG_VARIABLE(int32_t, SetVmAdviseAtomicAttribute, -1, "-1: default - atomic system, 0: atomic none, 1: atomic device, 2: atomic system)")
202202
DECLARE_DEBUG_VARIABLE(int32_t, ReadBackCommandBufferAllocation, -1, "Read command buffer allocation back on the host side. -1: default, 0 - disabled, 1 - local memory only, 2 - local and system memory")
203+
DECLARE_DEBUG_VARIABLE(int32_t, UseContextEndOffsetForEventCompletion, -1, "Use Context End or Context Start for event completion signalling. -1: default: platform dependent, 0 - Use Context Start, 1 - Use Context End")
203204
DECLARE_DEBUG_VARIABLE(bool, DisableScratchPages, false, "Disable scratch pages during VM creations")
204205
/*LOGGING FLAGS*/
205206
DECLARE_DEBUG_VARIABLE(int32_t, PrintDriverDiagnostics, -1, "prints driver diagnostics messages to standard output, value corresponds to hint level")

shared/test/common/test_macros/header/common_matchers.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ using IsAtMostXeHpcCore = IsAtMostGfxCore<IGFX_XE_HPC_CORE>;
3737
using isXeHpOrXeHpcCore = IsAnyGfxCores<IGFX_XE_HP_CORE, IGFX_XE_HPC_CORE>;
3838
using isXeHpcOrXeHpgCore = IsAnyGfxCores<IGFX_XE_HPC_CORE, IGFX_XE_HPG_CORE>;
3939

40+
using isNotXeHpOrXeHpcCore = IsNotAnyGfxCores<IGFX_XE_HP_CORE, IGFX_XE_HPC_CORE>;
41+
4042
using IsSKL = IsProduct<IGFX_SKYLAKE>;
4143
using IsKBL = IsProduct<IGFX_KABYLAKE>;
4244
using IsCFL = IsProduct<IGFX_COFFEELAKE>;

shared/test/common/test_macros/test.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -830,6 +830,14 @@ struct IsAnyGfxCores {
830830
}
831831
};
832832

833+
template <GFXCORE_FAMILY... args>
834+
struct IsNotAnyGfxCores {
835+
template <PRODUCT_FAMILY productFamily>
836+
static constexpr bool isMatched() {
837+
return (... && IsNotGfxCore<args>::template isMatched<productFamily>());
838+
}
839+
};
840+
833841
template <PRODUCT_FAMILY product>
834842
struct IsProduct {
835843
template <PRODUCT_FAMILY productFamily>

0 commit comments

Comments
 (0)