From e1748ad4365704b5c33aeba879f4834887e1a8f0 Mon Sep 17 00:00:00 2001 From: "Kulkarni, Ashwin Kumar" Date: Wed, 13 Jul 2022 09:59:14 +0000 Subject: [PATCH] Defer Sysman Scheduler and Memory Module Initialization With this change, init for sysman Scheduler/Memory API would not be done during zeInit. init and thereby Scheduler/Memory API handle creation would be done only when user explicitly requests to enumerate handles using zesDeviceEnumSchedulers/zesDeviceEnumMemory. Related-To: LOCI-3127 Signed-off-by: Kulkarni, Ashwin Kumar --- level_zero/tools/source/sysman/memory/memory.cpp | 6 +++++- level_zero/tools/source/sysman/memory/memory.h | 4 +++- level_zero/tools/source/sysman/scheduler/scheduler.cpp | 6 +++++- level_zero/tools/source/sysman/scheduler/scheduler.h | 4 +++- level_zero/tools/source/sysman/sysman_imp.cpp | 6 ------ .../sources/sysman/memory/linux/test_sysman_memory.cpp | 2 +- .../sources/sysman/memory/linux/test_sysman_memory_dg1.cpp | 2 +- .../sources/sysman/memory/windows/test_zes_memory.cpp | 2 +- .../sources/sysman/scheduler/linux/test_zes_scheduler.cpp | 2 +- 9 files changed, 20 insertions(+), 14 deletions(-) diff --git a/level_zero/tools/source/sysman/memory/memory.cpp b/level_zero/tools/source/sysman/memory/memory.cpp index a1c4eb8076..725e1f7dd9 100644 --- a/level_zero/tools/source/sysman/memory/memory.cpp +++ b/level_zero/tools/source/sysman/memory/memory.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 Intel Corporation + * Copyright (C) 2020-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -10,6 +10,7 @@ #include "level_zero/core/source/device/device.h" #include "level_zero/tools/source/sysman/memory/memory_imp.h" +#include "level_zero/tools/source/sysman/os_sysman.h" namespace L0 { @@ -36,6 +37,9 @@ ze_result_t MemoryHandleContext::init(std::vector &deviceHan } ze_result_t MemoryHandleContext::memoryGet(uint32_t *pCount, zes_mem_handle_t *phMemory) { + std::call_once(initMemoryOnce, [this]() { + this->init(pOsSysman->getDeviceHandles()); + }); uint32_t handleListSize = static_cast(handleList.size()); uint32_t numToCopy = std::min(*pCount, handleListSize); if (0 == *pCount || *pCount > handleListSize) { diff --git a/level_zero/tools/source/sysman/memory/memory.h b/level_zero/tools/source/sysman/memory/memory.h index fb7c5f7c90..128ebdd424 100644 --- a/level_zero/tools/source/sysman/memory/memory.h +++ b/level_zero/tools/source/sysman/memory/memory.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 Intel Corporation + * Copyright (C) 2020-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -9,6 +9,7 @@ #include "level_zero/core/source/device/device.h" #include +#include #include struct _zes_mem_handle_t { @@ -46,6 +47,7 @@ struct MemoryHandleContext { private: void createHandle(ze_device_handle_t deviceHandle); + std::once_flag initMemoryOnce; }; } // namespace L0 diff --git a/level_zero/tools/source/sysman/scheduler/scheduler.cpp b/level_zero/tools/source/sysman/scheduler/scheduler.cpp index f6fdac3981..08cdc1561e 100644 --- a/level_zero/tools/source/sysman/scheduler/scheduler.cpp +++ b/level_zero/tools/source/sysman/scheduler/scheduler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 Intel Corporation + * Copyright (C) 2020-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -8,6 +8,7 @@ #include "shared/source/helpers/basic_math.h" #include "shared/source/helpers/debug_helpers.h" +#include "level_zero/tools/source/sysman/os_sysman.h" #include "level_zero/tools/source/sysman/scheduler/scheduler_imp.h" class OsScheduler; @@ -39,6 +40,9 @@ void SchedulerHandleContext::init(std::vector &deviceHandles } ze_result_t SchedulerHandleContext::schedulerGet(uint32_t *pCount, zes_sched_handle_t *phScheduler) { + std::call_once(initSchedulerOnce, [this]() { + this->init(pOsSysman->getDeviceHandles()); + }); uint32_t handleListSize = static_cast(handleList.size()); uint32_t numToCopy = std::min(*pCount, handleListSize); if (0 == *pCount || *pCount > handleListSize) { diff --git a/level_zero/tools/source/sysman/scheduler/scheduler.h b/level_zero/tools/source/sysman/scheduler/scheduler.h index 623e7f4bcb..29f8644993 100644 --- a/level_zero/tools/source/sysman/scheduler/scheduler.h +++ b/level_zero/tools/source/sysman/scheduler/scheduler.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 Intel Corporation + * Copyright (C) 2020-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -12,6 +12,7 @@ #include #include +#include #include #include @@ -51,6 +52,7 @@ struct SchedulerHandleContext : NEO::NonCopyableOrMovableClass { private: void createHandle(zes_engine_type_flag_t engineType, std::vector &listOfEngines, ze_device_handle_t deviceHandle); + std::once_flag initSchedulerOnce; }; } // namespace L0 diff --git a/level_zero/tools/source/sysman/sysman_imp.cpp b/level_zero/tools/source/sysman/sysman_imp.cpp index cd5e960acd..e23af403b0 100644 --- a/level_zero/tools/source/sysman/sysman_imp.cpp +++ b/level_zero/tools/source/sysman/sysman_imp.cpp @@ -112,12 +112,6 @@ ze_result_t SysmanDeviceImp::init() { if (pEngineHandleContext) { pEngineHandleContext->init(); } - if (pSchedulerHandleContext) { - pSchedulerHandleContext->init(deviceHandles); - } - if (pMemoryHandleContext) { - pMemoryHandleContext->init(deviceHandles); - } if (pGlobalOperations) { pGlobalOperations->init(); } diff --git a/level_zero/tools/test/unit_tests/sources/sysman/memory/linux/test_sysman_memory.cpp b/level_zero/tools/test/unit_tests/sources/sysman/memory/linux/test_sysman_memory.cpp index 34e334c371..b1523f2f7a 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/memory/linux/test_sysman_memory.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/memory/linux/test_sysman_memory.cpp @@ -46,7 +46,7 @@ class SysmanDeviceMemoryFixture : public SysmanDeviceFixture { deviceHandles.resize(subDeviceCount, nullptr); Device::fromHandle(device->toHandle())->getSubDevices(&subDeviceCount, deviceHandles.data()); } - pSysmanDeviceImp->pMemoryHandleContext->init(deviceHandles); + getMemoryHandles(0); } void TearDown() override { diff --git a/level_zero/tools/test/unit_tests/sources/sysman/memory/linux/test_sysman_memory_dg1.cpp b/level_zero/tools/test/unit_tests/sources/sysman/memory/linux/test_sysman_memory_dg1.cpp index de80228fe6..ca032e9bf7 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/memory/linux/test_sysman_memory_dg1.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/memory/linux/test_sysman_memory_dg1.cpp @@ -58,7 +58,7 @@ class SysmanDeviceMemoryFixture : public SysmanDeviceFixture { deviceHandles.resize(subDeviceCount, nullptr); Device::fromHandle(device->toHandle())->getSubDevices(&subDeviceCount, deviceHandles.data()); } - pSysmanDeviceImp->pMemoryHandleContext->init(deviceHandles); + getMemoryHandles(0); } void TearDown() override { diff --git a/level_zero/tools/test/unit_tests/sources/sysman/memory/windows/test_zes_memory.cpp b/level_zero/tools/test/unit_tests/sources/sysman/memory/windows/test_zes_memory.cpp index ad761b350b..8a3e64a257 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/memory/windows/test_zes_memory.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/memory/windows/test_zes_memory.cpp @@ -56,7 +56,7 @@ class SysmanDeviceMemoryFixture : public SysmanDeviceFixture { deviceHandles.resize(subDeviceCount, nullptr); Device::fromHandle(device->toHandle())->getSubDevices(&subDeviceCount, deviceHandles.data()); } - pSysmanDeviceImp->pMemoryHandleContext->init(deviceHandles); + getMemoryHandles(0); } void TearDown() override { diff --git a/level_zero/tools/test/unit_tests/sources/sysman/scheduler/linux/test_zes_scheduler.cpp b/level_zero/tools/test/unit_tests/sources/sysman/scheduler/linux/test_zes_scheduler.cpp index e7b8f753c6..b9a950de5f 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/scheduler/linux/test_zes_scheduler.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/scheduler/linux/test_zes_scheduler.cpp @@ -84,7 +84,7 @@ class SysmanDeviceSchedulerFixture : public SysmanDeviceFixture { deviceHandles.resize(subDeviceCount, nullptr); Device::fromHandle(device->toHandle())->getSubDevices(&subDeviceCount, deviceHandles.data()); } - pSysmanDeviceImp->pSchedulerHandleContext->init(deviceHandles); + getSchedHandles(0); } void TearDown() override {