From e01b9e0c86a85249c300e7990140fbd3246cf59a Mon Sep 17 00:00:00 2001 From: "Spruit, Neil R" Date: Tue, 21 Apr 2020 15:10:00 +0000 Subject: [PATCH] Updated events to store CommandStreamReceiver at init - Updated Event Class to store a pointer to the associated device's command stream receiver to use during query status and host synchronize Change-Id: I130df8541ca6a13396669c75fefd135d5ad1ef7d Signed-off-by: Spruit, Neil R --- level_zero/core/source/event/event.cpp | 7 ++- level_zero/core/source/event/event.h | 2 + .../unit_tests/sources/event/test_event.cpp | 44 +++++++++++++++++++ 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/level_zero/core/source/event/event.cpp b/level_zero/core/source/event/event.cpp index faba5485a6..7ce183b25a 100644 --- a/level_zero/core/source/event/event.cpp +++ b/level_zero/core/source/event/event.cpp @@ -41,13 +41,12 @@ struct EventImp : public Event { ze_result_t queryStatus() override { uint64_t *hostAddr = static_cast(hostAddress); auto alloc = &(this->eventPool->getAllocation()); - auto csr = static_cast(this->device)->neoDevice->getDefaultEngine().commandStreamReceiver; if (metricTracer != nullptr) { *hostAddr = metricTracer->getNotificationState(); } - csr->downloadAllocation(*alloc); + this->csr->downloadAllocation(*alloc); if (isTimestampEvent) { auto baseAddr = reinterpret_cast(hostAddress); @@ -168,6 +167,7 @@ Event *Event::create(EventPool *eventPool, const ze_event_desc_t *desc, Device * event->signalScope = desc->signal; event->waitScope = desc->wait; + event->csr = static_cast(device)->neoDevice->getDefaultEngine().commandStreamReceiver; event->reset(); @@ -250,9 +250,8 @@ ze_result_t EventImp::hostSynchronize(uint32_t timeout) { std::chrono::high_resolution_clock::time_point time1, time2; int64_t timeDiff = 0; ze_result_t ret = ZE_RESULT_NOT_READY; - auto csr = static_cast(this->device)->neoDevice->getDefaultEngine().commandStreamReceiver; - if (csr->getType() == NEO::CommandStreamReceiverType::CSR_AUB) { + if (this->csr->getType() == NEO::CommandStreamReceiverType::CSR_AUB) { return ZE_RESULT_SUCCESS; } diff --git a/level_zero/core/source/event/event.h b/level_zero/core/source/event/event.h index 09167882ca..461f723ebd 100644 --- a/level_zero/core/source/event/event.h +++ b/level_zero/core/source/event/event.h @@ -66,6 +66,8 @@ struct Event : _ze_event_handle_t { // Metric tracer instance associated with the event. MetricTracer *metricTracer = nullptr; + NEO::CommandStreamReceiver *csr = nullptr; + protected: NEO::GraphicsAllocation *allocation = nullptr; }; 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 fd3c8bf1b6..12d5703eba 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 @@ -15,6 +15,7 @@ namespace L0 { namespace ult { using EventPoolCreate = Test; +using EventCreate = Test; TEST_F(EventPoolCreate, allocationContainsAtLeast16Bytes) { ze_event_pool_desc_t eventPoolDesc = { @@ -45,6 +46,49 @@ TEST_F(EventPoolCreate, givenTimestampEventsThenVerifyNumTimestampsToRead) { EXPECT_EQ(numTimestamps, eventPool->getNumEventTimestampsToRead()); } +TEST_F(EventPoolCreate, givenAnEventIsCreatedFromThisEventPoolThenEventContainsDeviceCommandStreamReceiver) { + ze_event_pool_desc_t eventPoolDesc = { + ZE_EVENT_POOL_DESC_VERSION_CURRENT, + ZE_EVENT_POOL_FLAG_HOST_VISIBLE, + 1}; + const ze_event_desc_t eventDesc = { + ZE_EVENT_DESC_VERSION_CURRENT, + 0, + ZE_EVENT_SCOPE_FLAG_HOST, + ZE_EVENT_SCOPE_FLAG_HOST}; + + ze_event_handle_t event = nullptr; + + std::unique_ptr eventPool(EventPool::create(device, &eventPoolDesc)); + ASSERT_NE(nullptr, eventPool); + + eventPool->createEvent(&eventDesc, &event); + + std::unique_ptr event_object(L0::Event::fromHandle(event)); + ASSERT_NE(nullptr, event_object->csr); + ASSERT_EQ(static_cast(device)->neoDevice->getDefaultEngine().commandStreamReceiver, event_object->csr); +} + +TEST_F(EventCreate, givenAnEventCreatedThenTheEventHasTheDeviceCommandStreamReceiverSet) { + ze_event_pool_desc_t eventPoolDesc = { + ZE_EVENT_POOL_DESC_VERSION_CURRENT, + ZE_EVENT_POOL_FLAG_HOST_VISIBLE, + 1}; + const ze_event_desc_t eventDesc = { + ZE_EVENT_DESC_VERSION_CURRENT, + 0, + ZE_EVENT_SCOPE_FLAG_DEVICE, + ZE_EVENT_SCOPE_FLAG_DEVICE}; + + std::unique_ptr eventPool(EventPool::create(device, &eventPoolDesc)); + ASSERT_NE(nullptr, eventPool); + + std::unique_ptr event(Event::create(eventPool.get(), &eventDesc, device)); + ASSERT_NE(nullptr, event); + ASSERT_NE(nullptr, event.get()->csr); + ASSERT_EQ(static_cast(device)->neoDevice->getDefaultEngine().commandStreamReceiver, event.get()->csr); +} + class TimestampEventCreate : public Test { public: void SetUp() override {