mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-10 12:53:42 +08:00
Add debug flag to select event field for event completion
Related-To: NEO-6871 Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:

committed by
Compute-Runtime-Automation

parent
0e2bfe92c4
commit
dc4a1e7cd5
@ -5,6 +5,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "shared/source/debug_settings/debug_settings_manager.h"
|
||||
#include "shared/source/memory_manager/internal_allocation_storage.h"
|
||||
|
||||
#include "level_zero/core/source/event/event.h"
|
||||
@ -30,7 +31,12 @@ Event *Event::create(EventPool *eventPool, const ze_event_desc_t *desc, Device *
|
||||
event->signalScope = desc->signal;
|
||||
event->waitScope = desc->wait;
|
||||
event->csr = neoDevice->getDefaultEngine().commandStreamReceiver;
|
||||
event->setUsingContextEndOffset(L0HwHelper::get(neoDevice->getHardwareInfo().platform.eRenderCoreFamily).multiTileCapablePlatform());
|
||||
bool useContextEndOffset = L0HwHelper::get(neoDevice->getHardwareInfo().platform.eRenderCoreFamily).multiTileCapablePlatform();
|
||||
int32_t overrideUseContextEndOffset = NEO::DebugManager.flags.UseContextEndOffsetForEventCompletion.get();
|
||||
if (overrideUseContextEndOffset != -1) {
|
||||
useContextEndOffset = !!overrideUseContextEndOffset;
|
||||
}
|
||||
event->setUsingContextEndOffset(useContextEndOffset);
|
||||
|
||||
EventPoolImp *EventPoolImp = static_cast<struct EventPoolImp *>(eventPool);
|
||||
// do not reset even if it has been imported, since event pool
|
||||
|
@ -603,6 +603,80 @@ TEST_F(EventCreate, givenAnEventCreateWithInvalidIndexUsingThisEventPoolThenErro
|
||||
ASSERT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, value);
|
||||
}
|
||||
|
||||
HWTEST2_F(EventCreate, givenPlatformSupportMultTileWhenDebugKeyIsSetToNotUseContextEndThenDoNotUseContextEndOffset, isXeHpOrXeHpcCore) {
|
||||
DebugManagerStateRestore restorer;
|
||||
NEO::DebugManager.flags.UseContextEndOffsetForEventCompletion.set(0);
|
||||
|
||||
bool useContextEndOffset = L0HwHelper::get(neoDevice->getHardwareInfo().platform.eRenderCoreFamily).multiTileCapablePlatform();
|
||||
EXPECT_TRUE(useContextEndOffset);
|
||||
|
||||
ze_event_pool_desc_t eventPoolDesc = {
|
||||
ZE_STRUCTURE_TYPE_EVENT_POOL_DESC,
|
||||
nullptr,
|
||||
0,
|
||||
1};
|
||||
const ze_event_desc_t eventDesc = {
|
||||
ZE_STRUCTURE_TYPE_EVENT_DESC,
|
||||
nullptr,
|
||||
0,
|
||||
0,
|
||||
0};
|
||||
|
||||
ze_event_handle_t eventHandle = nullptr;
|
||||
|
||||
ze_result_t result = ZE_RESULT_SUCCESS;
|
||||
std::unique_ptr<L0::EventPool> eventPool(EventPool::create(driverHandle.get(), context, 0, nullptr, &eventPoolDesc, result));
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
ASSERT_NE(nullptr, eventPool);
|
||||
|
||||
ze_result_t value = eventPool->createEvent(&eventDesc, &eventHandle);
|
||||
ASSERT_NE(nullptr, eventHandle);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, value);
|
||||
|
||||
auto event = Event::fromHandle(eventHandle);
|
||||
EXPECT_FALSE(event->isEventTimestampFlagSet());
|
||||
EXPECT_FALSE(event->isUsingContextEndOffset());
|
||||
|
||||
event->destroy();
|
||||
}
|
||||
|
||||
HWTEST2_F(EventCreate, givenPlatformNotSupportsMultTileWhenDebugKeyIsSetToUseContextEndThenUseContextEndOffset, isNotXeHpOrXeHpcCore) {
|
||||
DebugManagerStateRestore restorer;
|
||||
NEO::DebugManager.flags.UseContextEndOffsetForEventCompletion.set(1);
|
||||
|
||||
bool useContextEndOffset = L0HwHelper::get(neoDevice->getHardwareInfo().platform.eRenderCoreFamily).multiTileCapablePlatform();
|
||||
EXPECT_FALSE(useContextEndOffset);
|
||||
|
||||
ze_event_pool_desc_t eventPoolDesc = {
|
||||
ZE_STRUCTURE_TYPE_EVENT_POOL_DESC,
|
||||
nullptr,
|
||||
0,
|
||||
1};
|
||||
const ze_event_desc_t eventDesc = {
|
||||
ZE_STRUCTURE_TYPE_EVENT_DESC,
|
||||
nullptr,
|
||||
0,
|
||||
0,
|
||||
0};
|
||||
|
||||
ze_event_handle_t eventHandle = nullptr;
|
||||
|
||||
ze_result_t result = ZE_RESULT_SUCCESS;
|
||||
std::unique_ptr<L0::EventPool> eventPool(EventPool::create(driverHandle.get(), context, 0, nullptr, &eventPoolDesc, result));
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
ASSERT_NE(nullptr, eventPool);
|
||||
|
||||
ze_result_t value = eventPool->createEvent(&eventDesc, &eventHandle);
|
||||
ASSERT_NE(nullptr, eventHandle);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, value);
|
||||
|
||||
auto event = Event::fromHandle(eventHandle);
|
||||
EXPECT_FALSE(event->isEventTimestampFlagSet());
|
||||
EXPECT_TRUE(event->isUsingContextEndOffset());
|
||||
|
||||
event->destroy();
|
||||
}
|
||||
|
||||
class EventSynchronizeTest : public Test<DeviceFixture> {
|
||||
public:
|
||||
void SetUp() override {
|
||||
|
@ -411,5 +411,6 @@ DirectSubmissionReadBackCommandBuffer = -1
|
||||
DirectSubmissionReadBackRingBuffer = -1
|
||||
ReadBackCommandBufferAllocation = -1
|
||||
PrintImageBlitBlockCopyCmdDetails = 0
|
||||
UseContextEndOffsetForEventCompletion = -1
|
||||
DirectSubmissionInsertExtraMiMemFenceCommands = -1
|
||||
DirectSubmissionInsertSfenceInstructionPriorToSubmission = -1
|
||||
|
@ -200,6 +200,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, ForcePreParserEnabledForMiArbCheck, -1, "-1: def
|
||||
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.")
|
||||
DECLARE_DEBUG_VARIABLE(int32_t, SetVmAdviseAtomicAttribute, -1, "-1: default - atomic system, 0: atomic none, 1: atomic device, 2: atomic system)")
|
||||
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")
|
||||
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")
|
||||
DECLARE_DEBUG_VARIABLE(bool, DisableScratchPages, false, "Disable scratch pages during VM creations")
|
||||
/*LOGGING FLAGS*/
|
||||
DECLARE_DEBUG_VARIABLE(int32_t, PrintDriverDiagnostics, -1, "prints driver diagnostics messages to standard output, value corresponds to hint level")
|
||||
|
@ -37,6 +37,8 @@ using IsAtMostXeHpcCore = IsAtMostGfxCore<IGFX_XE_HPC_CORE>;
|
||||
using isXeHpOrXeHpcCore = IsAnyGfxCores<IGFX_XE_HP_CORE, IGFX_XE_HPC_CORE>;
|
||||
using isXeHpcOrXeHpgCore = IsAnyGfxCores<IGFX_XE_HPC_CORE, IGFX_XE_HPG_CORE>;
|
||||
|
||||
using isNotXeHpOrXeHpcCore = IsNotAnyGfxCores<IGFX_XE_HP_CORE, IGFX_XE_HPC_CORE>;
|
||||
|
||||
using IsSKL = IsProduct<IGFX_SKYLAKE>;
|
||||
using IsKBL = IsProduct<IGFX_KABYLAKE>;
|
||||
using IsCFL = IsProduct<IGFX_COFFEELAKE>;
|
||||
|
@ -830,6 +830,14 @@ struct IsAnyGfxCores {
|
||||
}
|
||||
};
|
||||
|
||||
template <GFXCORE_FAMILY... args>
|
||||
struct IsNotAnyGfxCores {
|
||||
template <PRODUCT_FAMILY productFamily>
|
||||
static constexpr bool isMatched() {
|
||||
return (... && IsNotGfxCore<args>::template isMatched<productFamily>());
|
||||
}
|
||||
};
|
||||
|
||||
template <PRODUCT_FAMILY product>
|
||||
struct IsProduct {
|
||||
template <PRODUCT_FAMILY productFamily>
|
||||
|
Reference in New Issue
Block a user