From b204a4f1352d5ab4417a5bad68ec6c6bca99a70c Mon Sep 17 00:00:00 2001 From: Aravind Gopalakrishnan Date: Thu, 4 Feb 2021 17:10:13 -0800 Subject: [PATCH] Use device allocation for events if host visibility not set Related-To: LOCI-1684 Signed-off-by: Aravind Gopalakrishnan --- level_zero/core/source/cmdlist/cmdlist_hw.inl | 57 ++++++++------- level_zero/core/source/event/event.cpp | 72 ++++++++++++++++--- level_zero/core/source/event/event.h | 16 +++-- .../gen12lp/test_events_gen12lp.cpp | 4 +- .../core/test/unit_tests/mocks/mock_event.h | 4 +- .../sources/cmdlist/test_cmdlist_1.cpp | 4 +- .../sources/cmdlist/test_cmdlist_2.cpp | 4 +- .../test_cmdlist_append_event_reset.cpp | 5 +- .../test_cmdlist_append_launch_kernel.cpp | 4 +- .../test_cmdlist_append_signal_event.cpp | 4 +- .../sources/cmdlist/test_cmdlist_blit.cpp | 4 +- .../unit_tests/sources/event/test_event.cpp | 70 ++++++++++++++++-- .../metrics/test_metric_query_pool_1.cpp | 18 ++--- 13 files changed, 194 insertions(+), 72 deletions(-) diff --git a/level_zero/core/source/cmdlist/cmdlist_hw.inl b/level_zero/core/source/cmdlist/cmdlist_hw.inl index 7427be0b4e..385996363a 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw.inl +++ b/level_zero/core/source/cmdlist/cmdlist_hw.inl @@ -214,35 +214,6 @@ ze_result_t CommandListCoreFamily::appendLaunchMultipleKernelsInd return ret; } -template -ze_result_t CommandListCoreFamily::appendEventReset(ze_event_handle_t hEvent) { - using POST_SYNC_OPERATION = typename GfxFamily::PIPE_CONTROL::POST_SYNC_OPERATION; - auto event = Event::fromHandle(hEvent); - - uint64_t baseAddr = event->getGpuAddress(); - size_t eventOffset = 0; - if (event->isTimestampEvent) { - eventOffset = offsetof(TimestampPacketStorage::Packet, contextEnd); - event->resetPackets(); - } - commandContainer.addToResidencyContainer(&event->getAllocation()); - if (isCopyOnly()) { - NEO::EncodeMiFlushDW::programMiFlushDw(*commandContainer.getCommandStream(), event->getGpuAddress(), Event::STATE_CLEARED, false, true); - } else { - NEO::PipeControlArgs args; - args.dcFlushEnable = (!event->signalScope) ? false : true; - NEO::MemorySynchronizationCommands::addPipeControlAndProgramPostSyncOperation( - *commandContainer.getCommandStream(), - POST_SYNC_OPERATION::POST_SYNC_OPERATION_WRITE_IMMEDIATE_DATA, - ptrOffset(baseAddr, eventOffset), - Event::STATE_CLEARED, - commandContainer.getDevice()->getHardwareInfo(), - args); - } - - return ZE_RESULT_SUCCESS; -} - template ze_result_t CommandListCoreFamily::appendBarrier(ze_event_handle_t hSignalEvent, uint32_t numWaitEvents, @@ -1496,6 +1467,34 @@ ze_result_t CommandListCoreFamily::appendSignalEvent(ze_event_han return ZE_RESULT_SUCCESS; } +template +ze_result_t CommandListCoreFamily::appendEventReset(ze_event_handle_t hEvent) { + using POST_SYNC_OPERATION = typename GfxFamily::PIPE_CONTROL::POST_SYNC_OPERATION; + auto event = Event::fromHandle(hEvent); + + uint64_t baseAddr = event->getGpuAddress(); + size_t eventOffset = 0; + if (event->isTimestampEvent) { + eventOffset = offsetof(TimestampPacketStorage::Packet, contextEnd); + } + commandContainer.addToResidencyContainer(&event->getAllocation()); + if (isCopyOnly()) { + NEO::EncodeMiFlushDW::programMiFlushDw(*commandContainer.getCommandStream(), event->getGpuAddress(), Event::STATE_CLEARED, false, true); + } else { + NEO::PipeControlArgs args; + args.dcFlushEnable = (!event->signalScope) ? false : true; + NEO::MemorySynchronizationCommands::addPipeControlAndProgramPostSyncOperation( + *commandContainer.getCommandStream(), + POST_SYNC_OPERATION::POST_SYNC_OPERATION_WRITE_IMMEDIATE_DATA, + ptrOffset(baseAddr, eventOffset), + Event::STATE_CLEARED, + commandContainer.getDevice()->getHardwareInfo(), + args); + } + + return ZE_RESULT_SUCCESS; +} + template ze_result_t CommandListCoreFamily::appendWaitOnEvents(uint32_t numEvents, ze_event_handle_t *phEvent) { diff --git a/level_zero/core/source/event/event.cpp b/level_zero/core/source/event/event.cpp index 6e7bf87814..b36fc556c5 100644 --- a/level_zero/core/source/event/event.cpp +++ b/level_zero/core/source/event/event.cpp @@ -19,6 +19,8 @@ #include "shared/source/memory_manager/memory_operations_handler.h" #include "shared/source/utilities/cpuintrinsics.h" +#include "level_zero/core/source/cmdlist/cmdlist.h" +#include "level_zero/core/source/cmdqueue/cmdqueue.h" #include "level_zero/core/source/device/device.h" #include "level_zero/core/source/device/device_imp.h" #include "level_zero/tools/source/metrics/metric.h" @@ -56,23 +58,52 @@ ze_result_t EventPoolImp::initialize(DriverHandle *driver, uint32_t numDevices, maxRootDeviceIndex = rootDeviceIndices[0]; } + if (this->devices.size() > 1) { + this->allocOnDevice = false; + } + + if (allocOnDevice) { + ze_command_queue_desc_t cmdQueueDesc = {}; + cmdQueueDesc.ordinal = 0; + cmdQueueDesc.index = 0; + cmdQueueDesc.flags = 0; + cmdQueueDesc.stype = ZE_STRUCTURE_TYPE_COMMAND_QUEUE_DESC; + cmdQueueDesc.mode = ZE_COMMAND_QUEUE_MODE_SYNCHRONOUS; + ze_result_t returnValue = ZE_RESULT_SUCCESS; + eventPoolCommandList = + CommandList::createImmediate( + static_cast(this->devices[0])->neoDevice->getHardwareInfo().platform.eProductFamily, + this->devices[0], + &cmdQueueDesc, + true, + NEO::EngineGroupType::RenderCompute, + returnValue); + + if (!this->eventPoolCommandList) { + this->allocOnDevice = false; + } + } + eventPoolAllocations = new NEO::MultiGraphicsAllocation(maxRootDeviceIndex); uint32_t rootDeviceIndex = rootDeviceIndices.at(0); auto deviceBitfield = devices[0]->getNEODevice()->getDeviceBitfield(); + auto allocationType = isEventPoolUsedForTimestamp ? NEO::GraphicsAllocation::AllocationType::TIMESTAMP_PACKET_TAG_BUFFER : NEO::GraphicsAllocation::AllocationType::BUFFER_HOST_MEMORY; + if (this->allocOnDevice) { + allocationType = NEO::GraphicsAllocation::AllocationType::BUFFER; + } - NEO::AllocationProperties unifiedMemoryProperties{rootDeviceIndex, - true, - alignUp(numEvents * eventSize, MemoryConstants::pageSize64k), - isEventPoolUsedForTimestamp ? NEO::GraphicsAllocation::AllocationType::TIMESTAMP_PACKET_TAG_BUFFER - : NEO::GraphicsAllocation::AllocationType::BUFFER_HOST_MEMORY, - deviceBitfield.count() > 1, - deviceBitfield.count() > 1, - deviceBitfield}; - unifiedMemoryProperties.alignment = eventAlignment; + NEO::AllocationProperties eventPoolAllocationProperties{rootDeviceIndex, + true, + alignUp(numEvents * eventSize, MemoryConstants::pageSize64k), + allocationType, + deviceBitfield.count() > 1, + deviceBitfield.count() > 1, + deviceBitfield}; + eventPoolAllocationProperties.alignment = MemoryConstants::cacheLineSize; void *eventPoolPtr = driver->getMemoryManager()->createMultiGraphicsAllocation(rootDeviceIndices, - unifiedMemoryProperties, + eventPoolAllocationProperties, *eventPoolAllocations); if (!eventPoolPtr) { return ZE_RESULT_ERROR_OUT_OF_HOST_MEMORY; @@ -88,6 +119,11 @@ EventPoolImp::~EventPoolImp() { } delete eventPoolAllocations; eventPoolAllocations = nullptr; + + if (eventPoolCommandList) { + eventPoolCommandList->destroy(); + eventPoolCommandList = nullptr; + } } ze_result_t EventPoolImp::getIpcHandle(ze_ipc_event_pool_handle_t *pIpcHandle) { @@ -122,6 +158,10 @@ Event *Event::create(EventPool *eventPool, const ze_event_desc_t *desc, Device * event->timestampsData = std::make_unique(); } + if (eventPool->allocOnDevice) { + event->allocOnDevice = true; + } + auto alloc = eventPool->getAllocation().getGraphicsAllocation(device->getNEODevice()->getRootDeviceIndex()); uint64_t baseHostAddr = reinterpret_cast(alloc->getUnderlyingBuffer()); @@ -132,6 +172,10 @@ Event *Event::create(EventPool *eventPool, const ze_event_desc_t *desc, Device * event->csr = static_cast(device)->neoDevice->getDefaultEngine().commandStreamReceiver; event->reset(); + if (event->allocOnDevice) { + eventPool->eventPoolCommandList->appendEventReset(event->toHandle()); + } + return event; } @@ -188,6 +232,10 @@ void EventImp::assignTimestampData(void *address) { } } +uint64_t Event::getGpuAddress() { + return gpuAddress; +} + ze_result_t Event::destroy() { delete this; return ZE_RESULT_SUCCESS; @@ -292,6 +340,10 @@ ze_result_t EventImp::hostSynchronize(uint64_t timeout) { } ze_result_t EventImp::reset() { + if (allocOnDevice) { + return ZE_RESULT_SUCCESS; + } + resetPackets(); return hostEventSetValue(Event::STATE_INITIAL); } diff --git a/level_zero/core/source/event/event.h b/level_zero/core/source/event/event.h index 7d990a6dee..9c33bd2023 100644 --- a/level_zero/core/source/event/event.h +++ b/level_zero/core/source/event/event.h @@ -48,17 +48,18 @@ struct Event : _ze_event_handle_t { void increasePacketsInUse() { packetsInUse++; } void resetPackets() { packetsInUse = 0; } - uint64_t getGpuAddress() { return gpuAddress; } uint32_t getPacketsInUse() { return packetsInUse; } uint64_t getTimestampPacketAddress(); + virtual uint64_t getGpuAddress(); void *hostAddress = nullptr; - uint64_t gpuAddress; uint32_t packetsInUse; + uint64_t gpuAddress = 0u; ze_event_scope_flags_t signalScope = 0u; ze_event_scope_flags_t waitScope = 0u; bool isTimestampEvent = false; + bool allocOnDevice = false; std::unique_ptr timestampsData = nullptr; uint64_t globalStartTS; @@ -118,9 +119,12 @@ struct EventPool : _ze_event_pool_handle_t { virtual NEO::MultiGraphicsAllocation &getAllocation() { return *eventPoolAllocations; } - virtual uint32_t getEventSize() = 0; + virtual size_t getEventSize() = 0; bool isEventPoolUsedForTimestamp = false; + bool allocOnDevice = false; + + CommandList *eventPoolCommandList = nullptr; protected: NEO::MultiGraphicsAllocation *eventPoolAllocations = nullptr; @@ -131,6 +135,10 @@ struct EventPoolImp : public EventPool { if (flags & ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP) { isEventPoolUsedForTimestamp = true; } + + if (!(flags & ZE_EVENT_POOL_FLAG_HOST_VISIBLE)) { + allocOnDevice = true; + } } ze_result_t initialize(DriverHandle *driver, @@ -148,7 +156,7 @@ struct EventPoolImp : public EventPool { ze_result_t createEvent(const ze_event_desc_t *desc, ze_event_handle_t *phEvent) override; - uint32_t getEventSize() override { return eventSize; } + size_t getEventSize() override { return eventSize; } size_t getNumEvents() { return numEvents; } Device *getDevice() override { return devices[0]; } diff --git a/level_zero/core/test/unit_tests/gen12lp/test_events_gen12lp.cpp b/level_zero/core/test/unit_tests/gen12lp/test_events_gen12lp.cpp index 039a78d17e..9adb7fdae3 100644 --- a/level_zero/core/test/unit_tests/gen12lp/test_events_gen12lp.cpp +++ b/level_zero/core/test/unit_tests/gen12lp/test_events_gen12lp.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 Intel Corporation + * Copyright (C) 2020-2021 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -20,7 +20,7 @@ struct TimestampEvent : public Test { DeviceFixture::SetUp(); ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP | ZE_EVENT_POOL_FLAG_HOST_VISIBLE; ze_event_desc_t eventDesc = {}; eventDesc.index = 0; diff --git a/level_zero/core/test/unit_tests/mocks/mock_event.h b/level_zero/core/test/unit_tests/mocks/mock_event.h index 327bf7deb1..a4155a8463 100644 --- a/level_zero/core/test/unit_tests/mocks/mock_event.h +++ b/level_zero/core/test/unit_tests/mocks/mock_event.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 Intel Corporation + * Copyright (C) 2020-2021 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -72,7 +72,7 @@ struct Mock : public EventPool { MOCK_METHOD2(reserveEventFromPool, ze_result_t(int index, ::L0::Event *event)); MOCK_METHOD1(releaseEventToPool, ze_result_t(::L0::Event *event)); MOCK_METHOD0(getDevice, Device *()); - MOCK_METHOD0(getEventSize, uint32_t()); + MOCK_METHOD0(getEventSize, size_t()); std::vector pool; diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_1.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_1.cpp index 8c9337d4ee..9a161e2988 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_1.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_1.cpp @@ -1023,7 +1023,7 @@ HWTEST2_F(CommandListCreate, givenCopyCommandListWhenProfilingBeforeCommandForCo commandList->initialize(device, NEO::EngineGroupType::Copy); ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP | ZE_EVENT_POOL_FLAG_HOST_VISIBLE; ze_event_desc_t eventDesc = {}; eventDesc.index = 0; @@ -1060,7 +1060,7 @@ HWTEST2_F(CommandListCreate, givenCopyCommandListWhenProfilingAfterCommandForCop commandList->initialize(device, NEO::EngineGroupType::Copy); ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP | ZE_EVENT_POOL_FLAG_HOST_VISIBLE; ze_event_desc_t eventDesc = {}; eventDesc.index = 0; diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_2.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_2.cpp index 7039ffecea..a18379e0c0 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_2.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_2.cpp @@ -1079,7 +1079,7 @@ HWTEST2_F(CommandListCreate, givenCopyCommandListWhenTimestampPassedToMemoryCopy void *srcPtr = reinterpret_cast(0x1234); void *dstPtr = reinterpret_cast(0x2345); ze_event_pool_desc_t eventPoolDesc = {}; - eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP | ZE_EVENT_POOL_FLAG_HOST_VISIBLE; eventPoolDesc.count = 1; ze_event_desc_t eventDesc = {}; @@ -1170,7 +1170,7 @@ HWTEST2_F(CommandListCreate, givenCommandListWhenTimestampPassedToMemoryCopyThen ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP | ZE_EVENT_POOL_FLAG_HOST_VISIBLE; ze_event_desc_t eventDesc = {}; eventDesc.index = 0; diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_event_reset.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_event_reset.cpp index 0ec6f815da..017e871c17 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_event_reset.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_event_reset.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 Intel Corporation + * Copyright (C) 2020-2021 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -129,7 +129,7 @@ HWTEST2_F(CommandListAppendEventReset, givenTimestampEventUsedInResetThenPipeCon ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP | ZE_EVENT_POOL_FLAG_HOST_VISIBLE; ze_event_desc_t eventDesc = {}; eventDesc.index = 0; @@ -170,6 +170,7 @@ HWTEST2_F(CommandListAppendEventReset, givenEventWithHostScopeUsedInResetThenPip ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_HOST_VISIBLE; ze_event_desc_t eventDesc = {}; eventDesc.index = 0; diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel.cpp index cbca3e8f94..e893ee32a6 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel.cpp @@ -292,7 +292,7 @@ HWTEST2_F(CommandListAppendLaunchKernel, givenTimestampEventsWhenAppendingKernel auto usedSpaceBefore = commandList->commandContainer.getCommandStream()->getUsed(); ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP | ZE_EVENT_POOL_FLAG_HOST_VISIBLE; ze_event_desc_t eventDesc = {}; eventDesc.index = 0; @@ -382,7 +382,7 @@ HWTEST2_F(CommandListAppendLaunchKernel, givenKernelLaunchWithTSEventAndScopeFla auto usedSpaceBefore = commandList->commandContainer.getCommandStream()->getUsed(); ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP | ZE_EVENT_POOL_FLAG_HOST_VISIBLE; const ze_event_desc_t eventDesc = { ZE_STRUCTURE_TYPE_EVENT_DESC, diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_signal_event.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_signal_event.cpp index e034a2ec63..58ac42c944 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_signal_event.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_signal_event.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 Intel Corporation + * Copyright (C) 2020-2021 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -193,7 +193,7 @@ HWTEST2_F(CommandListAppendSignalEvent, givenTimestampEventUsedInSignalThenPipeC ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP | ZE_EVENT_POOL_FLAG_HOST_VISIBLE; ze_event_desc_t eventDesc = {}; eventDesc.index = 0; diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_blit.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_blit.cpp index 7c2642f3a3..4a341ef4ce 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_blit.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_blit.cpp @@ -185,7 +185,7 @@ HWTEST2_F(AppendMemoryCopy, givenCopyCommandListWhenTimestampPassedToMemoryCopyR commandList->initialize(device, NEO::EngineGroupType::Copy); ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP | ZE_EVENT_POOL_FLAG_HOST_VISIBLE; ze_event_desc_t eventDesc = {}; eventDesc.index = 0; @@ -244,7 +244,7 @@ HWTEST2_F(AppendMemoryCopy, givenCopyCommandListWhenTimestampPassedToImageCopyBl commandList->initialize(device, NEO::EngineGroupType::Copy); ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP | ZE_EVENT_POOL_FLAG_HOST_VISIBLE; ze_event_desc_t eventDesc = {}; eventDesc.index = 0; diff --git a/level_zero/core/test/unit_tests/sources/event/test_event.cpp b/level_zero/core/test/unit_tests/sources/event/test_event.cpp index b5a89d86be..28143d8d0c 100644 --- a/level_zero/core/test/unit_tests/sources/event/test_event.cpp +++ b/level_zero/core/test/unit_tests/sources/event/test_event.cpp @@ -30,7 +30,7 @@ TEST_F(EventPoolCreate, GivenEventPoolThenAllocationContainsAtLeast16Bytes) { auto allocation = &eventPool->getAllocation(); ASSERT_NE(nullptr, allocation); - uint32_t minAllocationSize = eventPool->getEventSize(); + size_t minAllocationSize = eventPool->getEventSize(); EXPECT_GE(allocation->getGraphicsAllocation(device->getNEODevice()->getRootDeviceIndex())->getUnderlyingBufferSize(), minAllocationSize); } @@ -38,7 +38,7 @@ TEST_F(EventPoolCreate, GivenEventPoolThenAllocationContainsAtLeast16Bytes) { TEST_F(EventPoolCreate, givenTimestampEventsThenEventSizeSufficientForAllKernelTimestamps) { ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP | ZE_EVENT_POOL_FLAG_HOST_VISIBLE; std::unique_ptr eventPool(EventPool::create(driverHandle.get(), 0, nullptr, &eventPoolDesc)); ASSERT_NE(nullptr, eventPool); @@ -142,6 +142,37 @@ TEST_F(EventPoolCreate, GivenDeviceThenEventPoolIsCreated) { eventPool->destroy(); } +TEST_F(EventPoolCreate, whenHostVisibleFlagNotSetThenEventAllocationIsOnDevice) { + ze_event_pool_desc_t eventPoolDesc = { + ZE_STRUCTURE_TYPE_EVENT_POOL_DESC, + nullptr, + 0u, + 4}; + + auto deviceHandle = device->toHandle(); + auto eventPool = EventPool::create(driverHandle.get(), 1, &deviceHandle, &eventPoolDesc); + + ASSERT_NE(nullptr, eventPool); + + EXPECT_EQ(NEO::GraphicsAllocation::AllocationType::BUFFER, eventPool->getAllocation().getAllocationType()); + eventPool->destroy(); +} + +TEST_F(EventPoolCreate, whenHostVisibleFlagNotSetThenEventPoolCommandListIsCreated) { + ze_event_pool_desc_t eventPoolDesc = { + ZE_STRUCTURE_TYPE_EVENT_POOL_DESC, + nullptr, + 0u, + 4}; + + auto deviceHandle = device->toHandle(); + auto eventPool = EventPool::create(driverHandle.get(), 1, &deviceHandle, &eventPoolDesc); + + ASSERT_NE(nullptr, eventPool->eventPoolCommandList); + + eventPool->destroy(); +} + struct EventCreateAllocationResidencyTest : public ::testing::Test { void SetUp() override { neoDevice = NEO::MockDevice::createWithNewExecutionEnvironment(NEO::defaultHwInfo.get()); @@ -170,7 +201,7 @@ class TimestampEventCreate : public Test { DeviceFixture::SetUp(); ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP | ZE_EVENT_POOL_FLAG_HOST_VISIBLE; ze_event_desc_t eventDesc = {}; eventDesc.index = 0; @@ -213,7 +244,7 @@ TEST_F(TimestampEventCreate, givenSingleTimestampEventThenAllocationSizeCreatedF auto allocation = &eventPool->getAllocation(); ASSERT_NE(nullptr, allocation); - uint32_t minTimestampEventAllocation = eventPool->getEventSize(); + size_t minTimestampEventAllocation = eventPool->getEventSize(); EXPECT_GE(allocation->getGraphicsAllocation(device->getNEODevice()->getRootDeviceIndex())->getUnderlyingBufferSize(), minTimestampEventAllocation); } @@ -301,6 +332,37 @@ TEST_F(EventPoolCreateMultiDevice, whenCreatingEventPoolWithMultipleDevicesThenE delete[] devices; } +TEST_F(EventPoolCreateMultiDevice, whenCreatingEventPoolWithMultipleDevicesAndHostVisibleFlagNotSetThenEventPoolCreateSucceedsButEventAllocNotPlacedOnDevice) { + ze_event_pool_desc_t eventPoolDesc = {}; + eventPoolDesc.stype = ZE_STRUCTURE_TYPE_EVENT_POOL_DESC; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_HOST_VISIBLE; + eventPoolDesc.count = 32; + + uint32_t deviceCount = 0; + ze_result_t result = zeDeviceGet(driverHandle.get(), &deviceCount, nullptr); + EXPECT_EQ(ZE_RESULT_SUCCESS, result); + EXPECT_EQ(deviceCount, numRootDevices); + + ze_device_handle_t *devices = new ze_device_handle_t[deviceCount]; + result = zeDeviceGet(driverHandle.get(), &deviceCount, devices); + EXPECT_EQ(ZE_RESULT_SUCCESS, result); + + std::unique_ptr eventPool(EventPool::create(driverHandle.get(), + deviceCount, + devices, + &eventPoolDesc)); + EXPECT_NE(nullptr, eventPool); + + auto allocation = &eventPool->getAllocation(); + EXPECT_NE(nullptr, allocation); + + EXPECT_EQ(allocation->getGraphicsAllocations().size(), numRootDevices); + + EXPECT_EQ(false, eventPool->allocOnDevice); + + delete[] devices; +} + TEST_F(EventPoolCreateMultiDevice, whenCreatingEventPoolWithNoDevicesThenEventPoolCreatedWithOneDevice) { ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.stype = ZE_STRUCTURE_TYPE_EVENT_POOL_DESC; diff --git a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_query_pool_1.cpp b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_query_pool_1.cpp index 80f9ef50f1..860200598b 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_query_pool_1.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_query_pool_1.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 Intel Corporation + * Copyright (C) 2020-2021 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -537,7 +537,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZeEventPoolCreateIsCalledTh ze_event_pool_handle_t eventPoolHandle = {}; ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = 0; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_HOST_VISIBLE; eventPoolDesc.stype = ZE_STRUCTURE_TYPE_EVENT_POOL_DESC; // Create event pool. @@ -554,7 +554,7 @@ TEST_F(MetricQueryPoolTest, givenIncorrectArgumentsWhenZeEventCreateIsCalledThen ze_event_pool_handle_t eventPoolHandle = {}; ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = 0; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_HOST_VISIBLE; eventPoolDesc.stype = ZE_STRUCTURE_TYPE_EVENT_POOL_DESC; // Create event pool. @@ -572,7 +572,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZeEventCreateIsCalledThenRe ze_event_pool_handle_t eventPoolHandle = {}; ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = 0; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_HOST_VISIBLE; eventPoolDesc.stype = ZE_STRUCTURE_TYPE_EVENT_POOL_DESC; ze_event_handle_t eventHandle = {}; @@ -606,7 +606,7 @@ TEST_F(MetricQueryPoolTest, givenIncorrectArgumentsWhenZetCommandListAppendMetri ze_event_pool_handle_t eventPoolHandle = {}; ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = 0; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_HOST_VISIBLE; eventPoolDesc.stype = ZE_STRUCTURE_TYPE_EVENT_POOL_DESC; ze_event_handle_t eventHandle = {}; @@ -717,7 +717,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetCommandListAppendMetricQ ze_event_pool_handle_t eventPoolHandle = {}; ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = 0; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_HOST_VISIBLE; eventPoolDesc.stype = ZE_STRUCTURE_TYPE_EVENT_POOL_DESC; ze_event_handle_t eventHandle = {}; @@ -834,7 +834,7 @@ TEST_F(MetricQueryPoolTest, givenIncorrectArgumentsWhenZetMetricQueryGetDataIsCa ze_event_pool_handle_t eventPoolHandle = {}; ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = 0; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_HOST_VISIBLE; eventPoolDesc.stype = ZE_STRUCTURE_TYPE_EVENT_POOL_DESC; ze_event_handle_t eventHandle = {}; @@ -950,7 +950,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetMetricQueryGetDataIsCall ze_event_pool_handle_t eventPoolHandle = {}; ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = 0; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_HOST_VISIBLE; eventPoolDesc.stype = ZE_STRUCTURE_TYPE_EVENT_POOL_DESC; ze_event_handle_t eventHandle = {}; @@ -1094,7 +1094,7 @@ TEST_F(MetricQueryPoolTest, givenCorrectArgumentsWhenZetMetricQueryGetDataIsCall ze_event_pool_handle_t eventPoolHandle = {}; ze_event_pool_desc_t eventPoolDesc = {}; eventPoolDesc.count = 1; - eventPoolDesc.flags = 0; + eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_HOST_VISIBLE; eventPoolDesc.stype = ZE_STRUCTURE_TYPE_EVENT_POOL_DESC; ze_event_handle_t eventHandle = {};